Commit ce0f3334 authored by xhx's avatar xhx

接口调试

parent 7190c9d9
NODE_ENV="development"
VUE_APP_URL="http://"
\ No newline at end of file
NODE_ENV="production"
VUE_APP_URL="http://"
\ No newline at end of file
NODE_ENV = 'test'
// VUE_APP_URL = 'http://47.114.159.142:9058/'
\ No newline at end of file
......@@ -22,3 +22,7 @@ yarn lint
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
### 接口文档
[文档链接](http://172.16.100.59:8090/q/swagger-ui?urls.primaryName=pool.v1.EntrustPool#/)
......@@ -4,7 +4,7 @@
"private": true,
"scripts": {
"dev": "vue-cli-service serve",
"build:test": "vue-cli-service build --mode development",
"build:test": "vue-cli-service build --mode test",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
......
......@@ -4,6 +4,14 @@
</div>
</template>
<script lang="ts">
import Vue from 'vue'
import { getStorage } from './utils/storage'
export default Vue.extend({
})
</script>
<style lang="scss">
* {
margin: 0;
......
......@@ -18,11 +18,17 @@
<script lang="ts">
import Vue from 'vue'
import { removeStorage } from '@/utils/storage'
import { logout } from '@/service/request'
export default Vue.extend({
methods: {
logout() {
// logout().then(res => {
// console.log(res)
// })
this.$router.push('/login')
removeStorage('user')
// removeStorage('user')
removeStorage('authToken')
removeStorage('type')
}
}
})
......@@ -32,12 +38,12 @@ export default Vue.extend({
.header {
width: 100%;
height: var(--headerHeight);
background: var(--headerBgColor);
.header-bar {
min-width: 1200px;
height: 100%;
margin: auto;
padding: 0 35px;
background: var(--headerBgColor);
color: #fff;
display: flex;
align-items: center;
......
......@@ -42,12 +42,18 @@
<script lang="ts">
import Vue from 'vue'
import menu from '@/utils/menu'
import { getStorage } from '@/utils/storage'
export default Vue.extend({
data() {
return {
menu: menu.admin,
defaultActive: ''
menu: [] as any,
defaultActive: '',
type: 1
}
},
created() {
this.type = +eval(getStorage('type') as any)
this.menu = this.type === 2 ? menu.admin : menu.groupLeader
}
})
</script>
......
......@@ -32,8 +32,12 @@ export default Vue.extend({
display: flex;
.content-r {
width: calc(100% - 200px);
height: calc(100vh - var(--headerHeight));
padding: 20px 40px;
overflow-x: hidden;
font-size: 14px;
display: flex;
flex-direction: column;
}
}
</style>
\ No newline at end of file
......@@ -7,7 +7,7 @@ const routes: Array<RouteConfig> = [
{
path: '/',
name: 'App',
redirect:'/home',
redirect:'/login',
component: () => import(/* webpackChunkName: "about" */ '../layout/index.vue'),
children: [
{
......@@ -48,10 +48,10 @@ const routes: Array<RouteConfig> = [
name: '404',
component: () => import('@/views/404.vue')
},
{
path: '*',
redirect: '/404'
}
// {
// path: '*',
// redirect: '/404'
// }
]
const router = new VueRouter({
......
import axios from 'axios'
import { Message, Loading } from 'element-ui'
import { ElLoadingComponent } from 'element-ui/types/loading'
import { getStorage } from '@/utils/storage'
import { getStorage, saveStorage } from '@/utils/storage'
import router from '@/router'
console.log(router)
let loading: ElLoadingComponent
......@@ -36,47 +35,52 @@ export function tryHideFullScreenLoading() {
}
const service = axios.create({
baseURL: process.env.VUE_APP_URL,
baseURL: '/api',
timeout: 15000
})
service.interceptors.request.use(function (config) {
// do something before request is sent
if (getStorage('token')) {
config.headers['token'] = getStorage('token')
if (getStorage('authToken') && config.url?.indexOf('/login') === -1) {
const str = getStorage('authToken')
config.headers['Auth-Token'] = str?.slice(1, str.length - 1)
}
showFullScreenLoading()
// showFullScreenLoading()
return config;
}, function (error) {
tryHideFullScreenLoading()
// tryHideFullScreenLoading()
return Promise.reject(error);
});
// Add a response interceptor
service.interceptors.response.use(
response => {
const authToken = response.headers['auth-token']
if (authToken) {
saveStorage('authToken', authToken)
}
const res = response.data
// if the custom code is not 200, it is judged as an error.
if (res.code !== 200) {
Message({
message: res.msg || 'Error',
type: 'error',
duration: 3 * 1000
})
tryHideFullScreenLoading()
return Promise.reject(new Error(res.msg || 'Error'))
} else {
tryHideFullScreenLoading()
return res
}
// tryHideFullScreenLoading()
return res
}, error => {
// Do something with response error
Message({
message: error.msg || '网络异常',
type: 'error',
duration: 3 * 1000
})
tryHideFullScreenLoading()
// console.log(error.response)
if (error.response.data?.reason === 'TOKEN') {
router.push('/login')
Message({
message: '登录已过期',
type: 'error',
duration: 3 * 1000
})
} else {
Message({
message: error.response.data.reason || '网络异常',
type: 'error',
duration: 3 * 1000
})
}
// tryHideFullScreenLoading()
return Promise.reject(error);
})
......
......@@ -10,7 +10,37 @@ interface poolInfo {
minTicket: number;
deposit: string;
selfAddr: string;
days: string
days: string;
creator?: string
}
/**
* 登录
* @param data
* @returns
*/
export const login = function(data: {name: string, password: string}) {
return service.post('/admin/login', data)
}
/**
* 登出
* @returns
*/
export const logout = function() {
return service.post('/admin/login-out')
}
/**
* 用户信息
* @returns
*/
export const info = function() {
return service.post('/admin/info', {})
}
export const getStatistic = function() {
return service.get('/admin/data')
}
/**
......@@ -73,7 +103,7 @@ export const updatePool = function(data: {id: string}) {
* @returns
*/
export const setOnline = function(data: {id: string}) {
return service.post('/amin/set-online', data)
return service.post('/admin/set-online', data)
}
/**
......@@ -84,3 +114,12 @@ export const setOnline = function(data: {id: string}) {
export const getUserLists = function(data: {type?: number, addr?: string, page: number, pageSize: number}) {
return service.get('/admin/user-list', {params: data})
}
/**
* 获取列表
* @param data
* @returns
*/
export const getAdminLists = function(data: {page: number, pageSize: number}) {
return service.get('/admin/admin-list', {params: data})
}
export const getDateTime = function(s: string) {
const str = s + '000'
const year = new Date(str).getFullYear()
const month = new Date(str).getMonth() >= 10 ? new Date(str).getMonth() : '0' + new Date(str).getMonth()
const day = new Date(str).getDate() >= 10 ? new Date(str).getDate() : '0' + new Date(str).getDate()
return year + '-' + month + '-' + day
}
\ No newline at end of file
......@@ -33,14 +33,35 @@
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
// import { Component, Vue } from 'vue-property-decorator';
@Component({
components: {
// @Component({
// components: {
// },
// })
// export default class Home extends Vue {}
import Vue from 'vue'
import { getStatistic } from '@/service/request'
export default Vue.extend({
data() {
return {
info: {}
}
},
methods: {
getInfo() {
// ...
// getStatistic().then(res => {
// this.info = res
// })
console.log(111)
}
},
created() {
this.getInfo()
}
})
export default class Home extends Vue {}
</script>
<style lang="scss" scoped>
......
......@@ -10,7 +10,7 @@
<el-input v-model="form.password" show-password></el-input>
</el-form-item>
</el-form>
<el-button class="w-full" type="primary" @click="login">登 录</el-button>
<el-button class="w-full" type="primary" @keypress.enter="login" @click="login">登 录</el-button>
</div>
</div>
</template>
......@@ -18,6 +18,7 @@
<script lang="ts">
import Vue from 'vue'
import { saveStorage } from '@/utils/storage'
import { info, login } from '@/service/request'
export default Vue.extend({
data() {
return {
......@@ -41,8 +42,15 @@ export default Vue.extend({
// success
(this.$refs['form'] as any).validate((valid: any) => {
if (valid) {
saveStorage('user', this.form)
this.$router.push('/home')
login(this.form).then((res: any) => {
if (res.data.isSucc) {
info().then((res: any) => {
// saveStorage('user', this.form)
saveStorage('type', res.data.type)
this.$router.push('/home')
})
}
})
} else {
this.$message.info('请先填写登录信息')
}
......
......@@ -8,19 +8,19 @@
border
style="width: 100%">
<el-table-column
prop="date"
prop="name"
label="矿池名称">
</el-table-column>
<el-table-column
prop="date"
prop="minerAddr"
label="矿池地址">
</el-table-column>
<el-table-column
prop="name"
label="持挖矿地址">
prop="selfAddr"
label="持挖矿地址">
</el-table-column>
<el-table-column
prop="address"
prop="days"
label="矿池周期">
</el-table-column>
<el-table-column
......@@ -28,14 +28,14 @@
label="矿池到期时间">
</el-table-column>
<el-table-column
prop="address"
prop="desc"
label="矿池介绍">
</el-table-column>
<el-table-column
prop="address"
label="状态">
<template slot-scope="scope">
{{ scope.row.status === 1 ? '在线' : '离线' }}
{{ +scope.row.status > 1 ? '在线' : '离线' }}
</template>
</el-table-column>
<el-table-column
......@@ -43,8 +43,9 @@
<template slot-scope="scope">
<!--admin专有-->
<el-button @click="toTop(scope.row)" type="text" size="small">置顶</el-button>
<el-button @click="statusClick(scope.row)" type="text" size="small">{{ scope.row.status === 1 ? '下线' : '上线' }}</el-button>
<el-button @click="editClick(scope.row)" type="text" size="small">编辑</el-button>
<el-button v-if="+scope.row.status !== 2" @click="statusClick(scope.row)" type="text" size="small">{{ '上线' }}</el-button>
<!-- <el-button @click="statusClick(scope.row)" type="text" size="small">{{ scope.row.status === 1 ? '下线' : '上线' }}</el-button> -->
<!-- <el-button @click="editClick(scope.row)" type="text" size="small">编辑</el-button> -->
<el-button @click="delClick(scope.row)" type="text" size="small">删除</el-button>
</template>
</el-table-column>
......@@ -56,20 +57,35 @@
<el-form-item label="矿池名称" prop="name">
<el-input v-model="form.name" maxlength="20" :disabled="formType === 'edit'"></el-input>
</el-form-item>
<el-form-item label="矿池地址" prop="address">
<el-input v-model="form.address" :disabled="formType === 'edit'"></el-input>
<el-form-item label="矿池型号" prop="friendlyName">
<el-input v-model="form.friendlyName" maxlength="20" :disabled="formType === 'edit'"></el-input>
</el-form-item>
<el-form-item label="矿池地址" prop="minerAddr">
<el-input v-model="form.minerAddr" :disabled="formType === 'edit'"></el-input>
</el-form-item>
<el-form-item label="支持挖矿地址" prop="address1">
<el-input v-model="form.address1" :disabled="formType === 'edit'"></el-input>
<el-form-item label="优点">
<el-input v-model="form.advantage" :disabled="formType === 'edit'"></el-input>
</el-form-item>
<el-form-item label="矿池周期" prop="cycle">
<el-select class="w-full" v-model="form.cycle" placeholder="请选择矿池周期" :disabled="formType === 'edit'">
<el-option label="区域一" value="shanghai"></el-option>
<el-option label="区域二" value="beijing"></el-option>
<el-form-item label="必选理由">
<el-input v-model="form.reason" :disabled="formType === 'edit'"></el-input>
</el-form-item>
<el-form-item label="最低挖矿票数">
<el-input v-model="form.minTicket" :min="10" :disabled="formType === 'edit'"></el-input>
</el-form-item>
<el-form-item label="定金" prop="deposit">
<el-input v-model="form.deposit" :disabled="formType === 'edit'"></el-input>
</el-form-item>
<el-form-item label="支持挖矿地址" prop="selfAddr">
<el-input v-model="form.selfAddr" :disabled="formType === 'edit'"></el-input>
</el-form-item>
<el-form-item label="矿池周期" prop="days">
<el-select class="w-full" v-model="form.days" placeholder="请选择矿池周期" :disabled="formType === 'edit'">
<el-option label="300天" value="300"></el-option>
<!-- <el-option label="区域二" value="beijing"></el-option> -->
</el-select>
</el-form-item>
<el-form-item label="矿池介绍" prop="intro">
<el-input v-model="form.intro" type="textarea" row="3"></el-input>
<el-form-item label="矿池介绍" prop="desc">
<el-input v-model="form.desc" type="textarea" row="3"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -94,39 +110,47 @@
<script lang="ts">
import Vue from 'vue'
import Pagination from '@/components/Panigation.vue'
import { createPool, getPoolList, removePool } from '@/service/request'
import { createPool, getPoolList, removePool, setOnline } from '@/service/request'
import { getStorage } from '@/utils/storage'
export default Vue.extend({
components: {
Pagination
},
data() {
return {
list: [
{
name: 1
}
] as any,
list: [] as any,
id: '',
total: 40,
dialogVisible: false,
form: {
name: '',
address: '',
address1: '',
cycle: '',
intro: ''
minerAddr: '',
friendlyName: '',
selfAddr: '',
days: '',
desc: '',
advantage: '',
reason: '',
minTicket: 10,
deposit: ''
},
rule: {
name: [
{ required: true, message: '请输入矿池名称', trigger: 'blur' }
],
address: [
friendlyName: [
{ required: true, message: '请输入矿池型号', trigger: 'blur' }
],
minerAddr: [
{ required: true, message: '请输入矿池地址', trigger: 'blur' }
],
address1: [
{ required: true, message: '请输入支持挖矿地址', trigger: 'blur' }
selfAddr: [
{ required: true, message: '请输入自持挖矿地址', trigger: 'blur' }
],
deposit: [
{ required: true, message: '请输入定金', trigger: 'blur' }
],
cycle: [
days: [
{ required: true, message: '请输入矿池周期', trigger: 'change' }
]
},
......@@ -142,19 +166,24 @@ export default Vue.extend({
getPoolList({
page: this.page,
pageSize: this.pageSize,
limit: 0
limit: 10
}).then((res: any) => {
this.list = (res.data as any).list
this.total = res.count
this.list = (res.data as any)?.list || []
this.total = +res.data.count
})
},
initForm() {
this.form = {
name: '',
address: '',
address1: '',
cycle: '',
intro: ''
desc: '',
minerAddr: '',
advantage: '',
reason: '',
friendlyName: '',
minTicket: 10,
deposit: '',
selfAddr: '',
days: ''
}
},
addItems() {
......@@ -169,8 +198,14 @@ export default Vue.extend({
submitClick(formName: string) {
(this.$refs[formName] as any).validate((valid: any) => {
if (valid) {
this.getList()
this.dialogVisible = false
// (this.form as any).creator = JSON.parse(getStorage('user') as any).name
createPool(this.form).then(res => {
if (res.data.isSucc) {
this.getList()
this.dialogVisible = false
this.$message.success('添加成功')
}
})
} else {
this.$message('请先完成表单')
}
......@@ -184,9 +219,14 @@ export default Vue.extend({
toTop() {
console.log('toTop')
},
statusClick() {
console.log(1)
this.getList()
statusClick(item: any) {
console.log(item)
setOnline({id: item.id}).then(res => {
if (res.data.isSucc) {
this.$message.success('上线成功')
this.getList()
}
})
},
editClick(item: any) {
this.dialogVisible = true
......@@ -197,17 +237,24 @@ export default Vue.extend({
(this.$refs['form'] as any).resetFields();
})
},
delClick() {
delClick(item: {id: string}) {
this.id = item.id
this.delVisible = true
},
makeSureDel() {
removePool({id: this.id}).then((res: any) => {
if (res.code === 200) {
// if (res.code === 200) {
if (res.data.isSucc) {
this.delVisible = false
this.$message.success('删除成功')
this.getList
this.page = 1
this.getList()
}
})
}
},
created() {
this.getList()
}
})
</script>
......
......@@ -10,20 +10,24 @@
<el-table-column
prop="date"
label="管理员等级">
<template slot-scope="scope">{{ scope.row.type == 1 ? '小队长' : '团队长' }}</template>
</el-table-column>
<el-table-column
prop="date"
width="240"
prop="addr"
label="小组长地址">
</el-table-column>
<el-table-column
prop="name"
prop="createAt"
label="添加日期">
<template slot-scope="scope">{{ getDateTime(scope.row.createAt) }}</template>
</el-table-column>
<el-table-column
prop="address"
label="最后登录时间">
</el-table-column>
<el-table-column
width="90"
label="操作">
<template slot-scope="scope">
<el-button @click="statusClick(scope.row)" type="text" size="small">{{ scope.row.status === 1 ? '停用' : '启用' }}</el-button>
......@@ -66,7 +70,8 @@
<script lang="ts">
import Vue from 'vue'
import Pagination from '@/components/Panigation.vue'
import { addAdmin } from '@/service/request'
import { addAdmin, getAdminLists } from '@/service/request'
import { getDateTime } from '@/utils/utils'
export default Vue.extend({
components: {
Pagination
......@@ -103,10 +108,20 @@ export default Vue.extend({
},
methods: {
getList() {
// getUserLists({
// page: this.page,
// pageSize: this.pageSize
// })
getAdminLists({
page: this.page,
pageSize: this.pageSize
}).then(res => {
this.list = res.data?.list || []
this.total = +res.data.count
})
},
getDateTime(s: string) {
const str = Number(s + '000')
const year = new Date(str).getFullYear()
const month = new Date(str).getMonth() + 1 >= 10 ? new Date(str).getMonth() : '0' + (new Date(str).getMonth() + 1)
const day = new Date(str).getDate() >= 10 ? new Date(str).getDate() : '0' + new Date(str).getDate()
return year + '-' + month + '-' + day
},
initForm() {
this.form = {
......@@ -130,7 +145,8 @@ export default Vue.extend({
(this.$refs[formName] as any).validate((valid: any) => {
if (valid) {
addAdmin(this.form).then((res: any) => {
if (res.code === 200) {
// if (res.code === 200) {
if (res.data?.isSucc) {
this.$message.success('添加成功')
this.getList()
this.dialogVisible = false
......@@ -152,6 +168,9 @@ export default Vue.extend({
delClick() {
this.delVisible = true
}
},
created() {
this.getList()
}
})
</script>
......
......@@ -72,7 +72,8 @@ export default Vue.extend({
(this.$refs[formName] as any).validate((valid: any) => {
if (valid) {
changePassword(this.ruleForm).then((res: any) => {
if (res.code === 200) {
// if (res.code === 200) {
if (res.data.isSucc) {
this.$message.success('修改成功');
(this.$refs[formName] as any).resetFields();
}
......
......@@ -6,11 +6,11 @@
<el-select v-model="search.type" placeholder="请选择" clearable>
<el-option
label="用户"
value="1">
:value="1">
</el-option>
<el-option
label="推客"
value="2">
:value="2">
</el-option>
</el-select>
<el-input class="search-input" v-model="search.text" placeholder="请输入内容" clearable></el-input>
......@@ -29,15 +29,15 @@
border
style="width: 100%">
<el-table-column
prop="date"
prop="addr"
label="当前地址">
</el-table-column>
<el-table-column
prop="name"
prop="inviter"
label="推荐人地址">
</el-table-column>
<el-table-column
prop="address"
prop="bindTime"
label="绑定时间">
</el-table-column>
<el-table-column
......@@ -52,7 +52,14 @@
title="提示"
:visible.sync="dialogVisible"
width="50%">
<div class="item-lines">
<div>委托矿池名称</div>
<div>委托票数</div>
</div>
<div class="item-lines" v-for="item in items" :key="item">
<div>{{ item.minerAddr }}</div>
<div>{{ item.count }}</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogVisible = false">确 定</el-button>
</span>
......@@ -64,6 +71,7 @@
<script lang="ts">
import Vue from 'vue'
import Pagination from '@/components/Panigation.vue'
import { getUserLists } from '@/service/request'
export default Vue.extend({
components: {
Pagination
......@@ -71,36 +79,44 @@ export default Vue.extend({
data() {
return {
search: {
type: '1',
type: 1,
text: ''
},
list: [
{
name: 1
}
] as any,
list: [1] as any,
total: 40,
dialogVisible: false,
items: [] as any,
page: 1,
pageSize: 10
}
},
methods: {
getList() {
console.log(1)
getUserLists({
page: this.page,
pageSize: this.pageSize,
type: this.search.type,
addr: this.search.text
}).then(res => {
this.list = res.data?.list || []
this.total = +res.data.count
})
},
filterList() {
if (this.search.type === '1') {
console.log('type2', this.search.type)
this.list = this.list.filter((item: { addrs: string }) => {
item.addrs === this.search.text
})
} else {
console.log('type1', this.search.type)
this.list = this.list.filter((item: { addr: string }) => {
item.addr === this.search.text
})
}
this.page = 1
this.pageSize = 10
this.getList()
// if (this.search.type === 1) {
// console.log('type2', this.search.type)
// this.list = this.list.filter((item: { addrs: string }) => {
// item.addrs === this.search.text
// })
// } else {
// console.log('type1', this.search.type)
// this.list = this.list.filter((item: { addr: string }) => {
// item.addr === this.search.text
// })
// }
},
handleClick() {
this.dialogVisible = true
......@@ -110,6 +126,9 @@ export default Vue.extend({
this.pageSize = v.pageSize
this.getList()
}
},
created() {
this.getList()
}
})
</script>
......@@ -140,4 +159,12 @@ export default Vue.extend({
margin-right: 15px;
}
}
.item-lines {
display: flex;
align-items: center;
justify-content: center;
div {
flex: 1;
}
}
</style>
\ No newline at end of file
// const TerserPlugin = require('terser-webpack-plugin')
// const CompressionWebpackPlugin = require('compression-webpack-plugin')
module.exports = {
// ...other vue-cli plugin options...
css: {
loaderOptions: {
less: {
javascriptEnabled: true, // 加载LESS 需要把JS设置一下
}
}
},
devServer: {
proxy: { // 设置代理
'/api': {
target: 'http://172.16.100.59:8090/',
changeOrigin: true,
pathRewrite: {
'^/api': ''
}
},
}
},
// configureWebpack: config => {
// if (process.env.NODE_ENV === 'production') {
// config.optimization = {
// minimize: true,
// minimizer: [
// new TerserPlugin({
// exclude: /node_modules/,
// terserOptions: {
// compress: {
// drop_console: true,
// drop_debugger: false,
// pure_funcs: ['console.log'], // 移除console
// }
// }
// })
// ]
// },
// config.plugins = [
// new CompressionWebpackPlugin({
// filename: '[path][name].gz[query]',
// algorithm: 'gzip',
// test: /\.(js|css|json|ttf)(\?.*)?$/i,
// threshold: 0,
// minRatio: 0.8,
// })
// ]
// }
// }
// pwa: {
// name: 'My App',
// themeColor: '#4DBA87',
// msTileColor: '#000000',
// appleMobileWebAppCapable: 'yes',
// appleMobileWebAppStatusBarStyle: 'black',
// manifestOptions:{
// display: 'standalone',
// theme_color: '#333333'
// },
// // configure the workbox plugin
// workboxPluginMode: 'InjectManifest',
// workboxOptions: {
// // swSrc is required in InjectManifest mode.
// // swSrc: 'dev/sw.js',
// // ...other Workbox options...
// }
// }
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment