3.8.1
6
.babelrc
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
"@vue/app"
|
||||||
|
],
|
||||||
|
"plugins": ["@babel/plugin-syntax-dynamic-import"]
|
||||||
|
}
|
||||||
9
.editorconfig
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
0
.eslintignore
Normal file
21
.eslintrc.js
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
'extends': [
|
||||||
|
'plugin:vue/essential',
|
||||||
|
'@vue/standard'
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
// allow async-await
|
||||||
|
'generator-star-spacing': 'off',
|
||||||
|
// allow debugger during development
|
||||||
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||||
|
'vue/no-parsing-error': [2, {
|
||||||
|
'x-invalid-end-tag': false
|
||||||
|
}],
|
||||||
|
'no-undef': 'off',
|
||||||
|
'camelcase': 'off'
|
||||||
|
},
|
||||||
|
parserOptions: {
|
||||||
|
parser: 'babel-eslint'
|
||||||
|
}
|
||||||
|
}
|
||||||
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.idea
|
||||||
|
node_modules
|
||||||
5
.postcssrc.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
module.exports = {
|
||||||
|
plugins: {
|
||||||
|
autoprefixer: {}
|
||||||
|
}
|
||||||
|
}
|
||||||
5
.travis.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js: stable
|
||||||
|
script: npm run lint
|
||||||
|
notifications:
|
||||||
|
email: false
|
||||||
3
cypress.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"pluginsFile": "tests/e2e/plugins/index.js"
|
||||||
|
}
|
||||||
14944
package-lock.json
generated
Normal file
85
package.json
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
{
|
||||||
|
"name": "iview-admin",
|
||||||
|
"version": "2.0.0",
|
||||||
|
"author": "Lison<lison16new@163.com>",
|
||||||
|
"private": false,
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vue-cli-service serve --open",
|
||||||
|
"build": "vue-cli-service build",
|
||||||
|
"lint": "vue-cli-service lint",
|
||||||
|
"test:unit": "vue-cli-service test:unit",
|
||||||
|
"test:e2e": "vue-cli-service test:e2e"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.18.0",
|
||||||
|
"babel-polyfill": "^6.26.0",
|
||||||
|
"clipboard": "^2.0.0",
|
||||||
|
"codemirror": "^5.38.0",
|
||||||
|
"cookiejar": "^2.1.2",
|
||||||
|
"countup": "^1.8.2",
|
||||||
|
"cropperjs": "^1.2.2",
|
||||||
|
"dayjs": "^1.7.7",
|
||||||
|
"echarts": "^4.0.4",
|
||||||
|
"html2canvas": "^1.0.0-alpha.12",
|
||||||
|
"iview": "^3.2.2",
|
||||||
|
"iview-area": "^1.5.17",
|
||||||
|
"js-cookie": "^2.2.0",
|
||||||
|
"js-md5": "^0.7.3",
|
||||||
|
"moment": "^2.24.0",
|
||||||
|
"quill": "^1.3.7",
|
||||||
|
"quill-image-resize-module": "^3.0.0",
|
||||||
|
"simplemde": "^1.11.2",
|
||||||
|
"sortablejs": "^1.7.0",
|
||||||
|
"svg-progress-bar": "^0.1.17",
|
||||||
|
"tree-table-vue": "^1.1.0",
|
||||||
|
"v-org-tree": "^1.0.6",
|
||||||
|
"vue": "^2.5.10",
|
||||||
|
"vue-circleprogressbar": "^1.3.0",
|
||||||
|
"vue-codemirror": "^4.0.6",
|
||||||
|
"vue-cookies": "^1.6.1",
|
||||||
|
"vue-cropper": "^0.4.9",
|
||||||
|
"vue-i18n": "^7.8.0",
|
||||||
|
"vue-quill-editor": "^3.0.6",
|
||||||
|
"vue-router": "^3.0.7",
|
||||||
|
"vuedraggable": "^2.16.0",
|
||||||
|
"vuex": "^3.0.1",
|
||||||
|
"wangeditor": "^3.1.1",
|
||||||
|
"xlsx": "^0.13.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
||||||
|
"@vue/cli-plugin-babel": "^3.0.1",
|
||||||
|
"@vue/cli-plugin-eslint": "^3.0.1",
|
||||||
|
"@vue/cli-plugin-unit-mocha": "^3.0.1",
|
||||||
|
"@vue/cli-service": "^3.0.1",
|
||||||
|
"@vue/eslint-config-standard": "^3.0.0-beta.10",
|
||||||
|
"@vue/test-utils": "^1.0.0-beta.10",
|
||||||
|
"chai": "^4.1.2",
|
||||||
|
"eslint-plugin-cypress": "^2.0.1",
|
||||||
|
"less": "^2.7.3",
|
||||||
|
"less-loader": "^4.0.5",
|
||||||
|
"lint-staged": "^6.0.0",
|
||||||
|
"mockjs": "^1.0.1-beta3",
|
||||||
|
"node-sass": "^4.13.0",
|
||||||
|
"sass-loader": "^8.0.0",
|
||||||
|
"vue-template-compiler": "^2.5.13"
|
||||||
|
},
|
||||||
|
"browserslist": [
|
||||||
|
"> 1%",
|
||||||
|
"last 2 versions",
|
||||||
|
"not ie <= 8"
|
||||||
|
],
|
||||||
|
"gitHooks": {
|
||||||
|
"pre-commit": "lint-staged"
|
||||||
|
},
|
||||||
|
"lint-staged": {
|
||||||
|
"*.js": [
|
||||||
|
"vue-cli-service lint",
|
||||||
|
"git add"
|
||||||
|
],
|
||||||
|
"*.vue": [
|
||||||
|
"vue-cli-service lint",
|
||||||
|
"git add"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
public/.DS_Store
vendored
Normal file
BIN
public/favicon.ico
Normal file
|
After Width: | Height: | Size: 17 KiB |
17
public/index.html
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<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">
|
||||||
|
<link rel="icon" href="/favicon.ico" type="image/x-icon">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
<strong>We're sorry but iview-admin doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||||
|
</noscript>
|
||||||
|
<div id="app"></div>
|
||||||
|
<!-- built files will be auto injected -->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
src/.DS_Store
vendored
Normal file
27
src/App.vue
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<template>
|
||||||
|
<div id="app">
|
||||||
|
<router-view/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'App'
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
.size{
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
html,body{
|
||||||
|
.size;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#app {
|
||||||
|
.size;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
83
src/api/account.js
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
// 获取当前登录用户自己的个人信息
|
||||||
|
export const GetAccountInfo = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/platform.php?s=Platform.User.Profile',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改个人信息
|
||||||
|
export const SetAccountInfo = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/platform.php?s=Platform.User.UpdateProfile',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取最近登录
|
||||||
|
export const GetLoginRecord = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.User.GetLastestLoginRecord',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改密码
|
||||||
|
export const ResetPwd = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/platform.php?s=Platform.User.AlterPass',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
112
src/api/application.js
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
/* export function indexGetIndexData (data) {
|
||||||
|
return axios.request({
|
||||||
|
url: 'api/admin.php?s=Admin.Index.GetIndexData',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
} */
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
// 应用管理列表
|
||||||
|
export const GetAppList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Apps.GetAppList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取应用密钥
|
||||||
|
export const GetAppSecret = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.Apps.GetAppSecret',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加新应用
|
||||||
|
export const AddApp = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.Apps.AddApp',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改状态
|
||||||
|
export const AlterAppStat = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.Apps.AlterAppStat',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 修改应用
|
||||||
|
export const EditApp = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Apps.EditApp',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取单个应用数据
|
||||||
|
export const GetAppInfo = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Apps.GetAppInfo',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 审核单个应用 http://pro-test.api.yesapi.cn/api/admin.php?s=Admin.Apps.VerifyAppStat
|
||||||
|
export const VerifyAppStat = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Apps.VerifyAppStat',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
90
src/api/configuration.js
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
// import validateUrl from './okayapi_config.js'// 添加请求合法性校验的查询参数
|
||||||
|
|
||||||
|
// 添加配置
|
||||||
|
export const AddConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Config.AddConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取配置列表
|
||||||
|
export const GetList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Config.GetList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取单个配置信息
|
||||||
|
export const GetConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Config.GetConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改配置
|
||||||
|
export const EditConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Config.EditConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除配置
|
||||||
|
export const RemoveConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Config.RemoveConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
115
src/api/data.js
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
// 上传文件
|
||||||
|
export const Upload = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.File.Upload',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取CDN素材库
|
||||||
|
export const GetListFile = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.File.GetList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据ID删除CDN中的文件或图片
|
||||||
|
export const DelFile = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.File.DelFile',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getTableData = () => {
|
||||||
|
return axios.request({
|
||||||
|
url: 'get_table_data',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getDragList = () => {
|
||||||
|
return axios.request({
|
||||||
|
url: 'get_drag_list',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const errorReq = () => {
|
||||||
|
return axios.request({
|
||||||
|
url: 'error_url',
|
||||||
|
method: 'post'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const saveErrorLogger = info => {
|
||||||
|
return axios.request({
|
||||||
|
url: 'save_error_logger',
|
||||||
|
data: info,
|
||||||
|
method: 'post'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getOrgData = () => {
|
||||||
|
return axios.request({
|
||||||
|
url: 'get_org_data',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getTreeSelectData = () => {
|
||||||
|
return axios.request({
|
||||||
|
url: 'get_tree_select_data',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
62
src/api/database.js
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
// 获取数据库统计 http://pro-test.api.yesapi.cn/api/admin.php?s=Admin.Database.GetSpaceIndex
|
||||||
|
export const GetSpaceIndex = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Database.GetSpaceIndex',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取数据库实时进程 http://pro-test.api.yesapi.cn/api/admin.php?s=Admin.Database.GetProcess
|
||||||
|
export const GetProcess = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Database.GetProcess',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
76
src/api/home.js
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
/* export function indexGetIndexData (data) {
|
||||||
|
return axios.request({
|
||||||
|
url: 'api/admin.php?s=Admin.Index.GetIndexData',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
} */
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
export const indexGetIndexData = (data) => {
|
||||||
|
// let url = validateUrl('Admin.Index.GetIndexData', data)
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Index.GetIndexData',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const siteIndexData = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Platform.Site.Index',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 获取验证码 */
|
||||||
|
export const captchaCreate = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/platform.php?s=Platform.Captcha.Create',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
38
src/api/okayapi_config.js
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
// /*
|
||||||
|
// * @Description:
|
||||||
|
// * @Author: Wang Minjie
|
||||||
|
// * @Date: 2019-12-31 09:55:24
|
||||||
|
// * @LastEditTime: 2019-12-31 16:49:32
|
||||||
|
// * @LastEditors: Wang Minjie
|
||||||
|
// */
|
||||||
|
// import md5 from 'js-md5'
|
||||||
|
// // APP_KEY配置
|
||||||
|
// const OKAYAPI_APP_KEY = 'F9B20374B4CBD344913900A437BA56A2'
|
||||||
|
// // 密钥配置
|
||||||
|
// const OKAYAPI_APP_SECRECT = 'iFESzGkU6Pt6ba22gBY1QGoOtrurhqX9rWcnJ5MhgygOswKHNQPWZ8MKzVuwqW3nIPET' // TODO:请勿对外暴露!!
|
||||||
|
|
||||||
|
// // 小白官方生成动态签名的方法
|
||||||
|
// // function enryptData (apiName, params) {
|
||||||
|
// // params['app_key'] = OKAYAPI_APP_KEY
|
||||||
|
// // params['s'] = apiName
|
||||||
|
// // params['sign'] = '' // 屏蔽sign参数
|
||||||
|
|
||||||
|
// // // 按字典顺序对参数排序
|
||||||
|
// // let sdic = Object.keys(params).sort()
|
||||||
|
// // let paramsStrExceptSign = ''
|
||||||
|
// // for (let ki in sdic) {
|
||||||
|
// // paramsStrExceptSign += params[sdic[ki]]
|
||||||
|
// // }
|
||||||
|
|
||||||
|
// // let SIGN = md5(paramsStrExceptSign + OKAYAPI_APP_SECRECT).toUpperCase()
|
||||||
|
|
||||||
|
// // return SIGN
|
||||||
|
// // }
|
||||||
|
|
||||||
|
// // 公共参数与接口的拼接
|
||||||
|
// // export default function validateUrl (apiName, params) {
|
||||||
|
// // let SIGN = enryptData(apiName, params)
|
||||||
|
// // let url = '?s=' + apiName + '&app_key=' + OKAYAPI_APP_KEY + '&sign=' + SIGN
|
||||||
|
|
||||||
|
// // return url
|
||||||
|
// // }
|
||||||
120
src/api/permissions.js
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
// 获得管理员等级列表
|
||||||
|
// data = { project: 'admin' || 'platform' }
|
||||||
|
export const ListMemberLevel = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Operation.ListMemberLevel',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得所有操作列表
|
||||||
|
// data = { project: 'admin' || 'platform' }
|
||||||
|
export const ListOperation = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Operation.ListOperation',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得权限分配中的所有操作列表
|
||||||
|
// data = { project: 'admin' || 'platform', member_level: '1,2,3' }
|
||||||
|
export const ListOperationForMemberLevel = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Operation.ListOperationForMemberLevel',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加权限操作
|
||||||
|
export const AddNewOperation = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Operation.AddNewOperation',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除权限操作
|
||||||
|
export const RemoveOperation = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Operation.RemoveOperation',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 对权限进行分配
|
||||||
|
export const AssignOperation = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Operation.AssignOperation',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 对权限进行分配
|
||||||
|
export const AssignOperationForMemberLevel = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Operation.AssignOperationForMemberLevel',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取单个操作的信息
|
||||||
|
export const GetOperation = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Operation.GetOperation',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
171
src/api/port.js
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
// 应用管理列表
|
||||||
|
export const GetAppDropdownList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Apps.GetAppDropdownList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取全部接口及权限列表
|
||||||
|
export const GetAllAppApis = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.Rights.GetAllAppApis',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 授权
|
||||||
|
export const AssignRights = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.AssignRights',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 取消授权
|
||||||
|
export const RemoveRights = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.RemoveRights',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 2.0接口权限管理
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 获取全部接口服务操作列表
|
||||||
|
export const ListAllRightsService = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.ListAllRightsService',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取全部接口权限(按开发者分组)
|
||||||
|
export const ListAllRightsForDeveloperType = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.ListAllRightsForDeveloperType',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取接口权限规则配置
|
||||||
|
export const SearchRightsList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.SearchRightsList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除接口服务操作
|
||||||
|
export const RemoveRightsService = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.RemoveRightsService',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建新的权限分配规则
|
||||||
|
export const CreateNewRightsRule = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.CreateNewRightsRule',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除规则配置
|
||||||
|
export const DelelteRightsRule = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.DelelteRightsRule',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 为ID指派或撤销授权
|
||||||
|
export const AssignRightsOrNotById = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.AssignRightsOrNot',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加接口服务操作
|
||||||
|
export const AddRightsService = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.AddRightsService',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 指派或撤销授权
|
||||||
|
export const AssignRightsForDevTypeOrNot = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.AssignRightsForDevTypeOrNot',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取全部接口及权限列表
|
||||||
|
export const GetDevAppApis = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.GetDevAppApis',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
11
src/api/routers.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
export const getRouterReq = (access) => {
|
||||||
|
return axios.request({
|
||||||
|
url: 'get_router',
|
||||||
|
params: {
|
||||||
|
access
|
||||||
|
},
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
175
src/api/setmeal.js
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
export const getRouterReq = (access) => {
|
||||||
|
return axios.request({
|
||||||
|
url: 'get_router',
|
||||||
|
param,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 套餐模块 */
|
||||||
|
|
||||||
|
// admin.php?s=Admin.Mall_Product.GetProductList 获取套餐列表
|
||||||
|
export const GetProductList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Product.GetProductList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const GetPayProductListForMore = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Product.GetPayProductListForMore',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// admin.php?s=Admin.Mall_Product.DeleteProduct 删除套餐
|
||||||
|
export const DeleteProduct = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Product.DeleteProduct',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// admin.php?s=Admin.Mall_Product.CreateProduct 添加套餐
|
||||||
|
export const CreateProduct = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Product.CreateProduct',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// admin.php?s=Admin.Mall_Product.GetProduct 获取套餐详情
|
||||||
|
export const GetProduct = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Product.GetProduct',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// admin.php?s=Admin.Mall_Product.UpdateProduct 修改套餐
|
||||||
|
export const UpdateProduct = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Product.UpdateProduct',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// admin.php?s=Admin.Rights.ListAllRightsService 获取全部接口
|
||||||
|
export const ListAllRightsService = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.ListAllRightsService',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// admin.php?s=Admin.Mall_Product.GetExpireTimeList 获取商品套餐的有效时间列表
|
||||||
|
export const GetExpireTimeList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Product.GetExpireTimeList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 订单管理 */
|
||||||
|
|
||||||
|
// admin.php?s=Admin.Mall_Order.GetOrderList 获取商品套餐的有效时间列表
|
||||||
|
export const GetOrderList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Order.GetOrderList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// admin.php?s=Admin.Mall_Order.GetOrder 获取商品套餐的有效时间列表
|
||||||
|
export const GetOrder = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Order.GetOrder',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// admin.php?s=Admin.Mall_Order.UpdateProduct 获取商品套餐的有效时间列表
|
||||||
|
export const UpdateOrder = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Order.UpdateOrder',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 套餐管理 */
|
||||||
|
// Admin.Mall_Flow.AddNewFlow 套餐发放
|
||||||
|
export const AddNewFlow = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Flow.AddNewFlow',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admin.Mall_Flow.AddNewFlow 删除套餐
|
||||||
|
export const DeleteFlow = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Flow.DeleteFlow',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admin.Mall_Flow.GetFlow 获取套餐详情
|
||||||
|
export const GetFlow = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Flow.GetFlow',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admin.Mall_Flow.AddNewFlow 获取套餐列表
|
||||||
|
export const GetFlowList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Flow.GetFlowList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Admin.Mall_Flow.UpdateFlow 更新修改套餐
|
||||||
|
export const UpdateFlow = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Flow.UpdateFlow',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 配置管理 */
|
||||||
|
// Admin.Mall_Config.GetPayConfig 获取支付配置
|
||||||
|
export const GetPayConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Config.GetPayConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// Admin.Mall_Config.UpdatePayConfig 更新支付配置
|
||||||
|
export const UpdatePayConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Mall_Config.UpdatePayConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
90
src/api/stats.js
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
// 登录统计
|
||||||
|
export const GetLoginStatistics = (data) => {
|
||||||
|
// let url = validateUrl('Admin.Index.GetIndexData', data)
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.User.GetLoginStatistics',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 注册统计
|
||||||
|
export const GetDataFlow = (data) => {
|
||||||
|
// let url = validateUrl('Admin.Index.GetIndexData', data)
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.User.GetDataFlow',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 注册统计
|
||||||
|
export const GetDataFlowApi = (data) => {
|
||||||
|
// let url = validateUrl('Admin.Index.GetIndexData', data)
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.Index.GetDataFlow',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 汇总报表
|
||||||
|
export const GetAppDailyStatReport = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.StatReport.GetAppDailyStatReport',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 应用报表
|
||||||
|
export const GetAppStatReport = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.StatReport.GetAppStatReport',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
102
src/api/taskconfig.js
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
// 添加计划任务
|
||||||
|
export const AddTaskConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Task.AddTaskConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 修改计划任务
|
||||||
|
export const EditTaskConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Task.EditTaskConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 开关或启动计划任务
|
||||||
|
export const EnableTaskOrNot = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Task.EnableTaskOrNot',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 读取计划任务配置
|
||||||
|
export const GetTaskConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Task.GetTaskConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取计划任务列表
|
||||||
|
export const GetTaskList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Task.GetTaskList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 彻底删除计划任务配置
|
||||||
|
export const RemoveTaskConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Task.RemoveTaskConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取单个计划任务
|
||||||
|
export const GetTask = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Task.GetTask',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
265
src/api/techzones.js
Normal file
@@ -0,0 +1,265 @@
|
|||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
// import validateUrl from './okayapi_config.js'// 添加请求合法性校验的查询参数
|
||||||
|
// 访问日志
|
||||||
|
export const GetLogList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Requests.GetLogList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加接口设计代码
|
||||||
|
export const AddApiDesign = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.ApiDesign.AddApiDesign',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 生成代码
|
||||||
|
export const CreateCodeTemplate = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.ApiDesign.CreateCodeTemplate',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取草稿接口
|
||||||
|
export const GetDraft = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.ApiDesign.GetDraft',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 保存生成代码文件
|
||||||
|
export const SaveAndCreateApi = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.ApiDesign.SaveAndCreateApi',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 更新代码
|
||||||
|
export const UpdateApiDesign = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.ApiDesign.UpdateApiDesign',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 更新代码
|
||||||
|
export const DelApiDesign = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.ApiDesign.DelApiDesign',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 获取用例列表 */
|
||||||
|
export const GetTestSampleList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.TestSample.GetTestSampleList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 获取测试首页数据 */
|
||||||
|
export const GetTestData = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.TestSample.GetTestData',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 获取全部接口 */
|
||||||
|
export const GetAllAppApis = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Rights.GetAllAppApis',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 立即测试 */
|
||||||
|
export const CheckTestSample = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.TestSample.CheckTestSample',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 删除用例 */
|
||||||
|
export const DelTestSample = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.TestSample.DelTestSample',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 获取接口的请求参数与返回参数 */
|
||||||
|
export const GetReqAndResParams = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.TestSample.GetReqAndResParams',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 申请访问令牌获取token */
|
||||||
|
export const ApplyToken = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/app.php?s=App.Auth.ApplyToken',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 用户登录获取token */
|
||||||
|
export const UserLogin = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/app.php?s=Platform.User.UserLogin',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 添加用例 */
|
||||||
|
export const AddTestSample = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.TestSample.AddTestSample',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 获取单个用例 */
|
||||||
|
export const GetTestSample = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.TestSample.GetTestSample',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 添加配置 */
|
||||||
|
export const AddConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/app.php?s=Platform.Config.AddConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 获取配置列表 */
|
||||||
|
export const GetList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Config.GetList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 编辑用例 */
|
||||||
|
export const EditTestSample = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.TestSample.EditTestSample',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 测试全部用例 */
|
||||||
|
export const TestAllSample = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.TestSample.TestAllSample',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 测试全部用例细节 */
|
||||||
|
export const GetAllTestDetail = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.TestSample.GetAllTestDetail',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 获取全局配置列表 */
|
||||||
|
export const GetAtConfigList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.GlobalAtConfig.GetAtConfigList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 添加全局配置列表 */
|
||||||
|
export const AddAtConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.GlobalAtConfig.AddAtConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 修改全局配置列表 */
|
||||||
|
export const EditAtConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.GlobalAtConfig.EditAtConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 删除全局配置列表 */
|
||||||
|
export const RemoveAtConfig = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.GlobalAtConfig.RemoveAtConfig',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/* 获取当前域名 */
|
||||||
|
export const GetApiRoot = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Index.GetApiRoot',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
185
src/api/user.js
Normal file
@@ -0,0 +1,185 @@
|
|||||||
|
/*
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
// _____ _ _ _ _____
|
||||||
|
// | __ \ | | | | /\ (_) | __ \
|
||||||
|
// | |__) || |__ __ _ | | / \ _ __ _ | |__) |_ __ ___
|
||||||
|
// | ___/ | '_ \ / _` || | / /\ \ | '_ \ | | | ___/| '__|/ _ \
|
||||||
|
// | | | | | || (_| || | / ____ \ | |_) || | | | | | | (_) |
|
||||||
|
// |_| |_| |_| \__,_||_|/_/ \_\| .__/ |_| |_| |_| \___/
|
||||||
|
// | |
|
||||||
|
// |_|
|
||||||
|
// PhalApi Pro 专业版
|
||||||
|
// 广州果创网络科技有限公司
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 一、协议的许可和权利
|
||||||
|
// 1. 您可以在完全遵守本协议的基础上,将本软件应用于商业用途;
|
||||||
|
// 2. 您可以在协议规定的约束和限制范围内修改本产品源代码或界面风格以适应您的要求;
|
||||||
|
// 3. 您拥有使用本产品中的全部内容资料、商品信息及其他信息的所有权,并独立承担与其内容相关的
|
||||||
|
// 法律义务;
|
||||||
|
// 4. 获得商业授权之后,您可以将本软件应用于商业用途,自授权时刻起,在技术支持期限内拥有通过
|
||||||
|
// 指定的方式获得指定范围内的技术支持服务;
|
||||||
|
//
|
||||||
|
// 二、协议的约束和限制
|
||||||
|
// 1. 未获商业授权之前,禁止将本软件用于商业用途(包括但不限于企业法人经营的产品、经营性产品
|
||||||
|
// 以及以盈利为目的或实现盈利产品);
|
||||||
|
// 2. 未获商业授权之前,禁止在本产品的整体或在任何部分基础上发展任何派生版本、修改版本或第三
|
||||||
|
// 方版本用于重新开发;
|
||||||
|
// 3. 如果您未能遵守本协议的条款,您的授权将被终止,所被许可的权利将被收回并承担相应法律责任;
|
||||||
|
//
|
||||||
|
// 三、有限担保和免责声明
|
||||||
|
// 1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的;
|
||||||
|
// 2. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未获得商业授权之前,我们不承
|
||||||
|
// 诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任;
|
||||||
|
// 3. 广州果创网络科技有限公司不对使用本产品构建的商城中的内容信息承担责任,但在不侵犯用户隐
|
||||||
|
// 私信息的前提下,保留以任何方式获取用户信息及商品信息的权利;
|
||||||
|
//
|
||||||
|
// 有关本产品最终用户授权协议、商业授权与技术服务的详细内容,均由广州果创网络科技有限公司独家
|
||||||
|
// 提供。广州果创网络科技有限公司拥有在不事先通知的情况下,修改授权协议的权力,修改后的协议对
|
||||||
|
// 改变之日起的新授权用户生效。电子文本形式的授权协议如同双方书面签署的协议一样,具有完全的和
|
||||||
|
// 等同的法律效力。您一旦开始修改、安装或使用本产品,即被视为完全理解并接受本协议的各项条款,
|
||||||
|
// 在享有上述条款授予的权力的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本
|
||||||
|
// 授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。
|
||||||
|
//
|
||||||
|
// ---------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
// import validateUrl from './okayapi_config.js'// 添加请求合法性校验的查询参数
|
||||||
|
|
||||||
|
export const login = (data) => {
|
||||||
|
// let url = validateUrl('App.User.Login', data)
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/platform.php?service=Platform.User.UserLogin',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加用户
|
||||||
|
export const AddMember = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?service=Admin.User.AddMember',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 删除用户
|
||||||
|
export const DelMember = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.User.DelMember',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 修改用户状态
|
||||||
|
export const AlterMemberStatus = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.User.AlterMemberStatus',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 查询用户列表
|
||||||
|
export const GetAllMembers = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.User.GetAllMembers',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取用户类型
|
||||||
|
export const GetAllMemberLevelList = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.User.GetAllMemberLevelList',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取用户信息
|
||||||
|
export const Profile = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/platform.php?s=Platform.User.Profile',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取用户详细信息
|
||||||
|
export const GetMember = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.User.GetMember',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 修改用户信息
|
||||||
|
export const EditMember = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.User.EditMember',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 上传图片
|
||||||
|
export const Upload = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.File.Upload',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const register = (params = { username, password }) => {
|
||||||
|
let url = validateUrl('Platform.User.Register', params)
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url,
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// export const getUserInfo = (token) => {
|
||||||
|
// return axios.request({
|
||||||
|
// url: 'get_info',
|
||||||
|
// params: {
|
||||||
|
// token
|
||||||
|
// },
|
||||||
|
// method: 'get'
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
export const logout = (token) => {
|
||||||
|
return axios.request({
|
||||||
|
url: 'logout',
|
||||||
|
method: 'post'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取用户信息
|
||||||
|
export const GetMyPermission = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Permission.GetMyPermission',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 模拟用户登录
|
||||||
|
export const SimulationLogin = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.User.SimulationLogin',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查看用户轨迹
|
||||||
|
export const GetUserVisitPath = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.Requests.GetUserVisitPath',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
46
src/api/workorder.js
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import axios from '@/libs/api.request'
|
||||||
|
|
||||||
|
// 获取工单列表
|
||||||
|
export const LstWorkOrder = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.WorkOrder_WorkOrder.LstWorkOrder',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 模块列表
|
||||||
|
export const GetModuleLst = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.WorkOrder_WorkOrder.GetModuleLst',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 工单详情
|
||||||
|
export const DetailWorkOrder = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.WorkOrder_WorkOrder.DetailWorkOrder',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新工单信息
|
||||||
|
export const UpdateChatRecodeWorkOrder = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'api/admin.php?s=Admin.WorkOrder_WorkOrder.UpdateChatRecodeWorkOrder',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取上传类型UploadType
|
||||||
|
export const UploadType = (data) => {
|
||||||
|
return axios.request({
|
||||||
|
method: 'post',
|
||||||
|
url: 'platform.php?s=Platform.File.UploadType',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
BIN
src/assets/.DS_Store
vendored
Normal file
BIN
src/assets/icons/file-icon/doc_logo.jpg
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
src/assets/icons/file-icon/html_logo.jpg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
src/assets/icons/file-icon/others_logo.jpg
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
src/assets/icons/file-icon/ppt_logo.jpg
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
src/assets/icons/file-icon/xls_logo.jpg
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
src/assets/icons/file-icon/文件.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/assets/icons/file-icon/文件.psd
Normal file
37
src/assets/icons/iconfont.css
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
@font-face {font-family: "iconfont";
|
||||||
|
src: url('iconfont.eot?t=1541579316141'); /* IE9*/
|
||||||
|
src: url('iconfont.eot?t=1541579316141#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
||||||
|
url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAiEAAsAAAAADmgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8eUnXY21hcAAAAYAAAACjAAACLi+YJuBnbHlmAAACJAAABAgAAAcg4dRWHmhlYWQAAAYsAAAAMQAAADYTL8piaGhlYQAABmAAAAAgAAAAJAfdA4xobXR4AAAGgAAAABQAAAAsLAD//2xvY2EAAAaUAAAAGAAAABgImgpGbWF4cAAABqwAAAAfAAAAIAEcAG5uYW1lAAAGzAAAAUUAAAJtPlT+fXBvc3QAAAgUAAAAbgAAAI54roygeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeMTx/ytzwv4EhhrmBoRkozAiSAwDuUwzMeJzlkUEKwkAMRd/YabXFhQvxFF6qPYPrUujGY7jyIr1JoZNjtMnEhag3MOEN5MMk8D9QAoVyVSKEJwGrh6oh6wVN1iM3nc+cVImJVKdOehlklElmWdYVstp+ql8VdIv15a1NLW0zFXsO7Kjz3erH/3+rY37vr6kxnx1LKNWOJZlaxxJNnWOpSu+ot8jgqMvI6KjfyOSo88jsaAbI4tBsig89rQB4nLVUTWwbRRSeNzO767i2g7N/FP9s7MRrE5ON4/V6rSZyU0PiINSSNImES4IUoapWz6hEiqiMBDQqEojkAkiFStyKRC+9VSoFCeUEyqESVUAqEkcu3OAQb3hrJxAXwSGI3X0/szPz5vvm2x0i7O/vf8IJe5VkSJnUyUtklRBQJE1VIjRtUafkmk6pSu2ipleh4+xikkKxSksWTUeo8m8NoagpYtoslTmxrLl37z64e33esuJjU8P5Wd262LxoPVnPZ06Pxfe+C0YjkhSJygPhQCA8ABPOykwuN7NyuRvgUnAgLEnhATkaCQQiUe/7XKUyV6nQz+t2o7l66+rs7NVbq82GXTdrdjxjRGU5amTids2bUDMFtzCsqsMYMqr3IDY6OT05GjsI8Exv/6CSkOWEQigh+y3clxY5QVTcEZFIGtHLxDUJs6WsHR1y9SFKdr1HggCp3V1ICYL36OOpVmvKN9bC1u6R3vZ0qwWtVovgJfqOfUvfIYxIWL+fyETHNVJqSkIT1JTjW8ZWh3yDJDz0ctvsyt51etvrg9/QHhqGlzMM+vbmizPnDWPLMNbW19e7tffvsBzL99aWEfBRY46t+tbe3PypXv/IMDYN43WsQBe9HL2NC33RuxABrPsG+xH3o4bVRE2KgCRqulbWNf8W/UYVHM129aKra24VshZkq+CWD/Oy6Xt8cGYEthgHVlVliCfynAlqjo6oysTKlYUAD4docMI5/1ZioN+GwZNBcTwWUmTdBUqhTwX29QebXzF4An4JJMzwfMl+WQ01+IlQZVR4yhie53ycA16pOI/ODiYNGK4MChdCgXNnX5gIJXPCSYnf2OF850aQ+zJIyOs+u8+mMO8jQdwtg1TIWVRjKAnFcslMi8KfGUPoSUCergUyUk77dMyS69Ms6tijKZKYwUGKbpfdzu+iYeZYAHMFiOVi+MD7h9mb99qC0L7X8c+XatMfTj97KZ5IxJt/pd43tYYQKEjAnXMOB6kQEBrwg+LPjindAPOHNdC3q3ait0I3/ZIunZEARLNYNEUA6czSP3N/7j9wz6ZESdX0VNl1zGNS/szbQaQSIGk4DtVPcZf8AgXpf9A2OyTit5s2syZmand46bhEe2WtodLHkvaoqtTXuXN2/c42WADP9HGfbUcUW7JgqHss4xHtlMys679FqUomdP9VJBQBdnlPABBubpuNwqnmQj6/0HwNQzKxDUJFgKiXurBG6dqFjmeBzsvtRPJgGIZThYa5fdOvsReOticPh6JHHXxsv7ItJpOniYPYsmZ/x0QD/o5P105DeQwF6MH33ogoLi+KQp7zpY3HQV5bFMURzheXeds7gpP+jKNXljjHuYvXHke7cdCxLLZf6YX7B63UcCV4nGNgZGBgAOKAN2ZR8fw2Xxm4WRhA4AbHYRMY/f///1oWBuYGIJeDgQkkCgAvWgs2AAAAeJxjYGRgYG7438AQw8Lw/z8DAwsDA1AEBXADAHXiBHJ4nGNhYGBgYfj/nwVM48cATwECKwAAAAAAjAC6AOgBFAGAAf4CbgLqAzgDkHicY2BkYGDgZkhiYGcAASYg5gJCBob/YD4DABOmAYsAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicbYhdDoIwEAb3a6k/YIIX8VArWewmdJFWJOnpJTG+OQ+TzJCjLy39p4ODR4OAA4444YwWHS7U3IVzn6Voldtb8ksHnvohrlqjjmw1rmzXsvdT7fEbblnCmOfNfJIYStJJfGIL27yb6AOCGR89AAA=') format('woff'),
|
||||||
|
url('iconfont.ttf?t=1541579316141') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
|
||||||
|
url('iconfont.svg?t=1541579316141#iconfont') format('svg'); /* iOS 4.1- */
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconfont {
|
||||||
|
font-family:"iconfont" !important;
|
||||||
|
font-size:16px;
|
||||||
|
font-style:normal;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-bear:before { content: "\e600"; }
|
||||||
|
|
||||||
|
.icon-resize-vertical:before { content: "\e7c3"; }
|
||||||
|
|
||||||
|
.icon-chuizhifanzhuan:before { content: "\e661"; }
|
||||||
|
|
||||||
|
.icon-shuipingfanzhuan:before { content: "\e662"; }
|
||||||
|
|
||||||
|
.icon-qq:before { content: "\e609"; }
|
||||||
|
|
||||||
|
.icon-frown:before { content: "\e77e"; }
|
||||||
|
|
||||||
|
.icon-meh:before { content: "\e780"; }
|
||||||
|
|
||||||
|
.icon-smile:before { content: "\e783"; }
|
||||||
|
|
||||||
|
.icon-man:before { content: "\e7e2"; }
|
||||||
|
|
||||||
|
.icon-woman:before { content: "\e7e5"; }
|
||||||
|
|
||||||
BIN
src/assets/icons/iconfont.eot
Normal file
56
src/assets/icons/iconfont.svg
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||||
|
<!--
|
||||||
|
2013-9-30: Created.
|
||||||
|
-->
|
||||||
|
<svg>
|
||||||
|
<metadata>
|
||||||
|
Created by iconfont
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
|
||||||
|
<font id="iconfont" horiz-adv-x="1024" >
|
||||||
|
<font-face
|
||||||
|
font-family="iconfont"
|
||||||
|
font-weight="500"
|
||||||
|
font-stretch="normal"
|
||||||
|
units-per-em="1024"
|
||||||
|
ascent="896"
|
||||||
|
descent="-128"
|
||||||
|
/>
|
||||||
|
<missing-glyph />
|
||||||
|
|
||||||
|
<glyph glyph-name="bear" unicode="" d="M1024 683.008q0-70.656-46.08-121.856 46.08-89.088 46.08-193.536 0-96.256-39.936-181.248t-109.568-147.968-162.816-99.328-199.68-36.352-199.68 36.352-162.304 99.328-109.568 147.968-40.448 181.248q0 104.448 46.08 193.536-46.08 51.2-46.08 121.856 0 37.888 13.824 71.168t37.376 58.368 55.808 39.424 68.096 14.336q43.008 0 78.848-18.432t59.392-50.176q46.08 17.408 96.256 26.624t102.4 9.216 102.4-9.216 96.256-26.624q24.576 31.744 59.904 50.176t78.336 18.432q36.864 0 68.608-14.336t55.296-39.424 37.376-58.368 13.824-71.168zM205.824 268.288q10.24 0 18.944 10.24t15.36 28.672 10.24 42.496 3.584 51.712-3.584 51.712-10.24 41.984-15.36 28.16-18.944 10.24q-9.216 0-17.92-10.24t-15.36-28.16-10.752-41.984-4.096-51.712 4.096-51.712 10.752-42.496 15.36-28.672 17.92-10.24zM512-31.744000000000028q53.248 0 99.84 13.312t81.408 35.84 54.784 52.736 19.968 65.024q0 33.792-19.968 64t-54.784 52.736-81.408 35.84-99.84 13.312-99.84-13.312-81.408-35.84-54.784-52.736-19.968-64q0-34.816 19.968-65.024t54.784-52.736 81.408-35.84 99.84-13.312zM818.176 268.288q10.24 0 18.944 10.24t15.36 28.672 10.24 42.496 3.584 51.712-3.584 51.712-10.24 41.984-15.36 28.16-18.944 10.24q-9.216 0-17.92-10.24t-15.36-28.16-10.752-41.984-4.096-51.712 4.096-51.712 10.752-42.496 15.36-28.672 17.92-10.24zM512 235.51999999999998q39.936 0 68.096-9.728t28.16-24.064-28.16-24.064-68.096-9.728-68.096 9.728-28.16 24.064 28.16 24.064 68.096 9.728z" horiz-adv-x="1024" />
|
||||||
|
|
||||||
|
|
||||||
|
<glyph glyph-name="resize-vertical" unicode="" d="M512 896C229.248 896 0 666.752 0 384s229.248-512 512-512 512 229.248 512 512S794.752 896 512 896zM576 192l64 0-128-128-128 128 64 0L448 576l-64 0 128 128 128-128-64 0L576 192z" horiz-adv-x="1024" />
|
||||||
|
|
||||||
|
|
||||||
|
<glyph glyph-name="chuizhifanzhuan" unicode="" d="M286.01856 645.08416l472.4224 0 0-146.2784-472.4224 0 0 146.2784ZM87.19872 420.37248l885.80096 0 0-70.87104-885.80096 0 0 70.87104ZM773.55008 268.05248l0-31.0016L270.6688 237.05088l0 31.0016L773.55008 268.05248zM773.55008 121.4208l0-31.0016L270.6688 90.4192l0 31.0016L773.55008 121.4208zM742.54848 240.75776l31.0016 0 0-123.04896-31.0016 0L742.54848 240.75776zM270.70464 240.57856l31.0016 0 0-123.04896-31.0016 0L270.70464 240.57856z" horiz-adv-x="1024" />
|
||||||
|
|
||||||
|
|
||||||
|
<glyph glyph-name="shuipingfanzhuan" unicode="" d="M252.76928 596.096l146.2784 0 0-472.42752-146.2784 0 0 472.42752ZM477.48096 810.65472l70.87104 0 0-885.80608-70.87104 0 0 885.80608ZM629.80096 611.2l31.0016 0 0-502.88128-31.0016 0L629.80096 611.2zM776.42752 611.2l31.0016 0 0-502.88128-31.0016 0L776.42752 611.2zM657.09056 580.1984l0 31.0016 123.04896 0 0-31.0016L657.09056 580.1984zM657.27488 108.35456l0 31.0016 123.04896 0 0-31.0016L657.27488 108.35456z" horiz-adv-x="1024" />
|
||||||
|
|
||||||
|
|
||||||
|
<glyph glyph-name="qq" unicode="" d="M147.372058 491.394284c-5.28997-13.909921 2.431986-22.698872 0-75.732573-0.682996-14.25092-62.165649-78.762555-86.569511-145.791177-24.192863-66.517625-27.519845-135.978232 9.811944-163.285078 37.419789-27.305846 72.191593 90.879487 76.757567 73.685584 1.961989-7.509958 4.436975-15.317914 7.423958-23.338868a331.945126 331.945126 0 0 1 61.140655-101.162429c5.929967-6.783962-36.009797-19.199892-61.140655-61.99365-25.173858-42.751759 7.209959-120.49032 132.223254-120.49032 161.27909 0 197.288886 56.70368 200.574868 56.447681 12.031932-0.895995 12.841928 0 25.599855 0 15.572912 0 9.129948-1.279993 23.593867 0 7.807956 0.682996 86.186514-67.839617 194.686901-56.447681 184.873956 19.45589 156.586116 81.40754 142.079198 120.48932-15.103915 40.83277-68.692612 59.946662-66.303626 62.549647 44.28775 48.938724 51.285711 79.018554 66.346626 123.9463 6.143965 18.473896 49.066723-101.674426 82.089537-73.685584 13.781922 11.690934 41.301767 60.24566 13.781922 163.285078-27.519845 102.996419-80.767544 126.505286-79.615551 145.791177 2.389987 40.191773 1.023994 68.436614-1.023994 75.732573-9.812945 35.4128-30.378829 27.604844-30.378829 35.4128C858.450044 730.752933 705.10691 896 515.966978 896s-342.398067-165.289067-342.398068-369.192916c0-16.169909-14.378919-4.223976-26.154852-35.4128z" horiz-adv-x="1024" />
|
||||||
|
|
||||||
|
|
||||||
|
<glyph glyph-name="frown" unicode="" d="M336 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM688 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM512 832C264.6 832 64 631.4 64 384s200.6-448 448-448 448 200.6 448 448S759.4 832 512 832z m263-711c-34.2-34.2-74-61-118.3-79.8C611 21.8 562.3 12 512 12c-50.3 0-99 9.8-144.8 29.2-44.3 18.7-84.1 45.6-118.3 79.8-34.2 34.2-61 74-79.8 118.3C149.8 285 140 333.7 140 384s9.8 99 29.2 144.8c18.7 44.3 45.6 84.1 79.8 118.3 34.2 34.2 74 61 118.3 79.8C413 746.2 461.7 756 512 756c50.3 0 99-9.8 144.8-29.2 44.3-18.7 84.1-45.6 118.3-79.8 34.2-34.2 61-74 79.8-118.3C874.2 483 884 434.3 884 384s-9.8-99-29.2-144.8c-18.7-44.3-45.6-84.1-79.8-118.2zM512 363c-85.5 0-155.6-67.3-160-151.6-0.2-4.6 3.4-8.4 8-8.4h48.1c4.2 0 7.8 3.2 8.1 7.4C420 259.9 461.5 299 512 299s92.1-39.1 95.8-88.6c0.3-4.2 3.9-7.4 8.1-7.4H664c4.6 0 8.2 3.8 8 8.4-4.4 84.3-74.5 151.6-160 151.6z" horiz-adv-x="1024" />
|
||||||
|
|
||||||
|
|
||||||
|
<glyph glyph-name="meh" unicode="" d="M336 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM688 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM512 832C264.6 832 64 631.4 64 384s200.6-448 448-448 448 200.6 448 448S759.4 832 512 832z m263-711c-34.2-34.2-74-61-118.3-79.8C611 21.8 562.3 12 512 12c-50.3 0-99 9.8-144.8 29.2-44.3 18.7-84.1 45.6-118.3 79.8-34.2 34.2-61 74-79.8 118.3C149.8 285 140 333.7 140 384s9.8 99 29.2 144.8c18.7 44.3 45.6 84.1 79.8 118.3 34.2 34.2 74 61 118.3 79.8C413 746.2 461.7 756 512 756c50.3 0 99-9.8 144.8-29.2 44.3-18.7 84.1-45.6 118.3-79.8 34.2-34.2 61-74 79.8-118.3C874.2 483 884 434.3 884 384s-9.8-99-29.2-144.8c-18.7-44.3-45.6-84.1-79.8-118.2zM664 331H360c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h304c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8z" horiz-adv-x="1024" />
|
||||||
|
|
||||||
|
|
||||||
|
<glyph glyph-name="smile" unicode="" d="M336 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM688 475m-48 0a48 48 0 1 1 96 0 48 48 0 1 1-96 0ZM512 832C264.6 832 64 631.4 64 384s200.6-448 448-448 448 200.6 448 448S759.4 832 512 832z m263-711c-34.2-34.2-74-61-118.3-79.8C611 21.8 562.3 12 512 12c-50.3 0-99 9.8-144.8 29.2-44.3 18.7-84.1 45.6-118.3 79.8-34.2 34.2-61 74-79.8 118.3C149.8 285 140 333.7 140 384s9.8 99 29.2 144.8c18.7 44.3 45.6 84.1 79.8 118.3 34.2 34.2 74 61 118.3 79.8C413 746.2 461.7 756 512 756c50.3 0 99-9.8 144.8-29.2 44.3-18.7 84.1-45.6 118.3-79.8 34.2-34.2 61-74 79.8-118.3C874.2 483 884 434.3 884 384s-9.8-99-29.2-144.8c-18.7-44.3-45.6-84.1-79.8-118.2zM664 363h-48.1c-4.2 0-7.8-3.2-8.1-7.4C604 306.1 562.5 267 512 267s-92.1 39.1-95.8 88.6c-0.3 4.2-3.9 7.4-8.1 7.4H360c-4.6 0-8.2-3.8-8-8.4 4.4-84.3 74.5-151.6 160-151.6s155.6 67.3 160 151.6c0.2 4.6-3.4 8.4-8 8.4z" horiz-adv-x="1024" />
|
||||||
|
|
||||||
|
|
||||||
|
<glyph glyph-name="man" unicode="" d="M874 776H622c-3.3 0-6-2.7-6-6v-56c0-3.3 2.7-6 6-6h160.4L583.1 508.7c-50 38.5-111 59.3-175.1 59.3-76.9 0-149.3-30-203.6-84.4S120 356.9 120 280s30-149.3 84.4-203.6C258.7 22 331.1-8 408-8s149.3 30 203.6 84.4C666 130.7 696 203.1 696 280c0 64.1-20.8 124.9-59.2 174.9L836 654.1V494c0-3.3 2.7-6 6-6h56c3.3 0 6 2.7 6 6V746c0 16.5-13.5 30-30 30zM408 68c-116.9 0-212 95.1-212 212s95.1 212 212 212 212-95.1 212-212-95.1-212-212-212z" horiz-adv-x="1024" />
|
||||||
|
|
||||||
|
|
||||||
|
<glyph glyph-name="woman" unicode="" d="M909.7 739.4l-42.2 42.2c-3.1 3.1-8.2 3.1-11.3 0L764 689.4l-84.2 84.2c-3.1 3.1-8.2 3.1-11.3 0l-42.1-42.1c-3.1-3.1-3.1-8.1 0-11.3l84.2-84.2-135.5-135.3c-50 38.5-111 59.3-175.1 59.3-76.9 0-149.3-30-203.6-84.4S112 348.9 112 272s30-149.3 84.4-203.6C250.7 14 323.1-16 400-16s149.3 30 203.6 84.4C658 122.7 688 195.1 688 272c0 64.2-20.9 125.1-59.3 175.1l135.4 135.4 84.2-84.2c3.1-3.1 8.2-3.1 11.3 0l42.1 42.1c3.1 3.1 3.1 8.1 0 11.3l-84.2 84.2 92.2 92.2c3.1 3.1 3.1 8.2 0 11.3zM400 60c-116.9 0-212 95.1-212 212s95.1 212 212 212 212-95.1 212-212-95.1-212-212-212z" horiz-adv-x="1024" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</font>
|
||||||
|
</defs></svg>
|
||||||
|
After Width: | Height: | Size: 8.2 KiB |
BIN
src/assets/icons/iconfont.ttf
Normal file
BIN
src/assets/icons/iconfont.woff
Normal file
BIN
src/assets/images/.DS_Store
vendored
Normal file
BIN
src/assets/images/accomplish.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
src/assets/images/alarmclock.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
1
src/assets/images/error-page/error-401.svg
Normal file
|
After Width: | Height: | Size: 31 KiB |
1
src/assets/images/error-page/error-404.svg
Normal file
|
After Width: | Height: | Size: 26 KiB |
1
src/assets/images/error-page/error-500.svg
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
src/assets/images/headImg.jpg
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
src/assets/images/icon-qr-qq-wechat.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
1
src/assets/images/icon-social-bilibili.svg
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
1
src/assets/images/icon-social-juejin.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1547543883733" class="icon" style="" viewBox="0 0 1272 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16831" xmlns:xlink="http://www.w3.org/1999/xlink" width="496.875" height="400"><defs><style type="text/css"></style></defs><path d="M729.64116345 165.27693991L634.32650881 90.125l-99.5625 78.52693991-5.17887981 4.16056009 104.74137981 83.50215546 105.09051682-83.50215546-9.77586218-7.53556009z m361.21228445 291.47198236l-456.78879245 360.19396555-456.49784537-359.99030128L110.125 511.12715547l523.93965546 413.11745671 524.23060335-413.35021555-67.44181091-54.14547436z m-456.78879245 29.21120673L385.4784479 290.00646554 318.06573237 344.12284454l315.96982771 249.16810336 316.28987101-249.40086136-67.41271555-54.14547436-248.84806008 196.21551682z" fill="#006cff" p-id="16832"></path></svg>
|
||||||
|
After Width: | Height: | Size: 955 B |
1
src/assets/images/icon-social-twitter.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1547543874130" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16498" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400"><defs><style type="text/css"></style></defs><path d="M511.8 0.6C229.2 0.6 0.1 229.7 0.1 512.3S229.2 1024 511.8 1024s511.7-229.1 511.7-511.7S794.4 0.6 511.8 0.6z m264.9 375.3c-0.1 0.1-0.1 0.2-0.2 0.3h0.2c-9 14.3-21.2 28.8-34.2 39.2-5.2 4.2-10.5 8.3-15.7 12.5v0.5c0.3 22.9-0.3 44.9-4.7 64.2-25.2 113.1-91.9 189.9-197.4 222.8-37.9 11.8-99.1 16.7-142.6 5.9-21.5-5.4-41-11.4-59.3-19.3-10.2-4.5-19.6-9.3-28.5-14.7l-8.8-5.3h0.5l-0.5-0.3c9.8 0.2 21.3 2.9 32.2 1.2 9.8-1.6 19.6-1.2 28.7-3.2 22.7-5 43-11.6 60.4-21.8 8.3-4.8 20.9-10.6 27-17.6-11.2 0.2-21.4-2.4-29.7-5.4-32.6-11.5-51.6-32.7-63.9-64.4h0.1c0-0.1-0.1-0.2-0.1-0.3 9.7 1.1 37.3 3.5 44.6-1.7-12.3-0.8-24.1-7.9-32.5-13.2-26.2-16.4-47.6-43.9-47.4-86.2v-0.3c3.5 1.7 6.9 3.3 10.4 4.9 6.6 2.8 13.3 4.3 21.1 5.9 3.1 0.7 9.3 2.4 13.2 1.4-5.1-5.8-13.2-9.7-18.4-16-14.7-18.3-28.7-45.3-25.2-77.4 0.5-4.7 1.3-9.4 2.6-14.3 2.5-9.7 6.5-18.3 10.8-26.2 0.2 0.1 0.4 0.2 0.5 0.3 2 4.2 6.4 7.2 9.1 10.6 8.6 10.7 19.2 20.3 30 28.7 36.7 28.7 69.9 46.4 123.1 59.5 13.5 3.3 29 5.9 45.1 5.9-1.9-5.8-2.7-13-2.7-20.5 0-9.7 1.3-19.6 3.3-26.8 9-32.1 28.5-55.2 57-67.6 6.9-3 14.4-5.2 22.4-6.9 4.1-0.6 8.2-1.1 12.3-1.6 39-0.7 59.8 13.5 79.6 31.6 16.8-1.4 38.7-10.8 51.6-17.4l12.6-6.9c0 0.1-0.1 0.3-0.1 0.4l0.1-0.1c-7.3 19.9-17.4 35.5-32.7 47.3-3.1 2.4-6.3 5.6-10 7.4 21.5-0.4 39.3-10 56.1-15.4v0.3z" fill="#2EB1EB" p-id="16499"></path><path d="M719.7 391.1s0.1 0 0.1-0.1c0 0-0.1 0-0.1 0.1zM726.8 428.4v-0.5 0.5zM336.4 479.9c3.3 0.7 9.9 2.7 13.8 1.2h-0.5l-0.1-0.1c-3.9 1-10.1-0.7-13.2-1.4-7.8-1.6-14.5-3.1-21.1-5.9-3.5-1.6-6.9-3.2-10.4-4.9v0.3c3.4 1.6 6.9 3.2 10.4 4.9 6.6 2.8 13.3 4.3 21.1 5.9zM719.6 391.4v0.2c21.9-0.2 39.8-10.1 56.9-15.4 0.1-0.1 0.1-0.2 0.2-0.3v-0.3c-16.9 5.3-34.6 14.9-56.1 15.4-0.4 0.1-0.7 0.3-1 0.4zM584.8 337.5c6.9-3 14.4-5.1 22.4-6.9 4.1-0.6 8.2-1 12.3-1.6 39-0.7 59.8 13.5 79.6 31.6 16.8-1.4 38.7-10.8 51.6-17.4 4.2-2.3 8.3-4.5 12.5-6.8 0-0.1 0.1-0.3 0.1-0.4l-12.6 6.9c-12.9 6.6-34.8 16-51.6 17.4-19.8-18.1-40.6-32.3-79.6-31.6-4.1 0.5-8.2 1-12.3 1.6-8 1.7-15.5 3.9-22.4 6.9-28.5 12.4-48 35.5-57 67.6-2 7.2-3.4 17.2-3.3 26.8 0-9.6 1.3-19.4 3.3-26.5 9-32.1 28.5-55.2 57-67.6zM385.2 568.5h-0.4c-7.3 5.2-34.9 2.8-44.6 1.7 0 0.1 0.1 0.2 0.1 0.3 10 1.1 38.2 3.6 44.9-2zM319.4 347.4c0.1 0.1 0.3 0.1 0.5 0.3 2 4.1 6.3 7.1 9.1 10.6 8.6 10.6 19.2 20.2 30 28.7 36.8 28.7 69.9 46.4 123.1 59.5 13.5 3.3 29.1 5.9 45.2 5.9 0-0.1-0.1-0.2-0.1-0.3-16.1 0-31.6-2.6-45.1-5.9-53.2-13.1-86.4-30.8-123.1-59.5-10.8-8.4-21.4-18-30-28.7-2.7-3.4-7.1-6.4-9.1-10.6-0.1-0.1-0.3-0.2-0.5-0.3-4.3 7.9-8.3 16.5-10.8 26.2-1.3 4.9-2.1 9.6-2.6 14.3 0.5-4.6 1.3-9.2 2.6-14 2.5-9.7 6.5-18.3 10.8-26.2zM317.7 683.2c9.9-1.6 19.6-1.2 28.7-3.2 22.8-5 43-11.6 60.4-21.8 8.4-4.9 21.3-10.8 27.3-17.9h-0.3c-6.1 7-18.7 12.8-27 17.6-17.4 10.2-37.7 16.8-60.4 21.8-9.1 2-18.9 1.6-28.7 3.2-10.9 1.7-22.4-1-32.2-1.2l0.5 0.3c9.7 0.4 21 2.9 31.7 1.2z" fill="#FFFFFF" p-id="16500"></path></svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
1
src/assets/images/icon-social-zhihu.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1547543863835" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16165" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400"><defs><style type="text/css"></style></defs><path d="M512 1024C229.236364 1024 0 794.763636 0 512S229.236364 0 512 0s512 229.236364 512 512-229.236364 512-512 512z m-129.861818-756.48s-36.212364 2.094545-48.989091 24.482909c-12.8 22.365091-54.318545 137.378909-54.318546 137.378909s13.847273 6.376727 37.28291-10.658909c23.435636-17.035636 30.882909-46.848 30.882909-46.848l42.589091-2.117818 1.070545 121.390545s-73.495273-1.070545-88.413091 0c-14.894545 1.047273-23.412364 40.448-23.412364 40.448h111.825455s-9.588364 67.095273-38.353455 116.084364c-28.741818 48.989091-83.060364 87.319273-83.060363 87.319273s39.424 15.965091 77.730909-6.4c38.353455-22.341818 66.629818-120.692364 66.629818-120.692364l89.925818 110.056727s8.192-52.386909-1.466182-67.188363c-9.658182-14.778182-62.208-74.286545-62.208-74.286546l-22.946909 20.247273 16.337455-65.117091h97.954909s0-38.353455-19.153455-40.494545c-19.176727-2.094545-78.801455 0-78.801454 0V371.898182h88.389818s-1.070545-39.400727-18.106182-39.400727h-143.755636l22.341818-64.954182z m169.984 61.184v358.562909h36.002909l13.102545 45.009455 63.348364-45.009455h89.064727V328.704h-201.518545z" fill="#0f84fd" p-id="16166"></path><path d="M594.781091 368.64h117.899636v277.876364h-41.890909l-53.364363 40.261818-11.636364-40.261818h-11.008V368.64z" fill="#0f84fd" p-id="16167"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
BIN
src/assets/images/left.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
src/assets/images/login-bg.jpg
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
src/assets/images/logo-min.jpg
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
src/assets/images/logo-min.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
src/assets/images/logo.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
src/assets/images/pic_bg.png
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
src/assets/images/pic_illustration.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
src/assets/images/pro_logo.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
src/assets/images/right.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
src/assets/images/talkingdata.png
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
BIN
src/assets/images/yasuobao.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
156
src/components/ProgressBar/index.vue
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
<template>
|
||||||
|
<div class="percentloop">
|
||||||
|
<div class="circle-left">
|
||||||
|
<div ref="leftcontent"></div>
|
||||||
|
</div>
|
||||||
|
<div class="circle-right">
|
||||||
|
<div ref="rightcontent"></div>
|
||||||
|
</div>
|
||||||
|
<div class="number">
|
||||||
|
{{ percent }} %
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
percentNum: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
speed: { // 建议取值为0-3
|
||||||
|
type: [String, Number],
|
||||||
|
default: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
percent: 0,
|
||||||
|
initDeg: 0,
|
||||||
|
timeId: null,
|
||||||
|
animationing: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
transformToDeg (percent) {
|
||||||
|
let deg = 0
|
||||||
|
if (percent >= 100) {
|
||||||
|
deg = 360
|
||||||
|
} else {
|
||||||
|
deg = parseInt(360 * percent / 100)
|
||||||
|
}
|
||||||
|
return deg
|
||||||
|
},
|
||||||
|
transformToPercent (deg) {
|
||||||
|
let percent = 0
|
||||||
|
if (deg >= 360) {
|
||||||
|
percent = 100
|
||||||
|
} else {
|
||||||
|
percent = parseInt(100 * deg / 360)
|
||||||
|
}
|
||||||
|
return percent
|
||||||
|
},
|
||||||
|
rotateLeft (deg) { // 大于180时,执行的动画
|
||||||
|
this.$refs.leftcontent.style.transform = 'rotate(' + (deg - 180) + 'deg)'
|
||||||
|
},
|
||||||
|
rotateRight (deg) { // 小于180时,执行的动画
|
||||||
|
this.$refs.rightcontent.style.transform = 'rotate(' + deg + 'deg)'
|
||||||
|
},
|
||||||
|
goRotate (deg) {
|
||||||
|
this.animationing = true
|
||||||
|
this.timeId = setInterval(() => {
|
||||||
|
if (deg > this.initDeg) { // 递增动画
|
||||||
|
this.initDeg += Number(this.speed)
|
||||||
|
if (this.initDeg >= 180) {
|
||||||
|
this.rotateLeft(this.initDeg)
|
||||||
|
this.rotateRight(180) // 为避免前后两次传入的百分比转换为度数后的值不为步距的整数,可能出现的左右转动不到位的情况。
|
||||||
|
} else {
|
||||||
|
this.rotateRight(this.initDeg)
|
||||||
|
}
|
||||||
|
} else { // 递减动画
|
||||||
|
this.initDeg -= Number(this.speed)
|
||||||
|
if (this.initDeg >= 180) {
|
||||||
|
this.rotateLeft(this.initDeg)
|
||||||
|
} else {
|
||||||
|
this.rotateLeft(180) // 为避免前后两次传入的百分比转换为度数后的值不为步距的整数,可能出现的左右转动不到位的情况。
|
||||||
|
this.rotateRight(this.initDeg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.percent = this.transformToPercent(this.initDeg) // 百分比数据滚动动画
|
||||||
|
const remainer = Number(deg) - this.initDeg
|
||||||
|
if (Math.abs(remainer) < this.speed) {
|
||||||
|
this.initDeg += remainer
|
||||||
|
if (this.initDeg > 180) {
|
||||||
|
this.rotateLeft(deg)
|
||||||
|
} else {
|
||||||
|
this.rotateRight(deg)
|
||||||
|
}
|
||||||
|
this.animationFinished()
|
||||||
|
}
|
||||||
|
}, 10)
|
||||||
|
},
|
||||||
|
animationFinished () {
|
||||||
|
this.percent = this.percentNum // 百分比数据滚动动画
|
||||||
|
this.animationing = false
|
||||||
|
clearInterval(this.timeId)
|
||||||
|
this.$emit('animationFinished') // 动画完成的回调
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created () {
|
||||||
|
this.goRotate(this.transformToDeg(this.percentNum))
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
'percentNum': function (val) {
|
||||||
|
if (this.animationing) return
|
||||||
|
this.goRotate(this.transformToDeg(val))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.percentloop {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border-radius: 50%;
|
||||||
|
overflow: hidden;
|
||||||
|
.circle-left, .circle-right {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 50%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: red;
|
||||||
|
overflow: hidden;
|
||||||
|
&>div {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #8a8a8a;
|
||||||
|
transform-origin: right center;
|
||||||
|
/*transition: all .5s linear;*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.circle-right {
|
||||||
|
left: 50%;
|
||||||
|
&>div {
|
||||||
|
transform-origin: left center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.number {
|
||||||
|
position: absolute;
|
||||||
|
top: 9%;
|
||||||
|
bottom: 9%;
|
||||||
|
left: 9%;
|
||||||
|
right: 9%;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 50%;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
58
src/components/charts/bar.vue
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<template>
|
||||||
|
<div ref="dom" class="charts chart-bar"></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import echarts from 'echarts'
|
||||||
|
import tdTheme from './theme.json'
|
||||||
|
import { on, off } from '@/libs/tools'
|
||||||
|
echarts.registerTheme('tdTheme', tdTheme)
|
||||||
|
export default {
|
||||||
|
name: 'ChartBar',
|
||||||
|
props: {
|
||||||
|
value: Object,
|
||||||
|
text: String,
|
||||||
|
subtext: String
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
dom: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
resize () {
|
||||||
|
this.dom.resize()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
let xAxisData = Object.keys(this.value)
|
||||||
|
let seriesData = Object.values(this.value)
|
||||||
|
let option = {
|
||||||
|
title: {
|
||||||
|
text: this.text,
|
||||||
|
subtext: this.subtext,
|
||||||
|
x: 'center'
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
type: 'category',
|
||||||
|
data: xAxisData
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
type: 'value'
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
data: seriesData,
|
||||||
|
type: 'bar'
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
this.dom = echarts.init(this.$refs.dom, 'tdTheme')
|
||||||
|
this.dom.setOption(option)
|
||||||
|
on(window, 'resize', this.resize)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
beforeDestroy () {
|
||||||
|
off(window, 'resize', this.resize)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
3
src/components/charts/index.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import ChartPie from './pie.vue'
|
||||||
|
import ChartBar from './bar.vue'
|
||||||
|
export { ChartPie, ChartBar }
|
||||||
70
src/components/charts/pie.vue
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
<template>
|
||||||
|
<div ref="dom" class="charts chart-pie"></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import echarts from 'echarts'
|
||||||
|
import tdTheme from './theme.json'
|
||||||
|
import { on, off } from '@/libs/tools'
|
||||||
|
echarts.registerTheme('tdTheme', tdTheme)
|
||||||
|
export default {
|
||||||
|
name: 'ChartPie',
|
||||||
|
props: {
|
||||||
|
value: Array,
|
||||||
|
text: String,
|
||||||
|
subtext: String
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
dom: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
resize () {
|
||||||
|
this.dom.resize()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
let legend = this.value.map(_ => _.name)
|
||||||
|
let option = {
|
||||||
|
title: {
|
||||||
|
text: this.text,
|
||||||
|
subtext: this.subtext,
|
||||||
|
x: 'center'
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'item',
|
||||||
|
formatter: '{a} <br/>{b} : {c} ({d}%)'
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
orient: 'vertical',
|
||||||
|
left: 'left',
|
||||||
|
data: legend
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
{
|
||||||
|
type: 'pie',
|
||||||
|
radius: '55%',
|
||||||
|
center: ['50%', '60%'],
|
||||||
|
data: this.value,
|
||||||
|
itemStyle: {
|
||||||
|
emphasis: {
|
||||||
|
shadowBlur: 10,
|
||||||
|
shadowOffsetX: 0,
|
||||||
|
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
this.dom = echarts.init(this.$refs.dom, 'tdTheme')
|
||||||
|
this.dom.setOption(option)
|
||||||
|
on(window, 'resize', this.resize)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
beforeDestroy () {
|
||||||
|
off(window, 'resize', this.resize)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
491
src/components/charts/theme.json
Normal file
@@ -0,0 +1,491 @@
|
|||||||
|
|
||||||
|
{
|
||||||
|
"color": [
|
||||||
|
"#2d8cf0",
|
||||||
|
"#19be6b",
|
||||||
|
"#ff9900",
|
||||||
|
"#E46CBB",
|
||||||
|
"#9A66E4",
|
||||||
|
"#ed3f14"
|
||||||
|
],
|
||||||
|
"backgroundColor": "rgba(0,0,0,0)",
|
||||||
|
"textStyle": {},
|
||||||
|
"title": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#516b91"
|
||||||
|
},
|
||||||
|
"subtextStyle": {
|
||||||
|
"color": "#93b7e3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"line": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderWidth": "2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lineStyle": {
|
||||||
|
"normal": {
|
||||||
|
"width": "2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"symbolSize": "6",
|
||||||
|
"symbol": "emptyCircle",
|
||||||
|
"smooth": true
|
||||||
|
},
|
||||||
|
"radar": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderWidth": "2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lineStyle": {
|
||||||
|
"normal": {
|
||||||
|
"width": "2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"symbolSize": "6",
|
||||||
|
"symbol": "emptyCircle",
|
||||||
|
"smooth": true
|
||||||
|
},
|
||||||
|
"bar": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"barBorderWidth": 0,
|
||||||
|
"barBorderColor": "#ccc"
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"barBorderWidth": 0,
|
||||||
|
"barBorderColor": "#ccc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pie": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scatter": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"boxplot": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parallel": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sankey": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"funnel": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gauge": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"candlestick": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"color": "#edafda",
|
||||||
|
"color0": "transparent",
|
||||||
|
"borderColor": "#d680bc",
|
||||||
|
"borderColor0": "#8fd3e8",
|
||||||
|
"borderWidth": "2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"graph": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderWidth": 0,
|
||||||
|
"borderColor": "#ccc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lineStyle": {
|
||||||
|
"normal": {
|
||||||
|
"width": 1,
|
||||||
|
"color": "#aaa"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"symbolSize": "6",
|
||||||
|
"symbol": "emptyCircle",
|
||||||
|
"smooth": true,
|
||||||
|
"color": [
|
||||||
|
"#2d8cf0",
|
||||||
|
"#19be6b",
|
||||||
|
"#f5ae4a",
|
||||||
|
"#9189d5",
|
||||||
|
"#56cae2",
|
||||||
|
"#cbb0e3"
|
||||||
|
],
|
||||||
|
"label": {
|
||||||
|
"normal": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#eee"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"map": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"areaColor": "#f3f3f3",
|
||||||
|
"borderColor": "#516b91",
|
||||||
|
"borderWidth": 0.5
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"areaColor": "rgba(165,231,240,1)",
|
||||||
|
"borderColor": "#516b91",
|
||||||
|
"borderWidth": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"label": {
|
||||||
|
"normal": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "rgb(81,107,145)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"geo": {
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"areaColor": "#f3f3f3",
|
||||||
|
"borderColor": "#516b91",
|
||||||
|
"borderWidth": 0.5
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"areaColor": "rgba(165,231,240,1)",
|
||||||
|
"borderColor": "#516b91",
|
||||||
|
"borderWidth": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"label": {
|
||||||
|
"normal": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "rgb(81,107,145)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"categoryAxis": {
|
||||||
|
"axisLine": {
|
||||||
|
"show": true,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": "#cccccc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"axisTick": {
|
||||||
|
"show": false,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": "#333"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"axisLabel": {
|
||||||
|
"show": true,
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#999999"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"splitLine": {
|
||||||
|
"show": true,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": [
|
||||||
|
"#eeeeee"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"splitArea": {
|
||||||
|
"show": false,
|
||||||
|
"areaStyle": {
|
||||||
|
"color": [
|
||||||
|
"rgba(250,250,250,0.05)",
|
||||||
|
"rgba(200,200,200,0.02)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"valueAxis": {
|
||||||
|
"axisLine": {
|
||||||
|
"show": true,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": "#cccccc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"axisTick": {
|
||||||
|
"show": false,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": "#333"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"axisLabel": {
|
||||||
|
"show": true,
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#999999"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"splitLine": {
|
||||||
|
"show": true,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": [
|
||||||
|
"#eeeeee"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"splitArea": {
|
||||||
|
"show": false,
|
||||||
|
"areaStyle": {
|
||||||
|
"color": [
|
||||||
|
"rgba(250,250,250,0.05)",
|
||||||
|
"rgba(200,200,200,0.02)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"logAxis": {
|
||||||
|
"axisLine": {
|
||||||
|
"show": true,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": "#cccccc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"axisTick": {
|
||||||
|
"show": false,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": "#333"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"axisLabel": {
|
||||||
|
"show": true,
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#999999"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"splitLine": {
|
||||||
|
"show": true,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": [
|
||||||
|
"#eeeeee"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"splitArea": {
|
||||||
|
"show": false,
|
||||||
|
"areaStyle": {
|
||||||
|
"color": [
|
||||||
|
"rgba(250,250,250,0.05)",
|
||||||
|
"rgba(200,200,200,0.02)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timeAxis": {
|
||||||
|
"axisLine": {
|
||||||
|
"show": true,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": "#cccccc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"axisTick": {
|
||||||
|
"show": false,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": "#333"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"axisLabel": {
|
||||||
|
"show": true,
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#999999"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"splitLine": {
|
||||||
|
"show": true,
|
||||||
|
"lineStyle": {
|
||||||
|
"color": [
|
||||||
|
"#eeeeee"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"splitArea": {
|
||||||
|
"show": false,
|
||||||
|
"areaStyle": {
|
||||||
|
"color": [
|
||||||
|
"rgba(250,250,250,0.05)",
|
||||||
|
"rgba(200,200,200,0.02)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"toolbox": {
|
||||||
|
"iconStyle": {
|
||||||
|
"normal": {
|
||||||
|
"borderColor": "#999"
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"borderColor": "#666"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"legend": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#999999"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"axisPointer": {
|
||||||
|
"lineStyle": {
|
||||||
|
"color": "#ccc",
|
||||||
|
"width": 1
|
||||||
|
},
|
||||||
|
"crossStyle": {
|
||||||
|
"color": "#ccc",
|
||||||
|
"width": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"timeline": {
|
||||||
|
"lineStyle": {
|
||||||
|
"color": "#8fd3e8",
|
||||||
|
"width": 1
|
||||||
|
},
|
||||||
|
"itemStyle": {
|
||||||
|
"normal": {
|
||||||
|
"color": "#8fd3e8",
|
||||||
|
"borderWidth": 1
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"color": "#8fd3e8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"controlStyle": {
|
||||||
|
"normal": {
|
||||||
|
"color": "#8fd3e8",
|
||||||
|
"borderColor": "#8fd3e8",
|
||||||
|
"borderWidth": 0.5
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"color": "#8fd3e8",
|
||||||
|
"borderColor": "#8fd3e8",
|
||||||
|
"borderWidth": 0.5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"checkpointStyle": {
|
||||||
|
"color": "#8fd3e8",
|
||||||
|
"borderColor": "rgba(138,124,168,0.37)"
|
||||||
|
},
|
||||||
|
"label": {
|
||||||
|
"normal": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#8fd3e8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#8fd3e8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"visualMap": {
|
||||||
|
"color": [
|
||||||
|
"#516b91",
|
||||||
|
"#59c4e6",
|
||||||
|
"#a5e7f0"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dataZoom": {
|
||||||
|
"backgroundColor": "rgba(0,0,0,0)",
|
||||||
|
"dataBackgroundColor": "rgba(255,255,255,0.3)",
|
||||||
|
"fillerColor": "rgba(167,183,204,0.4)",
|
||||||
|
"handleColor": "#a7b7cc",
|
||||||
|
"handleSize": "100%",
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#333"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"markPoint": {
|
||||||
|
"label": {
|
||||||
|
"normal": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#eee"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"emphasis": {
|
||||||
|
"textStyle": {
|
||||||
|
"color": "#eee"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
42
src/components/common-icon/common-icon.vue
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
<template>
|
||||||
|
<component :is="iconType" :type="iconName" :color="iconColor" :size="iconSize"/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Icons from '_c/icons'
|
||||||
|
export default {
|
||||||
|
name: 'CommonIcon',
|
||||||
|
components: { Icons },
|
||||||
|
props: {
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
color: String,
|
||||||
|
size: Number
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
iconType () {
|
||||||
|
return this.type.indexOf('_') === 0 ? 'Icons' : 'Icon'
|
||||||
|
},
|
||||||
|
iconName () {
|
||||||
|
return this.iconType === 'Icons' ? this.getCustomIconName(this.type) : this.type
|
||||||
|
},
|
||||||
|
iconSize () {
|
||||||
|
return this.size || (this.iconType === 'Icons' ? 12 : undefined)
|
||||||
|
},
|
||||||
|
iconColor () {
|
||||||
|
return this.color || ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getCustomIconName (iconName) {
|
||||||
|
return iconName.slice(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
||||||
2
src/components/common-icon/index.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import CommonIcon from './common-icon.vue'
|
||||||
|
export default CommonIcon
|
||||||
8
src/components/common/common.less
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
.no-select{
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
3
src/components/common/util.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export const showTitle = (item, vm) => {
|
||||||
|
return vm.$config.useI18n ? vm.$t(item.name) : ((item.meta && item.meta.title) || item.name)
|
||||||
|
}
|
||||||
174
src/components/count-to/count-to.vue
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
<template>
|
||||||
|
<div class="count-to-wrapper">
|
||||||
|
<slot name="left"/>
|
||||||
|
<p class="content-outer"><span :class="['count-to-count-text', countClass]" :id="counterId">{{ init }}</span><i :class="['count-to-unit-text', unitClass]">{{ unitText }}</i></p>
|
||||||
|
<slot name="right"/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import CountUp from 'countup'
|
||||||
|
import './index.less'
|
||||||
|
export default {
|
||||||
|
name: 'CountTo',
|
||||||
|
props: {
|
||||||
|
init: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 起始值,即动画开始前显示的数值
|
||||||
|
*/
|
||||||
|
startVal: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 结束值,即动画结束后显示的数值
|
||||||
|
*/
|
||||||
|
end: {
|
||||||
|
type: Number,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 保留几位小数
|
||||||
|
*/
|
||||||
|
decimals: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 分隔整数和小数的符号,默认是小数点
|
||||||
|
*/
|
||||||
|
decimal: {
|
||||||
|
type: String,
|
||||||
|
default: '.'
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 动画持续的时间,单位是秒
|
||||||
|
*/
|
||||||
|
duration: {
|
||||||
|
type: Number,
|
||||||
|
default: 2
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 动画延迟开始的时间,单位是秒
|
||||||
|
*/
|
||||||
|
delay: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 是否禁用easing动画效果
|
||||||
|
*/
|
||||||
|
uneasing: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 是否使用分组,分组后每三位会用一个符号分隔
|
||||||
|
*/
|
||||||
|
usegroup: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 用于分组(usegroup)的符号
|
||||||
|
*/
|
||||||
|
separator: {
|
||||||
|
type: String,
|
||||||
|
default: ','
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 是否简化显示,设为true后会使用unit单位来做相关省略
|
||||||
|
*/
|
||||||
|
simplify: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 自定义单位,如[3, 'K+'], [6, 'M+']即大于3位数小于6位数的用k+来做省略
|
||||||
|
* 1000即显示为1K+
|
||||||
|
*/
|
||||||
|
unit: {
|
||||||
|
type: Array,
|
||||||
|
default () {
|
||||||
|
return [[3, 'K+'], [6, 'M+'], [9, 'B+']]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
countClass: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
unitClass: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
counter: null,
|
||||||
|
unitText: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
counterId () {
|
||||||
|
return `count_to_${this._uid}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getHandleVal (val, len) {
|
||||||
|
return {
|
||||||
|
endVal: parseInt(val / Math.pow(10, this.unit[len - 1][0])),
|
||||||
|
unitText: this.unit[len - 1][1]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
transformValue (val) {
|
||||||
|
let len = this.unit.length
|
||||||
|
let res = {
|
||||||
|
endVal: 0,
|
||||||
|
unitText: ''
|
||||||
|
}
|
||||||
|
if (val < Math.pow(10, this.unit[0][0])) res.endVal = val
|
||||||
|
else {
|
||||||
|
for (let i = 1; i < len; i++) {
|
||||||
|
if (val >= Math.pow(10, this.unit[i - 1][0]) && val < Math.pow(10, this.unit[i][0])) res = this.getHandleVal(val, i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (val > Math.pow(10, this.unit[len - 1][0])) res = this.getHandleVal(val, len)
|
||||||
|
return res
|
||||||
|
},
|
||||||
|
getValue (val) {
|
||||||
|
let res = 0
|
||||||
|
if (this.simplify) {
|
||||||
|
let { endVal, unitText } = this.transformValue(val)
|
||||||
|
this.unitText = unitText
|
||||||
|
res = endVal
|
||||||
|
} else {
|
||||||
|
res = val
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
let endVal = this.getValue(this.end)
|
||||||
|
this.counter = new CountUp(this.counterId, this.startVal, endVal, this.decimals, this.duration, {
|
||||||
|
useEasing: !this.uneasing,
|
||||||
|
useGrouping: this.useGroup,
|
||||||
|
separator: this.separator,
|
||||||
|
decimal: this.decimal
|
||||||
|
})
|
||||||
|
setTimeout(() => {
|
||||||
|
if (!this.counter.error) this.counter.start()
|
||||||
|
}, this.delay)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
end (newVal) {
|
||||||
|
let endVal = this.getValue(newVal)
|
||||||
|
this.counter.update(endVal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
2
src/components/count-to/index.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import countTo from './count-to.vue'
|
||||||
|
export default countTo
|
||||||
10
src/components/count-to/index.less
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
@prefix: ~"count-to";
|
||||||
|
|
||||||
|
.@{prefix}-wrapper{
|
||||||
|
.content-outer{
|
||||||
|
display: inline-block;
|
||||||
|
.@{prefix}-unit-text{
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
2
src/components/cropper/index.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import Cropper from './index.vue'
|
||||||
|
export default Cropper
|
||||||
46
src/components/cropper/index.less
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
.bg{
|
||||||
|
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC")
|
||||||
|
}
|
||||||
|
.cropper-wrapper{
|
||||||
|
min-height: 500px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
flex-flow: column;
|
||||||
|
align-items: center;
|
||||||
|
.cropper-box {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.img-box{
|
||||||
|
margin: 0 auto;
|
||||||
|
height: 540px;
|
||||||
|
width: 960px;
|
||||||
|
border: 1px solid #ebebeb;
|
||||||
|
display: inline-block;
|
||||||
|
.bg;
|
||||||
|
img{
|
||||||
|
max-width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-box{
|
||||||
|
padding: 10px 0 0;
|
||||||
|
margin-bottom: 25px;
|
||||||
|
visibility: hidden;
|
||||||
|
button {
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.file_logo{
|
||||||
|
.file_name{
|
||||||
|
text-align: center;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.underline {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
180
src/components/cropper/index.vue
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
<template>
|
||||||
|
<div class="cropper-wrapper">
|
||||||
|
<!-- 上传图片时出现cropper -->
|
||||||
|
<div class="cropper-box" v-show="isImage == 1">
|
||||||
|
<div class="img-box">
|
||||||
|
<img class="cropper-image" :id="imgId">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="button-box">
|
||||||
|
<div v-show="isImage == 1">
|
||||||
|
<Button type="primary" @click="rotate">
|
||||||
|
<Icon type="md-refresh" :size="18"/>
|
||||||
|
</Button>
|
||||||
|
<Button type="primary" @click="scale('X')">
|
||||||
|
<Icon custom="iconfont icon-shuipingfanzhuan" :size="18"/>
|
||||||
|
</Button>
|
||||||
|
<Button type="primary" @click="scale('Y')">
|
||||||
|
<Icon custom="iconfont icon-chuizhifanzhuan" :size="18"/>
|
||||||
|
</Button>
|
||||||
|
<Button type="primary" @click="startCrop">
|
||||||
|
<Icon type="md-crop" :size="18"/>
|
||||||
|
</Button>
|
||||||
|
<Button type="primary" @click="cancelCrop">
|
||||||
|
{{$t('reset')}}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- 其他文件时出现文件类型图片 -->
|
||||||
|
<div class="file_logo" v-show="isImage == 2">
|
||||||
|
<img :src="fileLogo">
|
||||||
|
<div class="file_name">{{fileName}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="underline">
|
||||||
|
|
||||||
|
<Upload
|
||||||
|
type="drag"
|
||||||
|
:before-upload="beforeUpload"
|
||||||
|
action="image/upload"
|
||||||
|
v-show="!insideSrc">
|
||||||
|
<div style="padding: 30px 180px">
|
||||||
|
<Icon type="ios-cloud-upload" size="52" style="color: #ffa000"></Icon>
|
||||||
|
<p>{{$t('select_or_drag_img')}}</p>
|
||||||
|
</div>
|
||||||
|
</Upload>
|
||||||
|
|
||||||
|
<Upload action="image/upload" :before-upload="beforeUpload" v-show="insideSrc">
|
||||||
|
<Button icon="ios-cloud-upload-outline" style="width: 150px;">{{$t('choose_file')}}</Button>
|
||||||
|
</Upload>
|
||||||
|
<Button style="width: 150px;margin-left: 10px;height: 31.9px" type="primary" @click="comfirm" v-show="insideSrc">{{ cropButtonText }}</Button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Cropper from 'cropperjs'
|
||||||
|
import './index.less'
|
||||||
|
import 'cropperjs/dist/cropper.min.css'
|
||||||
|
export default {
|
||||||
|
name: 'Cropper',
|
||||||
|
props: {
|
||||||
|
cropButtonText: {
|
||||||
|
type: String,
|
||||||
|
default: 'submit'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
cropper: null,
|
||||||
|
fileSize: 0,
|
||||||
|
updataFile: {},
|
||||||
|
insideSrc: '', // 文件内容
|
||||||
|
infoFile: '', // 文件信息
|
||||||
|
fileName: '',
|
||||||
|
fileType: '',
|
||||||
|
isImage: '', // 0表示无文件 1表示文件为图片 2表示其他类型文件
|
||||||
|
fileLogo: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
imgId () {
|
||||||
|
return `cropper${this._uid}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
insideSrc (src) {
|
||||||
|
this.replace(src)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
beforeUpload (file) {
|
||||||
|
// 使用html5的fileReader将图片转换成base64编码
|
||||||
|
// var fileSize = 0
|
||||||
|
this.updataFile = file
|
||||||
|
this.fileSize = file.size
|
||||||
|
const reader = new FileReader()
|
||||||
|
reader.readAsDataURL(file)
|
||||||
|
reader.onload = (event) => {
|
||||||
|
this.insideSrc = event.srcElement.result
|
||||||
|
this.fileName = file.name
|
||||||
|
this.fileType = file.type
|
||||||
|
}
|
||||||
|
this.fileName = file.name
|
||||||
|
this.fileType = file.type
|
||||||
|
// 判断文件类型是否为图片 0无 1为图片 2其他类型文件
|
||||||
|
if (/\.(jpe?g|png|gif)$/i.test(file.name)) {
|
||||||
|
this.isImage = 1
|
||||||
|
} else if (/\.(xlsx?)$/i.test(file.name)) {
|
||||||
|
this.isImage = 2
|
||||||
|
this.fileLogo = require('@/assets/icons/file-icon/xls_logo.jpg')
|
||||||
|
} else if (/\.(docx?)$/i.test(file.name)) {
|
||||||
|
this.isImage = 2
|
||||||
|
this.fileLogo = require('@/assets/icons/file-icon/doc_logo.jpg')
|
||||||
|
} else if (/\.(pptx?)$/i.test(file.name)) {
|
||||||
|
this.isImage = 2
|
||||||
|
this.fileLogo = require('@/assets/icons/file-icon/ppt_logo.jpg')
|
||||||
|
} else if (/\.(html)$/i.test(file.name)) {
|
||||||
|
this.isImage = 2
|
||||||
|
this.fileLogo = require('@/assets/icons/file-icon/html_logo.jpg')
|
||||||
|
} else {
|
||||||
|
this.isImage = 2
|
||||||
|
this.fileLogo = require('@/assets/icons/file-icon/others_logo.jpg')
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
},
|
||||||
|
replace (src) {
|
||||||
|
this.cropper.replace(src)
|
||||||
|
this.insideSrc = src
|
||||||
|
},
|
||||||
|
rotate () {
|
||||||
|
this.cropper.rotate(90)
|
||||||
|
},
|
||||||
|
scale (d) {
|
||||||
|
this.cropper[`scale${d}`](-this.cropper.getData()[`scale${d}`])
|
||||||
|
},
|
||||||
|
move (...argu) {
|
||||||
|
this.cropper.move(...argu)
|
||||||
|
},
|
||||||
|
startCrop () {
|
||||||
|
this.cropper.crop()
|
||||||
|
},
|
||||||
|
cancelCrop () {
|
||||||
|
this.cropper.clear()
|
||||||
|
},
|
||||||
|
comfirm () {
|
||||||
|
// let dataUrl = this.insideSrc
|
||||||
|
let dataUrl
|
||||||
|
if (this.isImage === 1) {
|
||||||
|
dataUrl = this.cropper.getCroppedCanvas().toDataURL()
|
||||||
|
} else if (this.isImage === 2) {
|
||||||
|
dataUrl = this.insideSrc
|
||||||
|
}
|
||||||
|
let name = this.fileName
|
||||||
|
let type = this.fileType
|
||||||
|
let fileSize = this.fileSize
|
||||||
|
let updataFile = this.updataFile
|
||||||
|
let fileData = {
|
||||||
|
fileSize,
|
||||||
|
updataFile,
|
||||||
|
dataUrl,
|
||||||
|
name,
|
||||||
|
type
|
||||||
|
}
|
||||||
|
this.$emit('transmitInfo', fileData)
|
||||||
|
this.insideSrc = ''
|
||||||
|
this.isImage = 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
let dom = document.getElementById(this.imgId)
|
||||||
|
this.cropper = new Cropper(dom, {
|
||||||
|
checkCrossOrigin: true,
|
||||||
|
autoCrop: false
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
BIN
src/components/cropper/xls_logo.jpg
Normal file
|
After Width: | Height: | Size: 29 KiB |
18
src/components/drag-drawer/drag-drawer-trigger.vue
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<template>
|
||||||
|
<div :class="`${prefix}-move-trigger`">
|
||||||
|
<div :class="`${prefix}-move-trigger-point`">
|
||||||
|
<i></i><i></i><i></i><i></i><i></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Mixin from './mixin'
|
||||||
|
export default {
|
||||||
|
name: 'DragDrawerTrigger',
|
||||||
|
mixins: [Mixin]
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
156
src/components/drag-drawer/drag-drawer.vue
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
<template>
|
||||||
|
<Drawer ref="drawerWrapper"
|
||||||
|
:value="value"
|
||||||
|
@input="handleInput"
|
||||||
|
:width="width"
|
||||||
|
:class-name="outerClasses"
|
||||||
|
v-bind="$attrs"
|
||||||
|
v-on="$listeners">
|
||||||
|
<!-- 所有插槽内容显示在这里 ↓ -->
|
||||||
|
|
||||||
|
<template v-for="(slots, slotsName) in $slots">
|
||||||
|
<template v-if="slotsName !== 'default'">
|
||||||
|
<render-dom v-for="(render, index) in slots"
|
||||||
|
:key="`b_drawer_${slotsName}_${index}`"
|
||||||
|
:render="() => render"
|
||||||
|
:slot="slotsName">
|
||||||
|
</render-dom>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<div :class="`${prefix}-body-wrapper`"
|
||||||
|
:key="`b_drawer_${slotsName}`">
|
||||||
|
<render-dom v-for="(render, index) in slots"
|
||||||
|
:key="`b_drawer_${slotsName}_${index}`"
|
||||||
|
:render="() => render"
|
||||||
|
:slot="slotsName">
|
||||||
|
</render-dom>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
<!-- 所有插槽内容显示在这里 ↑ -->
|
||||||
|
<div v-if="draggable"
|
||||||
|
:style="triggerStyle"
|
||||||
|
:class="`${prefix}-trigger-wrapper`"
|
||||||
|
@mousedown="handleTriggerMousedown">
|
||||||
|
<slot name="trigger">
|
||||||
|
<drag-drawer-trigger></drag-drawer-trigger>
|
||||||
|
</slot>
|
||||||
|
</div>
|
||||||
|
<div v-if="$slots.footer"
|
||||||
|
:class="`${prefix}-footer`">
|
||||||
|
<slot name="footer"></slot>
|
||||||
|
</div>
|
||||||
|
</Drawer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import RenderDom from '@/libs/render-dom'
|
||||||
|
import DragDrawerTrigger from './drag-drawer-trigger.vue'
|
||||||
|
import Mixin from './mixin'
|
||||||
|
import { on, off } from '@/libs/tools'
|
||||||
|
import './index.less'
|
||||||
|
export default {
|
||||||
|
name: 'BDrawer',
|
||||||
|
components: {
|
||||||
|
RenderDom,
|
||||||
|
DragDrawerTrigger
|
||||||
|
},
|
||||||
|
mixins: [Mixin],
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
width: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: 256
|
||||||
|
},
|
||||||
|
// 是否可拖动修改宽度
|
||||||
|
draggable: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
// 最小拖动宽度
|
||||||
|
minWidth: {
|
||||||
|
type: [String, Number],
|
||||||
|
default: 256
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
canMove: false,
|
||||||
|
wrapperWidth: 0,
|
||||||
|
wrapperLeft: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
outerClasses () {
|
||||||
|
const classesArray = [
|
||||||
|
`${this.prefix}-wrapper`,
|
||||||
|
this.canMove ? 'no-select pointer-events-none' : ''
|
||||||
|
]
|
||||||
|
return classesArray.join(' ')
|
||||||
|
},
|
||||||
|
placement () {
|
||||||
|
return this.$attrs.placement
|
||||||
|
},
|
||||||
|
innerWidth () {
|
||||||
|
const width = this.width
|
||||||
|
return width <= 100 ? (this.wrapperWidth * width) / 100 : width
|
||||||
|
},
|
||||||
|
triggerStyle () {
|
||||||
|
return {
|
||||||
|
[this.placement]: `${this.innerWidth}px`,
|
||||||
|
position: this.$attrs.inner ? 'absolute' : 'fixed'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleInput (status) {
|
||||||
|
this.$emit('input', status)
|
||||||
|
},
|
||||||
|
handleTriggerMousedown (event) {
|
||||||
|
this.canMove = true
|
||||||
|
this.$emit('on-resize-start')
|
||||||
|
// 防止鼠标选中抽屉中文字,造成拖动trigger触发浏览器原生拖动行为
|
||||||
|
window.getSelection().removeAllRanges()
|
||||||
|
},
|
||||||
|
handleMousemove (event) {
|
||||||
|
if (!this.canMove) return
|
||||||
|
// 更新容器宽度和距离左侧页面距离,如果是window则距左侧距离为0
|
||||||
|
this.setWrapperWidth()
|
||||||
|
const left = event.pageX - this.wrapperLeft
|
||||||
|
// 如果抽屉方向为右边,宽度计算需用容器宽度减去left
|
||||||
|
let width = this.placement === 'right' ? this.wrapperWidth - left : left
|
||||||
|
// 限定做小宽度
|
||||||
|
width = Math.max(width, parseFloat(this.minWidth))
|
||||||
|
event.atMin = width === parseFloat(this.minWidth)
|
||||||
|
// 如果当前width不大于100,视为百分比
|
||||||
|
if (width <= 100) width = (width / this.wrapperWidth) * 100
|
||||||
|
this.$emit('update:width', parseInt(width))
|
||||||
|
this.$emit('on-resize', event)
|
||||||
|
},
|
||||||
|
handleMouseup (event) {
|
||||||
|
this.canMove = false
|
||||||
|
this.$emit('on-resize-end')
|
||||||
|
},
|
||||||
|
setWrapperWidth () {
|
||||||
|
const {
|
||||||
|
width,
|
||||||
|
left
|
||||||
|
} = this.$refs.drawerWrapper.$el.getBoundingClientRect()
|
||||||
|
this.wrapperWidth = width
|
||||||
|
this.wrapperLeft = left
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
on(document, 'mousemove', this.handleMousemove)
|
||||||
|
on(document, 'mouseup', this.handleMouseup)
|
||||||
|
this.setWrapperWidth()
|
||||||
|
},
|
||||||
|
beforeDestroy () {
|
||||||
|
off(document, 'mousemove', this.handleMousemove)
|
||||||
|
off(document, 'mouseup', this.handleMouseup)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
2
src/components/drag-drawer/index.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import DragDrawer from './drag-drawer.vue'
|
||||||
|
export default DragDrawer
|
||||||
70
src/components/drag-drawer/index.less
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
@prefix: ~"drag-drawer";
|
||||||
|
@drag-drawer-trigger-height: 100px;
|
||||||
|
@drag-drawer-trigger-width: 8px;
|
||||||
|
|
||||||
|
.@{prefix}-wrapper{
|
||||||
|
&.no-select{
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
&.pointer-events-none{
|
||||||
|
pointer-events: none;
|
||||||
|
& .@{prefix}-trigger-wrapper{
|
||||||
|
pointer-events: all;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ivu-drawer{
|
||||||
|
&-header{
|
||||||
|
overflow: hidden !important;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
&-body{
|
||||||
|
padding: 0;
|
||||||
|
overflow: visible;
|
||||||
|
position: static;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.@{prefix}-body-wrapper{
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
padding: 16px;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
.@{prefix}-trigger-wrapper{
|
||||||
|
top: 0;
|
||||||
|
height: 100%;
|
||||||
|
width: 0;
|
||||||
|
.@{prefix}-move-trigger{
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
height: @drag-drawer-trigger-height;
|
||||||
|
width: @drag-drawer-trigger-width;
|
||||||
|
background: rgb(243, 243, 243);
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
border-radius: ~"4px / 6px";
|
||||||
|
box-shadow: 0 0 1px 1px rgba(0, 0, 0, .2);
|
||||||
|
line-height: @drag-drawer-trigger-height;
|
||||||
|
cursor: col-resize;
|
||||||
|
&-point{
|
||||||
|
display: inline-block;
|
||||||
|
width: 50%;
|
||||||
|
transform: translateX(50%);
|
||||||
|
i{
|
||||||
|
display: block;
|
||||||
|
border-bottom: 1px solid rgb(192, 192, 192);
|
||||||
|
padding-bottom: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.@{prefix}-footer{
|
||||||
|
flex-grow: 1;
|
||||||
|
width: 100%;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
border-top: 1px solid #e8e8e8;
|
||||||
|
padding: 10px 16px;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
7
src/components/drag-drawer/mixin.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
export default {
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
prefix: 'drag-drawer'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
92
src/components/drag-list/drag-list.vue
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
<template>
|
||||||
|
<div class="drag-list-wrapper">
|
||||||
|
<div class="drag-list-con con1">
|
||||||
|
<slot name="left-title"></slot>
|
||||||
|
<draggable class="drop-box1" :class="dropConClass.left" :options="options" :value="list1" @input="handleListChange($event, 'left')" @end="handleEnd($event, 'left')">
|
||||||
|
<div class="drag-list-item" v-for="(itemLeft, index) in list1" :key="`drag_li1_${index}`">
|
||||||
|
<slot name="left" :itemLeft="itemLeft">{{ itemLeft }}</slot>
|
||||||
|
</div>
|
||||||
|
</draggable>
|
||||||
|
</div>
|
||||||
|
<div class="drag-list-con con2">
|
||||||
|
<slot name="right-title"></slot>
|
||||||
|
<draggable class="drop-box2" :class="dropConClass.right" :options="options" :value="list2" @input="handleListChange($event, 'right')" @end="handleEnd($event, 'right')">
|
||||||
|
<div class="drag-list-item" v-for="(itemRight, index) in list2" :key="`drag_li2_${index}`">
|
||||||
|
<slot name="right" :itemRight="itemRight">{{ itemRight }}</slot>
|
||||||
|
</div>
|
||||||
|
</draggable>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import draggable from 'vuedraggable'
|
||||||
|
export default {
|
||||||
|
name: 'DragList',
|
||||||
|
components: {
|
||||||
|
draggable
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
list1: {
|
||||||
|
type: Array,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
list2: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
},
|
||||||
|
dropConClass: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
options: { group: 'drag_list' }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleListChange (value, type) {
|
||||||
|
if (type === 'left') this.$emit('update:list1', value)
|
||||||
|
else this.$emit('update:list2', value)
|
||||||
|
},
|
||||||
|
handleEnd (event, type) {
|
||||||
|
const srcClassName = (event.srcElement || event.target).classList[0]
|
||||||
|
const targetClassName = event.to.classList[0]
|
||||||
|
let src = ''
|
||||||
|
let target = ''
|
||||||
|
if (srcClassName === targetClassName) {
|
||||||
|
if (type === 'left') {
|
||||||
|
src = 'left'
|
||||||
|
target = 'left'
|
||||||
|
} else {
|
||||||
|
src = 'right'
|
||||||
|
target = 'right'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (type === 'left') {
|
||||||
|
src = 'left'
|
||||||
|
target = 'right'
|
||||||
|
} else {
|
||||||
|
src = 'right'
|
||||||
|
target = 'left'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.$emit('on-change', {
|
||||||
|
src: src,
|
||||||
|
target: target,
|
||||||
|
oldIndex: event.oldIndex,
|
||||||
|
newIndex: event.newIndex
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="less">
|
||||||
|
.drag-list-wrapper{
|
||||||
|
height: 100%;
|
||||||
|
.drag-list-con{
|
||||||
|
width: 50%;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
2
src/components/drag-list/index.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import DragList from './drag-list.vue'
|
||||||
|
export default DragList
|
||||||
75
src/components/editor/editor.vue
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
<template>
|
||||||
|
<div class="editor-wrapper">
|
||||||
|
<div :id="editorId"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Editor from 'wangeditor'
|
||||||
|
import 'wangeditor/release/wangEditor.min.css'
|
||||||
|
import { oneOf } from '@/libs/tools'
|
||||||
|
export default {
|
||||||
|
name: 'Editor',
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 绑定的值的类型, enum: ['html', 'text']
|
||||||
|
*/
|
||||||
|
valueType: {
|
||||||
|
type: String,
|
||||||
|
default: 'html',
|
||||||
|
validator: (val) => {
|
||||||
|
return oneOf(val, ['html', 'text'])
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 设置change事件触发时间间隔
|
||||||
|
*/
|
||||||
|
changeInterval: {
|
||||||
|
type: Number,
|
||||||
|
default: 200
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 是否开启本地存储
|
||||||
|
*/
|
||||||
|
cache: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
editorId () {
|
||||||
|
return `editor${this._uid}`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
setHtml (val) {
|
||||||
|
this.editor.txt.html(val)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.editor = new Editor(`#${this.editorId}`)
|
||||||
|
this.editor.customConfig.onchange = (html) => {
|
||||||
|
let text = this.editor.txt.text()
|
||||||
|
if (this.cache) localStorage.editorCache = html
|
||||||
|
this.$emit('input', this.valueType === 'html' ? html : text)
|
||||||
|
this.$emit('on-change', html, text)
|
||||||
|
}
|
||||||
|
this.editor.customConfig.onchangeTimeout = this.changeInterval
|
||||||
|
// create这个方法一定要在所有配置项之后调用
|
||||||
|
this.editor.create()
|
||||||
|
// 如果本地有存储加载本地存储内容
|
||||||
|
let html = this.value || localStorage.editorCache
|
||||||
|
if (html) this.editor.txt.html(html)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
.editor-wrapper *{
|
||||||
|
z-index: 100 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
2
src/components/editor/index.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import Editor from './editor.vue'
|
||||||
|
export default Editor
|
||||||
35
src/components/icons/icons.vue
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<template>
|
||||||
|
<i :class="`iconfont icon-${type}`" :style="styles"></i>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'Icons',
|
||||||
|
props: {
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
color: {
|
||||||
|
type: String,
|
||||||
|
default: '#5c6b77'
|
||||||
|
},
|
||||||
|
size: {
|
||||||
|
type: Number,
|
||||||
|
default: 16
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
styles () {
|
||||||
|
return {
|
||||||
|
fontSize: `${this.size}px`,
|
||||||
|
color: this.color
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
||||||
2
src/components/icons/index.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import Icons from './icons.vue'
|
||||||
|
export default Icons
|
||||||
2
src/components/info-card/index.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import InforCard from './infor-card.vue'
|
||||||
|
export default InforCard
|
||||||
94
src/components/info-card/infor-card.vue
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
<template>
|
||||||
|
<Card :shadow="shadow" class="info-card-wrapper" :padding="0">
|
||||||
|
<div class="content-con">
|
||||||
|
<div class="right-area" :style="{width: rightWidth}">
|
||||||
|
<div>
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="left-area" :style="{color: color, width: leftWidth}">
|
||||||
|
<common-icon class="icon" :type="icon" :size="iconSize" color="#333333"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import CommonIcon from '_c/common-icon'
|
||||||
|
export default {
|
||||||
|
name: 'InforCard',
|
||||||
|
components: {
|
||||||
|
CommonIcon
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
left: {
|
||||||
|
type: Number,
|
||||||
|
default: 36
|
||||||
|
},
|
||||||
|
color: {
|
||||||
|
type: String,
|
||||||
|
default: '#2d8cf0'
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
iconSize: {
|
||||||
|
type: Number,
|
||||||
|
default: 20
|
||||||
|
},
|
||||||
|
shadow: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
leftWidth () {
|
||||||
|
return `${this.left}%`
|
||||||
|
},
|
||||||
|
rightWidth () {
|
||||||
|
return `${100 - this.left}%`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
.common{
|
||||||
|
float: left;
|
||||||
|
height: 100%;
|
||||||
|
display: table;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.size{
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.middle-center{
|
||||||
|
display: table-cell;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.info-card-wrapper{
|
||||||
|
.size;
|
||||||
|
overflow: hidden;
|
||||||
|
.ivu-card-body{
|
||||||
|
.size;
|
||||||
|
}
|
||||||
|
.content-con{
|
||||||
|
.size;
|
||||||
|
position: relative;
|
||||||
|
.left-area{
|
||||||
|
.common;
|
||||||
|
& > .icon{
|
||||||
|
.middle-center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.right-area{
|
||||||
|
.common;
|
||||||
|
& > div{
|
||||||
|
.middle-center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
2
src/components/login-form/index.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import LoginForm from './login-form.vue'
|
||||||
|
export default LoginForm
|
||||||
123
src/components/login-form/login-form.vue
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
<template>
|
||||||
|
<Form class="loginForm" ref="loginForm" :model="form" :rules="rules" @keydown.enter.native="handleSubmit">
|
||||||
|
<FormItem prop="username">
|
||||||
|
<Input v-model="form.username" style="width:400px" clearable :placeholder="$t('please_enter_your_account')">
|
||||||
|
<span slot="prepend">
|
||||||
|
<Icon :size="16" type="ios-person"></Icon>
|
||||||
|
</span>
|
||||||
|
</Input>
|
||||||
|
</FormItem>
|
||||||
|
<FormItem prop="password">
|
||||||
|
<Input type="password" clearable style="width:400px" v-model="form.password" :placeholder="$t('please_enter_your_password')">
|
||||||
|
<span slot="prepend">
|
||||||
|
<Icon :size="14" type="md-lock"></Icon>
|
||||||
|
</span>
|
||||||
|
</Input>
|
||||||
|
</FormItem>
|
||||||
|
<FormItem v-if="logincaptcha">
|
||||||
|
<div style="display: flex;align-items: center;">
|
||||||
|
<Input clearable style="width:260px;margin-right:10px" v-model="form.verification" :placeholder="$t('input_captcha_case_sensitive')">
|
||||||
|
<span slot="prepend">
|
||||||
|
<Icon :size="14" type="md-barcode"></Icon>
|
||||||
|
</span>
|
||||||
|
</Input>
|
||||||
|
<img style="height:32px;" :src="codeImg" @click="changeSrc" alt="">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</FormItem>
|
||||||
|
<FormItem>
|
||||||
|
<Checkbox class="label" @on-change="toggle">{{$t('keep_login')}}</Checkbox>
|
||||||
|
<div class="flexbox">
|
||||||
|
<Button class="flexbox-btn" @click="handleSubmit" type="primary" long>{{$t('login')}}</Button>
|
||||||
|
<!-- <router-link :to="{path:'/register'}">还没账号?免费注册>></router-link> -->
|
||||||
|
</div>
|
||||||
|
</FormItem>
|
||||||
|
</Form>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import config from '@/config'
|
||||||
|
const { cookieExpires_long, cookieExpires_short } = config
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'LoginForm',
|
||||||
|
props: {
|
||||||
|
logincaptcha: {
|
||||||
|
type: Boolean
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
codeImg: '/api/platform.php?service=Platform.Captcha.Create',
|
||||||
|
form: {
|
||||||
|
username: '',
|
||||||
|
password: '',
|
||||||
|
verification: ''
|
||||||
|
},
|
||||||
|
cookiesExp: 1,
|
||||||
|
usernameRules: [
|
||||||
|
{ required: true, message: this.$t('account_empty'), trigger: 'blur' }
|
||||||
|
],
|
||||||
|
passwordRules: [
|
||||||
|
{ required: true, message: this.$t('developer_pwd_tips'), trigger: 'blur' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
rules () {
|
||||||
|
return {
|
||||||
|
username: this.usernameRules,
|
||||||
|
password: this.passwordRules
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleSubmit () {
|
||||||
|
this.$refs.loginForm.validate((valid) => {
|
||||||
|
if (valid) {
|
||||||
|
this.$emit('on-success-valid', {
|
||||||
|
username: this.form.username,
|
||||||
|
password: this.form.password,
|
||||||
|
captcha: this.form.verification,
|
||||||
|
cookiesExp: this.cookiesExp
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
toggle (value) {
|
||||||
|
this.cookiesExp = value ? cookieExpires_long : cookieExpires_short
|
||||||
|
},
|
||||||
|
changeSrc () {
|
||||||
|
// if (this.codeImg === '/api/platform.php?service=Platform.Captcha.Create') {
|
||||||
|
// this.codeImg = '/api/platform.php?service=Platform.Captcha.Create&t=1'
|
||||||
|
// } else {
|
||||||
|
// this.codeImg = '/api/platform.php?service=Platform.Captcha.Create'
|
||||||
|
// }
|
||||||
|
let timestamp = Date.parse(new Date())
|
||||||
|
// timestamp = timestamp.toString().slice(5)
|
||||||
|
this.codeImg = '/api/platform.php?service=Platform.Captcha.Create&t=' + timestamp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scope>
|
||||||
|
.loginForm {
|
||||||
|
.flexbox {
|
||||||
|
margin-top: 25px;
|
||||||
|
width: 400px;
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row;
|
||||||
|
justify-content: center;
|
||||||
|
&-btn {
|
||||||
|
width: 100%;
|
||||||
|
height: 34px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.label{
|
||||||
|
position: absolute;
|
||||||
|
top: -33px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
2
src/components/main/components/a-back-top/index.js
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
import ABackTop from './index.vue'
|
||||||
|
export default ABackTop
|
||||||