Browse Source

我的项目

old
wangqing 5 years ago
parent
commit
46fc0b67f3
  1. 14
      src/api/index.js
  2. 5
      src/components/FontIcon/index.vue
  3. 5
      src/router/modules/root.js
  4. 2
      src/utils/sign.js
  5. 2
      src/views/form/statistics.vue
  6. 4
      src/views/home/HomButton.vue
  7. 141
      src/views/home/index.vue
  8. 213
      src/views/project/MyProject.vue

14
src/api/index.js

@ -56,8 +56,20 @@ api.interceptors.request.use(
request.params = {}
}
let timestamp = new Date().getTime()
// get 请求所有参数转成string类型 用于签名计算
request.params.timestamp = '' + timestamp
let sign = signMd5Utils.getSign(request.url, request.params)
let strParams = JSON.stringify(request.params, function(key, value) {
if (key) {
if (value == undefined || value == null) {
return undefined
}
return '' + value
}
return value
})
console.log(JSON.stringify(request.params) + ':str' + strParams)
let sign = signMd5Utils.getSign(request.url, JSON.parse(strParams))
request.params.sign = sign
}
return request

5
src/components/FontIcon/index.vue

@ -15,3 +15,8 @@ export default {
}
}
</script>
<style>
i::before{
background:transparent;
}
</style>

5
src/router/modules/root.js

