Browse Source

完善部分功能

old
wangqing 5 years ago
parent
commit
f440c5b67f
  1. 1
      package.json
  2. 1
      public/index.html
  3. 8
      src/components/parser/Parser.vue
  4. 5
      src/router/modules/root.js
  5. 7
      src/utils/convert.js
  6. 200
      src/views/account/member.vue
  7. 15
      src/views/form/ProjectForm.vue
  8. 15
      src/views/home/index.vue
  9. 21
      src/views/official/index.vue
  10. 14
      yarn.lock

1
package.json

@ -22,6 +22,7 @@
"nprogress": "^0.2.0",
"vue": "^2.6.12",
"vue-clipboard2": "^0.3.1",
"vue-image-crop-upload": "^2.5.0",
"vue-meta": "^2.4.0",
"vue-qr": "^2.3.0",
"vue-router": "^3.4.8",

1
public/index.html

@ -3,7 +3,6 @@
<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, maximum-scale=1.0, user-scalable=no"/>-->
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
<% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>

8
src/components/parser/Parser.vue

@ -31,12 +31,7 @@ const layouts = {
if (config.showLabel === false) labelWidth = '0'
let label = config.label
if (formConfCopy.showNumber) {
this.serialNumber = this.serialNumber + 1
label = serialNumber + ': ' + label
}
//
if (config.tag === 'el-upload') {
scheme.action = scheme.action + this.formConf.projectKey
label = scheme.serialNumber + ': ' + label
}
return (
<el-col span={config.span}>
@ -238,7 +233,6 @@ export default {
},
data() {
const data = {
// serialNumber: 1,//
formConfCopy: deepClone(this.formConf),
[this.formConf.formModel]: {},
[this.formConf.labelFormModel]: {},

5
src/router/modules/root.js

@ -54,6 +54,11 @@ export default [
path: '/',
meta: {requireLogin: true},
component: () => import(/* webpackChunkName: 'root' */ '@/views/home/HomeView')
},
{
path: 'member',
meta: {requireLogin: true},
component: () => import(/* webpackChunkName: 'root' */ '@/views/account/member')
}
]
}, {

7
src/utils/convert.js

@ -16,6 +16,7 @@ export function formItemConvertData(item, projectKey) {
'required': item.__config__.required,
'placeholder': item.placeholder,
'regList': item.__config__.regList,
'showLabel': item.__config__.showLabel,
'projectKey': projectKey
}
let expand = {}
@ -58,6 +59,7 @@ export function dbDataConvertForItemJson(data) {
jsonItem.__config__.label = data.label
jsonItem.__config__.required = data.required
jsonItem.__config__.regList = data.regList
jsonItem.__config__.showLabel = data.showLabel
if (data.defaultValue) {
if (data.defaultValue.json) {
jsonItem.__config__.defaultValue = JSON.parse(data.defaultValue.value)
@ -65,7 +67,10 @@ export function dbDataConvertForItemJson(data) {
jsonItem.__config__.defaultValue = data.defaultValue.value
}
}
//不同项目地址区分
if (jsonItem.tag === 'el-upload') {
jsonItem.action = jsonItem.action + data.projectKey
}
jsonItem.regList = data.regList
jsonItem.placeholder = data.placeholder
jsonItem.__vModel__ = 'field' + data.formItemId

200
src/views/account/member.vue

@ -0,0 +1,200 @@
<template>
<div class="member-container">
<el-card class="member-box-card">
<div class="member-info-view">
<p class="title pl-5">账号信息</p>
<el-divider />
<div v-if="userInfo" class="account-info-view">
<table>
<tbody>
<tr>
<td width="80" style="text-align: right;">用户名</td>
<td>
{{ userInfo.name }}
<el-link type="primary" @click="editDialogVisible=true">修改</el-link>
</td>
</tr>
<tr>
<td width="80" style="text-align: right;">账号邮箱</td>
<td>
{{ userInfo.email }}
<el-link type="primary">绑定</el-link>
</td>
</tr>
<tr>
<td width="80" style="text-align: right;">密码</td>
<td>
******
<el-link type="primary">修改</el-link>
</td>
</tr>
<tr>
<td width="80" style="text-align: right;">手机号</td>
<td>
{{ userInfo.phoneNumber }}
<el-link type="primary">修改</el-link>
</td>
</tr>
</tbody>
</table>
<div class="account-avatar-view">
<my-upload v-model="showUploadAvatar"
field="file"
:width="300"
:height="300"
:url="getUploadUrl()"
:headers="getUploadHeader()"
img-format="png"
@crop-upload-success="cropUploadSuccess"
/>
<el-avatar
style="width: 100px; height: 100px;"
:src="userInfo.avatar"
@click.native="showUploadAvatar=true"
/>
<div style="margin-left: 10px; margin-top: 5px;">
<el-button @click.native="showUploadAvatar=true">更换头像</el-button>
</div>
</div>
</div>
<p class="title pl-5">第三方账号</p>
<el-divider />
<div v-if="userInfo" class="account-info-view">
<table>
<tbody>
<tr>
<td width="80" style="text-align: right;">smile</td>
<td>
{{ userInfo.name }}
<el-link type="primary" @click="editDialogVisible=true">修改</el-link>
</td>
</tr>
<tr>
<td width="80" style="text-align: right;">smile</td>
<td>
{{ userInfo.name }}
<el-link type="primary" @click="editDialogVisible=true">修改</el-link>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</el-card>
<el-dialog
title="提示"
:visible.sync="editDialogVisible"
width="30%"
center
>
<el-form ref="form" :model="userInfo" label-width="80px">
<el-form-item label="新用户名">
<el-input v-model="userInfo.name" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editDialogVisible = false"> </el-button>
<el-button type="primary"
@click="()=>{this.editDialogVisible = false;this.updateUserHandle()}"
> </el-button>
</span>
</el-dialog>
<el-dialog
title="提示"
:visible.sync="pwdDialogVisible"
width="30%"
center
>
<el-form ref="form" :model="userInfo" label-width="80px">
<el-form-item label="新用户名">
<el-input v-model="userInfo.name" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="pwdDialogVisible = false"> </el-button>
<el-button type="primary"
@click="()=>{this.pwdDialogVisible = false;this.updateUserHandle()}"
> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import myUpload from 'vue-image-crop-upload'
export default {
name: 'Member',
components: {
myUpload
},
data() {
return {
editDialogVisible: false,
userInfo: {},
showUploadAvatar: false
}
},
created() {
this.$api.get('/user/current/detail').then(res => {
if (res.data) {
this.userInfo = res.data
}
})
},
methods: {
getUploadHeader() {
return {
'token': this.$store.getters['user/isLogin']
}
},
getUploadUrl() {
return `${process.env.VUE_APP_API_ROOT}/user/file/upload`
},
updateUserHandle() {
this.$api.post('/user/update', this.userInfo).then(res => {
if (res.data) {
console.log(res.data)
this.msgSuccess('保存成功')
}
})
},
cropUploadSuccess(res) {
console.log(res)
this.userInfo.avatar = res.data
this.updateUserHandle()
}
}
}
</script>
<style lang="scss" scoped>
.member-container {
display: flex;
align-content: center;
justify-content: center;
}
.title {
font-size: 16px;
}
.member-box-card {
margin-top: 20px;
width: 900px;
table {
color: #666;
font-size: 14px;
}
table tr {
line-height: 30px;
}
}
.account-info-view {
padding: 10px;
display: flex;
justify-content: space-between;
}
.account-avatar-view {
width: 180px;
}
</style>

15
src/views/form/ProjectForm.vue

@ -51,7 +51,7 @@ export default {
},
data() {
return {
startParser:false,
startParser: false,
projectTheme: {
headImgUrl: '',
logoImg: '',
@ -60,7 +60,7 @@ export default {
},
formConf: {
fields: [],
projectKey:'',
projectKey: '',
__methods__: {},
formRef: 'elForm',
formModel: 'formData',
@ -98,10 +98,14 @@ export default {
this.formConf.size = window.innerWidth < 480 ? 'medium' : 'small'
},
mounted() {
this.$api.get(`/user/project/details/${this.formConf.projectKey }`).then(res => {
this.$api.get(`/user/project/details/${this.formConf.projectKey}`).then(res => {
if (res.data) {
let serialNumber = 1
let fields = res.data.projectItems.map(item => {
return dbDataConvertForItemJson(item)
let projectItem = dbDataConvertForItemJson(item)
projectItem.serialNumber = serialNumber
serialNumber++
return projectItem
})
this.formConf.fields = fields
this.formConf.title = res.data.project.name
@ -120,7 +124,7 @@ export default {
this.formConf.submitBtnColor = btnsColor
}
}
this.startParser=true
this.startParser = true
}
})
@ -184,6 +188,7 @@ export default {
width: 80%;
}
}
@media screen and (max-width: 500px) {
.el-message {
min-width: 300px !important;

15
src/views/home/index.vue

@ -2,7 +2,7 @@
<div>
<el-container>
<el-header height="92" class="home-header-view">
<el-row type="flex" align="middle">
<el-row type="flex" align="middle" justify="center">
<el-col :span="4" :offset="1">
<img src="@/assets/images/indexLogo.png" class="header-logo-img"
@click="$router.push({path:'/'})"
@ -23,7 +23,10 @@
<el-button round>升级</el-button>
</el-col>
<el-col :span="1">
<div style="display: flex; align-items: center; justify-content: center;">
<div style="display: flex;
align-items: center;
justify-content: center;"
>
<svg-icon name="loginWx" style="width: 24px; height: 24px;" />
</div>
</el-col>
@ -42,7 +45,7 @@
</div>
<div class="person-menu-divider" />
<div>
<p class="person-menu-item">
<p class="person-menu-item" @click="$router.push({path: '/home/member'})">
<font-icon class="fab fa-get-pocket" />
我的账户
</p>
@ -157,13 +160,14 @@ export default {
.home-header-view {
line-height: 92px;
height: 92px;
min-width: 960px;
background-color: rgba(255, 255, 255, 100);
color: rgba(16, 16, 16, 100);
font-size: 14px;
text-align: center;
.header-logo-img {
width: 225px;
height: 62px;
width: 90%;
height: 90%;
float: left;
}
}
@ -182,6 +186,7 @@ export default {
}
.person-menu-item:hover {
cursor: pointer;
color: rgba(32, 91, 181, 100);
}
.person-menu-divider {
background-color: rgba(210, 210, 210, 78);

21
src/views/official/index.vue

@ -2,15 +2,17 @@
<div class="official-container">
<div class="header-container">
<el-row type="flex" align="middle">
<el-col class="header-col" :span="3" :offset="3">
<el-col class="header-col" :span="3" :offset="2">
<div>
<img src="@/assets/images/indexLogo.png" class="header-logo"
@click="$router.push({path:'/home'})"
>
</div>
</el-col>
<el-col class="header-col" :span="10" :offset="3">
<el-menu :default-active="menuIndex" mode="horizontal" :router="true" text-color="#205BB5"
<el-col class="header-col" :span="12" :offset="2">
<el-menu :default-active="menuIndex" mode="horizontal"
style="width: 100%;"
:router="true" text-color="#205BB5"
active-text-color="#205BB5"
>
<el-menu-item v-for="(item, index) in menuRouters" :key="index" :index="item.routerPath"
@ -44,6 +46,10 @@ export default {
return {
menuIndex: null,
menuRouters: [
{
routerPath: '/',
title: '首页'
},
{
routerPath: '/proposal',
title: '提出建议'
@ -55,11 +61,8 @@ export default {
{
routerPath: '/enterprise',
title: '企业部署'
},
{
routerPath: '/',
title: '首页'
}
]
}
},
@ -90,6 +93,7 @@ export default {
.header-container {
background-color: white;
width: 100%;
min-width: 960px;
top: 0;
z-index: 100;
}
@ -100,16 +104,15 @@ export default {
border: none;
}
.header-logo {
float: left;
cursor: pointer;
height: 60px;
float: left;
}
.menu-item {
line-height: 90px;
height: 90px;
font-size: 18px;
font-weight: 900;
float: right;
}
.header-btn {
margin: 35px 0 35px 20px;

14
yarn.lock

@ -2373,7 +2373,7 @@ babel-plugin-dynamic-import-node@^2.3.3:
dependencies:
object.assign "^4.1.0"
babel-runtime@6.x:
babel-runtime@6.x, babel-runtime@^6.11.6:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
@ -6354,11 +6354,6 @@ js-cookie@^2.2.1:
resolved "https://registry.npm.taobao.org/js-cookie/download/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8"
integrity sha1-aeEG3F1YBolFYpAqpbrsN0Tpsrg=
js-md5@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/js-md5/-/js-md5-0.7.3.tgz#b4f2fbb0b327455f598d6727e38ec272cd09c3f2"
integrity sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==
js-message@1.0.5:
version "1.0.5"
resolved "https://registry.npm.taobao.org/js-message/download/js-message-1.0.5.tgz#2300d24b1af08e89dd095bc1a4c9c9cfcb892d15"
@ -11038,6 +11033,13 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=
vue-image-crop-upload@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/vue-image-crop-upload/-/vue-image-crop-upload-2.5.0.tgz#2dcf499e5b4944bc5077fc30b5f24d5e977f313c"
integrity sha512-AV+ZwPuaZ8tKdSopaSOCk4v0JqKZjFu6uLQg5D06pzt2GLcIR8NgrFz+/S0YN25RgkC4vHvUr9+XcNSUTk28ng==
dependencies:
babel-runtime "^6.11.6"
"vue-loader-v16@npm:vue-loader@^16.0.0-beta.7":
version "16.0.0-beta.8"
resolved "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.8.tgz#1f523d9fea8e8c6e4f5bb99fd768165af5845879"

Loading…
Cancel
Save