加入权限管理

This commit is contained in:
marvzhang
2020-03-20 17:43:11 +08:00
parent 1e2b580ed4
commit fa62e1a2dc
26 changed files with 437 additions and 70 deletions

View File

@@ -208,7 +208,9 @@ docker-compose up -d
},
logout () {
this.$store.dispatch('user/logout')
this.$store.dispatch('delAllViews')
this.$router.push('/login')
this.$st.sendEv('全局', '登出')
},
setLang (lang) {
window.localStorage.setItem('lang', lang)

View File

@@ -157,9 +157,11 @@ export default {
this.loading = false
this.$router.push({ path: this.redirect || '/' })
this.$store.dispatch('user/getInfo')
this.$st.sendEv('全局', '登录', '成功')
}).catch(() => {
this.$message.error(this.$t('Error when logging in (Please read documentation Q&A)'))
this.loading = false
this.$st.sendEv('全局', '登录', '失败')
})
}
})
@@ -171,9 +173,11 @@ export default {
this.$store.dispatch('user/register', this.loginForm).then(() => {
this.handleLogin()
this.loading = false
this.$st.sendEv('全局', '注册', '成功')
}).catch(err => {
this.$message.error(this.$t(err))
this.loading = false
this.$st.sendEv('全局', '注册', '失败')
})
}
})

View File

