You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

423 lines
38 KiB

5 years ago
<template>
<div class="my-project-container">
<div class="filter-view">
5 years ago
<div>
<span @click="switchDataShowTypeHandle('gird')">
<font-icon
:class="{'show-view-type-icon-active':dataShowType=='gird'}"
4 years ago
class="fas fa-th-large show-view-type-icon "
5 years ago
/>
</span>
<span @click="switchDataShowTypeHandle('table')">
<font-icon
:class="{'show-view-type-icon-active':dataShowType=='table'}"
4 years ago
class="fas fa-th-list show-view-type-icon"
5 years ago
/>
</span>
</div>
<el-form ref="form" label-width="100px">
<el-form-item label="项目更新时间">
5 years ago
<el-date-picker
5 years ago
v-model="queryParams.beginDateTime"
4 years ago
placeholder="选择开始时间"
5 years ago
style="width: 20%;"
5 years ago
type="datetime"
4 years ago
value-format="yyyy-MM-dd HH:mm:ss"
5 years ago
/>
5 years ago
5 years ago
<el-date-picker
5 years ago
v-model="queryParams.endDateTime"
4 years ago
:default-time="'23:59:59'"
placeholder="选择结束时间"
5 years ago
style="width: 20%;"
5 years ago
type="datetime"
5 years ago
value-format="yyyy-MM-dd HH:mm:ss"
5 years ago
/>
5 years ago
<el-input
v-model="queryParams.name"
4 years ago
placeholder="请输入项目名称" style="width: 20%; margin-left: 20px;" type="text"
5 years ago
/>
4 years ago
<el-button class="ml-20" type="primary" @click="queryProjectPage">查询</el-button>
5 years ago
</el-form-item>
<el-form-item label="项目状态">
5 years ago
<el-radio-group v-model="queryParams.status" size="small" @change="()=>{
this.queryParams.current=0
this.queryProjectPage()
}"
>
5 years ago
<el-radio-button v-for="status in projectStatusList" :key="status.code" :label="status.code">
{{ status.name }}
</el-radio-button>
</el-radio-group>
5 years ago
</el-form-item>
</el-form>
5 years ago
</div>
5 years ago
<div v-if="dataShowType=='gird'" class="project-grid-container">
<div
5 years ago
v-if="projectList.length"
v-loading="projectListLoading"
5 years ago
class="project-grid-view"
>
5 years ago
<div v-for="p in projectList" :key="p.id" class="project-grid-item-view pointer">
4 years ago
<el-row align="middle" justify="center" type="flex">
<el-col :span="5">
<span
:style="getStatusColorStyle(p.status)"
class="project-grid-view-status"
/>
</el-col>
<el-col :span="19">
<el-tooltip :content="p.name" placement="top">
<p class="project-title">
{{ p.name }}
</p>
</el-tooltip>
</el-col>
</el-row>
5 years ago
<img class="project-grid-view-preimg"
4 years ago
src="data:image/png;base64,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
5 years ago
>
<p class="project-grid-view-time">创建时间{{ p.createdTime | formatDate }}</p>
<div class="gird-operating-btns">
4 years ago
<el-button type="text" @click="toProjectHandle(p.key,'editor')">
<i class="el-icon-edit" />
编辑
</el-button>
<span>
<el-button
4 years ago
v-if="p.status!=1" type="text" @click="toProjectHandle(p.key,'statistics')"
>
<i class="el-icon-data-analysis" />
统计
</el-button>
</span>
<el-popconfirm
v-if="p.status==2"
title="确定停止收集该项目吗?"
@confirm="stopProject(p.key)"
5 years ago
>
<el-button slot="reference"
class="pink-text-btn"
type="text"
>
<i class="el-icon-video-pause" />
停止
</el-button>
</el-popconfirm>
<el-popconfirm
v-if="p.status!=2"
title="确定删除该项目吗?"
@confirm="deleteProject(p.key)"
>
<el-button slot="reference"
class="pink-text-btn"
type="text"
>
<i class="el-icon-delete" />
删除
</el-button>
</el-popconfirm>
</div>
5 years ago
</div>
</div>
4 years ago
<div v-if="!projectListLoading&&projectList.length==0">
5 years ago
<data-empty />
</div>
5 years ago
</div>
<div v-if="dataShowType=='table'" class="project-table-view">
<el-table
:data="projectList"
border
4 years ago
empty-text="暂无数据"
5 years ago
highlight-current-row
4 years ago
stripe
5 years ago
style="width: 100%;"
>
<el-table-column
align="center"
label="标题"
4 years ago
prop="name"
show-overflow-tooltip
5 years ago
/>
<el-table-column
align="center"
label="描述"
4 years ago
prop="describe"
show-overflow-tooltip
5 years ago
/>
<el-table-column
align="center"
label="状态"
>
<template slot-scope="scope">
<span v-for="status in projectStatusList" :key="status.code">
<span
v-if="status.code==scope.row.status"
>
{{ status.name }}
</span>
</span>
</template>
</el-table-column>
<el-table-column
align="center"
label="创建时间"
prop="createdTime"
5 years ago
/>
<el-table-column
align="center"
label="更新时间"
prop="updatedTime"
5 years ago
/>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="text"
4 years ago
@click="toProjectHandle(scope.row.key,'editor')"
5 years ago
>
编辑
</el-button>
<span>
<el-button
v-if="scope.row.status!=1"
class="green-text-btn"
4 years ago
type="text"
4 years ago
@click="toProjectHandle(scope.row.key,'statistics')"
>
统计
</el-button>
</span>
<el-popconfirm
v-if="scope.row.status==2"
title="确定停止收集该项目吗?"
@confirm="stopProject(scope.row.key)"
5 years ago
>
<el-button slot="reference"
class="pink-text-btn"
type="text"
>
停止
</el-button>
</el-popconfirm>
<el-popconfirm
v-if="scope.row.status!=2"
title="确定删除该项目吗?"
@confirm="deleteProject(scope.row.key)"
>
<el-button slot="reference"
class="pink-text-btn"
type="text"
>
删除
</el-button>
</el-popconfirm>
5 years ago
</template>
</el-table-column>
</el-table>
5 years ago
</div>
<div class="project-page-view">
<el-pagination
v-if="total>10"
:current-page.sync="queryParams.current"
4 years ago
:page-size.sync="queryParams.size"
5 years ago
:total="total"
4 years ago
background
layout="total, prev, pager, next"
5 years ago
@current-change="queryProjectPage"
/>
</div>
</div>
</template>
<script>
import dayjs from 'dayjs'
5 years ago
let projectStatusList = [
{code: 1, name: '未发布', color: '#006EFF'},
{code: 2, name: '收集中', color: '#34C82A'},
{code: 3, name: '已结束', color: '#955A45'}
5 years ago
]
export default {
name: 'MyProject',
filters: {
formatDate(time) {
4 years ago
return dayjs(time).format('YYYY/MM/DD')
}
},
5 years ago
data() {
return {
5 years ago
dataShowType: 'gird',
5 years ago
total: 0,
queryParams: {
current: 1,
size: 10,
name: '',
5 years ago
beginDateTime: null,
endDateTime: null,
5 years ago
status: null
},
projectStatusList: projectStatusList,
projectList: [],
projectListLoading: true
5 years ago
}
},
computed: {
getStatusColorStyle() {
return function(code) {
let color = this.projectStatusList.find(item => item.code == code).color
return {
backgroundColor: color,
borderColor: color
}
}
}
},
5 years ago
created() {
this.queryProjectPage()
},
methods: {
5 years ago
switchDataShowTypeHandle(type) {
this.dataShowType = type
},
5 years ago
toProjectHandle(key, type) {
this.$router.push({path: `/project/form/${type}`, query: {key: key, active: type}})
5 years ago
},
deleteProject(key) {
this.$api.post('/user/project/delete', {'key': key}).then(res => {
if (res.data) {
this.msgSuccess('刪除成功')
this.queryProjectPage()
}
})
},
stopProject(key) {
this.$api.post('/user/project/stop', {'key': key}).then(res => {
if (res.data) {
this.msgSuccess('停止成功')
this.queryProjectPage()
}
})
},
5 years ago
queryProjectPage() {
this.$api.get('/user/project/page', {
params: this.queryParams
}).then(res => {
let {records, total, size} = res.data
this.projectList = records
this.total = total
this.queryParams.size = size
this.projectListLoading = false
5 years ago
})
}
}
}
</script>
<style lang="scss" scoped>
5 years ago
.my-project-container {
display: flex;
5 years ago
width: 100%;
5 years ago
height: 100%;
5 years ago
flex-direction: column;
align-items: center;
5 years ago
align-content: center;
5 years ago
}
.back-view {
display: flex;
width: 80%;
align-content: flex-start;
margin: 10px;
5 years ago
}
.filter-view {
5 years ago
margin-top: 20px;
5 years ago
display: flex;
flex-direction: row;
5 years ago
}
.show-view-type-icon {
color: white;
font-size: 18px;
-webkit-text-stroke: 0.5px #a8a8a8;
5 years ago
margin: 5px;
5 years ago
cursor: pointer;
5 years ago
}
.show-view-type-icon-active {
color: rgba(92, 155, 249, 100);
-webkit-text-stroke: 0.5px rgba(92, 155, 249, 100);
5 years ago
}
5 years ago
.project-grid-container {
5 years ago
margin-top: 20px;
5 years ago
display: flex;
width: 100%;
justify-content: center;
}
.project-grid-view {
display: flex;
width: 950px;
5 years ago
flex-direction: row;
flex-wrap: wrap;
}
.project-table-view {
margin-top: 20px;
width: 80%;
5 years ago
}
.project-grid-item-view {
width: 169px;
height: 199px;
line-height: 20px;
border-radius: 4px;
background-color: rgba(255, 255, 255, 100);
text-align: center;
margin: 10px;
position: relative;
4 years ago
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
.project-title {
color: rgba(16, 16, 16, 100);
font-size: 14px;
text-align: left;
line-height: 20px;
max-height: 20px;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.project-grid-view-status {
display: inline-block;
width: 7px;
height: 7px;
line-height: 20px;
background-color: rgba(0, 110, 255, 100);
text-align: center;
border: 1px solid rgba(0, 110, 255, 100);
border-radius: 20px;
}
5 years ago
}
.gird-operating-btns {
5 years ago
position: absolute;
width: 100%;
margin: 0;
padding: 0;
background-color: #f0f0f0;
bottom: 0;
display: none;
border: none;
}
.project-grid-item-view:hover .gird-operating-btns {
display: block;
5 years ago
}
.project-grid-view-preimg {
width: 143px;
height: 121px;
}
.project-grid-view-time {
color: rgba(144, 147, 153, 100);
font-size: 12px;
line-height: 20px;
text-align: center;
5 years ago
margin: 0;
}
.project-page-view {
margin-top: 30px;
}
</style>