@ -61,6 +61,11 @@ export default [
meta: {requireLogin: true},
component: () => import(/* webpackChunkName: 'root' */ '@/views/project/create.vue')
},
{
path: 'my',
meta: {requireLogin: true},
component: () => import(/* webpackChunkName: 'root' */ '@/views/project/MyProject.vue')
},
{
path: 'form',
meta: {requireLogin: true},

2
src/utils/sign.js

@ -29,10 +29,10 @@ export default class sign {
* @returns {string} 获取签名
*/
static getSign(url, requestParams) {
let urlParams = this.parseQueryString(url)
let jsonObj = _.merge(urlParams, requestParams)
let requestBody = this.sortAsc(jsonObj)
console.log(constants.signSecret + JSON.stringify(requestBody))
return md5(constants.signSecret + JSON.stringify(requestBody)).toLowerCase()
}

2
src/views/form/statistics.vue

@ -151,7 +151,7 @@ export default {
}
},
queryProjectItems() {
this.$api.get(`/user/project/item/query/${this.projectKey}`).then(res => {
this.$api.get(`/user/project/item/list/${this.projectKey}`).then(res => {
if (res.data) {
res.data.map((item) => {
_.set(this.projectItemColumns, `field${item.formItemId}`, item.label)

4
src/views/home/HomButton.vue

@ -6,7 +6,9 @@
</el-button>
</el-col>
<el-col :span="5">
<el-button class="home-fun-btn">我的项目<i class="el-icon-s-custom" /></el-button>
<el-button class="home-fun-btn" @click="$router.push({path:'/project/my'})">
我的项目<i class="el-icon-s-custom" />
</el-button>
</el-col>
<el-col :span="5">
<el-button class="home-fun-btn">行业模板<i class="el-icon-s-management" /></el-button>

141
src/views/home/index.vue

@ -1,76 +1,78 @@
<template>
<el-container>
<el-header height="80" class="home-header-view">
<el-row type="flex" align="middle">
<el-col :span="4" :offset="1">
<img src="@/assets/images/indexLogo.png" class="header-logo-img"
@click="$router.push({path:'/'})"
>
</el-col>
<el-col :span="10">
<el-menu :default-active="menuIndex" mode="horizontal" :router="true" text-color="#205BB5"
active-text-color="#205BB5"
>
<el-menu-item v-for="(item, index) in menuRouters" :key="index" :index="item.routerPath"
:route="item.routerPath" class="menu-item"
<div>
<el-container>
<el-header height="80" class="home-header-view">
<el-row type="flex" align="middle">
<el-col :span="4" :offset="1">
<img src="@/assets/images/indexLogo.png" class="header-logo-img"
@click="$router.push({path:'/'})"
>
{{ item.title }}
</el-menu-item>
</el-menu>
</el-col>
<el-col :span="1">
<el-button round>升级</el-button>
</el-col>
<el-col :span="1">
<div style="display: flex; align-items: center; justify-content: center;">
<svg-icon name="loginWx" style="width: 24px; height: 24px;" />
</div>
</el-col>
<el-col :span="1">
<el-link href="https://element.eleme.io" target="_blank">帮助</el-link>
</el-col>
<el-col :span="3">
<el-popover
placement="bottom-end"
width="200"
trigger="click"
>
<div class="user-person-menu">
<div>
<p class="nick-name">{{ getUserInfo.name }}</p>
</div>
<div class="person-menu-divider" />
<div>
<p class="person-menu-item">
<font-icon class="fab fa-get-pocket" />
我的账户
</p>
<p class="person-menu-item">
<font-icon class="fas fa-envelope" />
站内信
</p>
<p class="person-menu-item">
<font-icon class="fas fa-user-circle" />
联系人
</p>
</el-col>
<el-col :span="10">
<el-menu :default-active="menuIndex" mode="horizontal" :router="true" text-color="#205BB5"
active-text-color="#205BB5"
>
<el-menu-item v-for="(item, index) in menuRouters" :key="index" :index="item.routerPath"
:route="item.routerPath" class="menu-item"
>
{{ item.title }}
</el-menu-item>
</el-menu>
</el-col>
<el-col :span="1">
<el-button round>升级</el-button>
</el-col>
<el-col :span="1">
<div style="display: flex; align-items: center; justify-content: center;">
<svg-icon name="loginWx" style="width: 24px; height: 24px;" />
</div>
</el-col>
<el-col :span="1">
<el-link href="https://element.eleme.io" target="_blank">帮助</el-link>
</el-col>
<el-col :span="3">
<el-popover
placement="bottom-end"
width="200"
trigger="click"
>
<div class="user-person-menu">
<div>
<p class="nick-name">{{ getUserInfo.name }}</p>
</div>
<div class="person-menu-divider" />
<p class="person-menu-item" @click="logoutHandle">
<font-icon class="fas fa-sign-out" />
退出登录
</p>
<div>
<p class="person-menu-item">
<font-icon class="fab fa-get-pocket" />
我的账户
</p>
<p class="person-menu-item">
<font-icon class="fas fa-envelope" />
站内信
</p>
<p class="person-menu-item">
<font-icon class="fas fa-user-circle" />
联系人
</p>
<div class="person-menu-divider" />
<p class="person-menu-item" @click="logoutHandle">
<font-icon class="fas fa-sign-out" />
退出登录
</p>
</div>
</div>
</div>
<div slot="reference" style="display: flex; align-items: center; justify-content: center;">
<img :src="getUserInfo.avatar" class="user-avatar">
</div>
</el-popover>
</el-col>
</el-row>
</el-header>
<el-main style="padding: 2px;">
<router-view />
</el-main>
</el-container>
<div slot="reference" style="display: flex; align-items: center; justify-content: center;">
<img :src="getUserInfo.avatar" class="user-avatar">
</div>
</el-popover>
</el-col>
</el-row>
</el-header>
<el-main class="home-main-view">
<router-view />
</el-main>
</el-container>
</div>
</template>
<script>
import store from '@/store/index.js'
@ -133,6 +135,7 @@ export default {
}
</script>
<style lang="scss" scoped>
.menu-item {
line-height: 80px;
height: 80px;

213
src/views/project/MyProject.vue

@ -0,0 +1,213 @@
<template>
<div class="my-project-container">
<div class="filter-view">
<el-row type="flex" align="middle" justify="center" style="height: 50px;">
<el-col :span="3">
<font-icon class="fas fa-th-large show-view-type-icon show-view-type-icon-active" />
<font-icon class="fas fa-th-list show-view-type-icon" />
</el-col>
<el-col :span="3">
<span class="title">项目更新时间</span>
</el-col>
<el-col :span="10">
<el-date-picker
style="width: 50%;"
type="datetime"
placeholder="选择开始时间"
/>
<el-date-picker
style="width: 50%;"
type="datetime"
placeholder="选择结束时间"
/>
</el-col>
<el-col :span="4" :offset="1">
<el-input v-model="queryParams.name" type="text" placeholder="请输入项目名称" />
</el-col>
<el-col :span="3" :offset="1">
<el-button type="primary" @click="queryProjectPage">查询</el-button>
</el-col>
<el-col :span="6">
<el-button>
<font-icon class="fas fa-plus-square" />
新建文件夹
</el-button>
<el-button>
<font-icon class="fas fa-recycle" />
回收站
</el-button>
</el-col>
</el-row>
<el-row type="flex" align="middle" justify="center" style="height: 50px;">
<el-col :span="2" :offset="3">
<span class="title">项目状态</span>
</el-col>
<el-col :span="6">
<el-radio-group v-model="queryParams.status" size="small" @change="queryProjectPage">
<el-radio-button v-for="status in projectStatusList" :key="status.code" :label="status.code">
{{ status.name }}
</el-radio-button>
</el-radio-group>
</el-col>
<el-col :span="13" />
</el-row>
</div>
<div class="project-grid-view">
<el-row>
<el-col v-for="p in projectList" :key="p.id" class="project-grid-item-view" :span="4">
<span v-for="status in projectStatusList" :key="status.code">
<span
v-if="status.code==p.status"
:style="{backgroundColor:status.color,borderColor:status.color}"
class="project-grid-view-status"
/>
</span>
<p>
{{ p.name }}
</p>
<img class="project-grid-view-preimg"
src="https://freebrio.oss-cn-shanghai.aliyuncs.com/t/pic%20(1).png"
>
<p class="project-grid-view-time">创建时间2020/12/8</p>
</el-col>
</el-row>
</div>
<div class="project-page-view">
<el-pagination
v-if="total>10"
background
:page-size.sync="queryParams.size"
:current-page.sync="queryParams.current"
layout="prev, pager, next"
:total="total"
@current-change="queryProjectPage"
/>
</div>
</div>
</template>
<script>
let projectStatusList = [
{code: 1, name: '未发布', color: '#006EFF'},
{code: 2, name: '收集中', color: '#34C82A'},
{code: 4, name: '已结束', color: '#955A45'}
]
export default {
name: 'MyProject',
components: {},
data() {
return {
total: 0,
queryParams: {
current: 1,
size: 10,
name: '',
status: null
},
projectStatusList: projectStatusList,
projectList: []
}
},
computed: {},
created() {
this.queryProjectPage()
},
methods: {
getStatusColorClass(code) {
let color = this.projectStatusList.find(item => item.code = code).color
return {
backgroundColor: color,
borderColor: color
}
},
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
})
}
}
}
</script>
<style scoped>
.my-project-container {
margin: 0;
padding: 0;
width: 100%;
height: 80vh;
overflow-x: hidden !important;
display: flex;
flex-direction: column;
align-items: center;
}
.filter-view {
margin-top: 40px;
width: 60%;
}
.title {
color: rgba(16, 16, 16, 100);
font-size: 14px;
text-align: left;
line-height: 20px;
}
.show-view-type-icon {
width: 20px;
height: 20px;
color: #a8a8a8;
font-size: 20px;
margin: 5px;
}
.show-view-type-icon-active {
color: rgba(92, 155, 249, 100);
}
.project-grid-view {
margin-top: 20px;
width: 60%;
}
.project-grid-item-view {
width: 169px;
height: 199px;
line-height: 20px;
border-radius: 4px;
background-color: rgba(255, 255, 255, 100);
text-align: center;
box-shadow: 0 3px 6px 3px rgba(0, 0, 0, 0.12);
border: 1px solid rgba(255, 255, 255, 100);
margin: 10px;
position: relative;
}
.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: 80px;
position: absolute;
left: 10px;
top: 20px;
}
.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: left;
margin: 0;
}
.project-page-view {
margin-top: 30px;
}
</style>
Loading…
Cancel
Save