@@ -91,8 +91,13 @@
<h4 v-else class="title">{{ $t('No Project') }}</h4>
</el-row>
<el-row>
<div class="spider-count">
<div style="display: flex; justify-content: space-between">
<span class="spider-count">
{{$t('Spider Count')}}: {{ item.spiders.length }}
</span>
<span class="owner">
{{item.username}}
</span>
</div>
</el-row>
<el-row class="description-wrapper">
@@ -270,7 +275,8 @@ export default {
margin: 10px 0 0 0;
}
.list .item .item-card .spider-count {
.list .item .item-card .spider-count,
.list .item .item-card .owner {
font-size: 12px;
color: grey;
font-weight: bolder;
@@ -284,6 +290,7 @@ export default {
.list .item .item-card .description {
font-size: 12px;
line-height: 16px;
color: grey;
}

View File

@@ -291,7 +291,8 @@ export default {
{ name: 'scrapy_spider', label: 'Scrapy Spider', width: '150px' },
{ name: 'param', label: 'Parameters', width: '150px' },
{ name: 'description', label: 'Description', width: '200px' },
{ name: 'enable', label: 'Enable/Disable', width: '120px' }
{ name: 'enable', label: 'Enable/Disable', width: '120px' },
{ name: 'username', label: 'Owner', width: '100px' }
// { name: 'status', label: 'Status', width: '100px' }
],
isEdit: false,
@@ -611,7 +612,7 @@ export default {
})
// 爬虫列表
request.get('/spiders', {})
request.get('/spiders', { owner_type: 'all' })
.then(response => {
this.spiderList = response.data.data.list || []
})

View File

@@ -255,7 +255,7 @@ export default {
await this.$store.dispatch('spider/getTaskList', this.$route.params.id)
// get spider list
await this.$store.dispatch('spider/getSpiderList')
await this.$store.dispatch('spider/getSpiderList', { owner_type: 'all' })
},
mounted () {
if (!this.$utils.tour.isFinishedTour('spider-detail')) {

View File

@@ -326,6 +326,18 @@
/>
</el-select>
</el-form-item>
<el-form-item>
<el-select
v-model="filter.owner_type"
size="small"
:placeholder="$t('Owner Type')"
@change="getList"
>
<el-option value="me" :label="$t('My Spiders')"/>
<el-option value="all" :label="$t('All Spiders')"/>
<el-option value="public" :label="$t('Public Spiders')"/>
</el-select>
</el-form-item>
<el-form-item>
<el-input
v-model="filter.keyword"
@@ -578,12 +590,22 @@
<el-table-column :label="$t('Action')" align="left" fixed="right" min-width="220px">
<template slot-scope="scope">
<el-tooltip :content="$t('View')" placement="top">
<el-button type="primary" icon="el-icon-search" size="mini"
@click="onView(scope.row, $event)"></el-button>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
:disabled="isDisabled(scope.row)"
@click="onView(scope.row, $event)"
/>
</el-tooltip>
<el-tooltip :content="$t('Remove')" placement="top">
<el-button type="danger" icon="el-icon-delete" size="mini"
@click="onRemove(scope.row, $event)"></el-button>
<el-button
type="danger"
icon="el-icon-delete"
size="mini"
:disabled="isDisabled(scope.row)"
@click="onRemove(scope.row, $event)"
/>
</el-tooltip>
<el-tooltip :content="$t('Copy')" placement="top">
<el-button
@@ -594,17 +616,27 @@
/>
</el-tooltip>
<el-tooltip v-if="!isShowRun(scope.row)" :content="$t('No command line')" placement="top">
<el-button disabled type="success" icon="fa fa-bug" size="mini"
@click="onCrawl(scope.row, $event)"></el-button>
<el-button
disabled
type="success" icon="fa fa-bug" size="mini"
@click="onCrawl(scope.row, $event)"
/>
</el-tooltip>
<el-tooltip v-else :content="$t('Run')" placement="top">
<el-button type="success" icon="fa fa-bug" size="mini" @click="onCrawl(scope.row, $event)"></el-button>
<el-button
type="success"
icon="fa fa-bug"
size="mini"
:disabled="isDisabled(scope.row)"
@click="onCrawl(scope.row, $event)"
/>
</el-tooltip>
<el-tooltip :content="$t('Latest Tasks')" placement="top">
<el-button
type="warning"
icon="fa fa-tasks"
size="mini"
:disabled="isDisabled(scope.row)"
@click="onViewRunningTasks(scope.row, $event)"
/>
</el-tooltip>
@@ -664,7 +696,8 @@ export default {
filter: {
project_id: '',
keyword: '',
type: 'all'
type: 'all',
owner_type: 'me'
},
sort: {
sortKey: '',
@@ -816,6 +849,7 @@ export default {
'templateList'
]),
...mapGetters('user', [
'userInfo',
'token'
]),
...mapState('lang', [
@@ -846,6 +880,7 @@ export default {
columns.push({ name: 'last_run_ts', label: 'Last Run', width: '140' })
columns.push({ name: 'update_ts', label: 'Update Time', width: '140' })
columns.push({ name: 'create_ts', label: 'Create Time', width: '140' })
columns.push({ name: 'username', label: 'Owner', width: '100' })
columns.push({ name: 'remark', label: 'Remark', width: '140' })
return columns
},
@@ -903,7 +938,7 @@ export default {
return
}
this.$router.push(`/spiders/${res2.data.data._id}`)
await this.$store.dispatch('spider/getSpiderList')
this.getList()
this.$st.sendEv('爬虫列表', '添加爬虫', '可配置爬虫')
})
},
@@ -918,7 +953,7 @@ export default {
return
}
this.$router.push(`/spiders/${res2.data.data._id}`)
await this.$store.dispatch('spider/getSpiderList')
this.getList()
this.$st.sendEv('爬虫列表', '添加爬虫', '自定义爬虫')
})
},
@@ -1095,7 +1130,8 @@ export default {
sort_direction: this.sort.sortDirection,
keyword: this.filter.keyword,
type: this.filter.type,
project_id: this.filter.project_id
project_id: this.filter.project_id,
owner_type: this.filter.owner_type
}
await this.$store.dispatch('spider/getSpiderList', params)
@@ -1208,6 +1244,9 @@ export default {
onCrawlConfirmDialogClose () {
this.crawlConfirmDialogVisible = false
this.isMultiple = false
},
isDisabled (row) {
return row.is_public && row.username !== this.userInfo.username
}
},
async created () {

View File

@@ -205,7 +205,8 @@ export default {
{ name: 'wait_duration', label: 'Wait Duration (sec)', align: 'right' },
{ name: 'runtime_duration', label: 'Runtime Duration (sec)', align: 'right' },
{ name: 'total_duration', label: 'Total Duration (sec)', width: '80', align: 'right' },
{ name: 'result_count', label: 'Results Count', width: '80' }
{ name: 'result_count', label: 'Results Count', width: '80' },
{ name: 'username', label: 'Owner', width: '100' }
// { name: 'avg_num_results', label: 'Average Results Count per Second', width: '80' }
],