Browse Source

ui更改

old
wangqing 4 years ago
parent
commit
559721bc55
  1. 1
      src/components/Form/ImageSelect/index.vue
  2. 58
      src/components/Form/ImageSelect1/index.vue
  3. 2
      src/components/Form/index.js
  4. 29
      src/components/generator/config.js
  5. 3
      src/components/parser/Parser.vue
  6. 2
      src/router/modules/form.js
  7. 22
      src/router/modules/root.js
  8. 34
      src/store/modules/form.js
  9. 7
      src/views/form/PreView.vue
  10. 15
      src/views/form/editor.vue
  11. 5
      src/views/form/logic.vue
  12. 102
      src/views/form/newIndex.vue
  13. 5
      src/views/form/publish.vue
  14. 4
      src/views/form/setting.vue
  15. 7
      src/views/form/statistics.vue
  16. 13
      src/views/home/NewIndex.vue
  17. 7
      src/views/test.vue

1
src/components/Form/ImageSelect/index.vue

@ -52,6 +52,7 @@ export default {
methods: { methods: {
onChange(e) { onChange(e) {
console.log(e) console.log(e)
console.log(JSON.stringify(this.options))
this.$emit('change', e) this.$emit('change', e)
} }
} }

58
src/components/Form/ImageSelect1/index.vue

@ -0,0 +1,58 @@
<script>
import Emitter from 'element-ui/src/mixins/emitter'
export default {
name: 'ImageSelect1',
componentName: 'ImageSelect1',
mixins: [Emitter],
inject: {
elFormItem: {
default: ''
}
},
props: {
value: {},
options: Array,
disabled: Boolean,
min: Number,
max: Number,
size: String,
fill: String,
textColor: String
},
computed: {
_elFormItemSize() {
return (this.elFormItem || {}).elFormItemSize
},
checkboxGroupSize() {
return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size
}
},
watch: {
value(value) {
this.dispatch('ElFormItem', 'el.form.change', [value])
}
}
}
</script>
<template>
<div class="el-checkbox-group" role="group" aria-label="checkbox-group">
<div v-for="option in options" :key="option.value" class="img-radio-item">
<el-image
class="image"
:src="option.image"
fit="scale-down"
:preview-src-list="[option.image]"
/>
<el-radio :label="option.value">{{ option.label }}</el-radio>
</div>
</div>
</template>

2
src/components/Form/index.js

@ -1,8 +1,10 @@
const ImageSelect = require('./ImageSelect/index').default const ImageSelect = require('./ImageSelect/index').default
const ImageSelect1 = require('./ImageSelect1/index').default
const DescText = require('./DescText/index').default const DescText = require('./DescText/index').default
export default { export default {
install: Vue => { install: Vue => {
Vue.component(ImageSelect.name, ImageSelect) Vue.component(ImageSelect.name, ImageSelect)
Vue.component(ImageSelect1.name, ImageSelect1)
Vue.component(DescText.name, DescText) Vue.component(DescText.name, DescText)
} }
} }

29
src/components/generator/config.js

@ -539,6 +539,35 @@ export const imageComponents = [
src: '', src: '',
fit: 'contain', fit: 'contain',
alt: '' alt: ''
},
{
typeId: 'IMAGE',
__config__: {
label: '图片选择',
showLabel: false,
labelWidth: null,
defaultValue: 1,
showDefaultValue: false,
showRequired: false,
showClearable: false,
showRegList: false,
tag: 'image-select',
tagIcon: 'image',
layout: 'colFormItem',
span: 24,
required: true,
regList: [],
changeTag: true
},
multiple: false,
options: [{
label: '选项2',
value: 1
}, {
label: '选项二',
value: 2
}],
style: {width: '100%'}
} }
] ]

3
src/components/parser/Parser.vue

@ -85,7 +85,8 @@ function renderFrom(h) {
) )
} }
function formBtns() { // eslint-disable-next-line no-unused-vars
function formBtns(h) {
const {formConfCopy} = this const {formConfCopy} = this
let style = { let style = {
'background-color': formConfCopy.submitBtnColor, 'background-color': formConfCopy.submitBtnColor,

2
src/router/modules/form.js

@ -1,6 +1,6 @@
export default [ export default [
{ {
path: '/form1', path: '/project/form',
meta: {requireLogin: false}, meta: {requireLogin: false},
component: () => import(/* webpackChunkName: 'root' */ '@/views/form/newIndex.vue'), component: () => import(/* webpackChunkName: 'root' */ '@/views/form/newIndex.vue'),
children: [ children: [

22
src/router/modules/root.js

@ -51,15 +51,15 @@ export default [
} }
] ]
}, },
{ // {
path: '/home1', // path: '/home1',
meta: {requireLogin: false}, // meta: {requireLogin: false},
component: () => import(/* webpackChunkName: 'root' */ '@/views/home/NewIndex') // component: () => import(/* webpackChunkName: 'root' */ '@/views/home/NewIndex')
}, // },
{ {
path: '/home', path: '/home',
meta: {requireLogin: true}, meta: {requireLogin: true},
component: () => import(/* webpackChunkName: 'root' */ '@/views/home/index.vue'), component: () => import(/* webpackChunkName: 'root' */ '@/views/home/NewIndex'),
children: [ children: [
{ {
path: '/', path: '/',
@ -96,12 +96,12 @@ export default [
path: 'template/preview', path: 'template/preview',
meta: {requireLogin: true}, meta: {requireLogin: true},
component: () => import(/* webpackChunkName: 'root' */ '@/views/project/TemplatePreview.vue') component: () => import(/* webpackChunkName: 'root' */ '@/views/project/TemplatePreview.vue')
},
{
path: 'form',
meta: {requireLogin: true},
component: () => import(/* webpackChunkName: 'root' */ '@/views/form/index.vue')
} }
// {
// path: 'form',
// meta: {requireLogin: true},
// component: () => import(/* webpackChunkName: 'root' */ '@/views/form/index.vue')
// }
] ]
}, { }, {
path: '/project/preview', path: '/project/preview',

34
src/store/modules/form.js

@ -0,0 +1,34 @@
const state = {
// 是否折叠
isCollapse: false
}
const getters = {
isCollapse: state => {
return state.isCollapse
}
}
const actions = {
setIsCollapse(context, payload) {
return new Promise(resolve => {
// 模拟登录成功,写入 token 信息
context.commit('setIsCollapse', payload)
resolve()
})
}
}
const mutations = {
setIsCollapse(state, status) {
state.isCollapse = status
}
}
export default {
namespaced: true,
state,
actions,
getters,
mutations
}

7
src/views/form/PreView.vue

@ -40,11 +40,9 @@ export default {
components: { components: {
ProjectForm ProjectForm
}, },
props: {
projectKey: null
},
data() { data() {
return { return {
projectKey: null,
mobilePreviewUrl: '', mobilePreviewUrl: '',
projectConfig: { projectConfig: {
projectKey: '', projectKey: '',
@ -53,6 +51,7 @@ export default {
} }
}, },
mounted() { mounted() {
this.projectKey = this.$route.query.key
let url = window.location.protocol + '//' + window.location.host let url = window.location.protocol + '//' + window.location.host
this.mobilePreviewUrl = `${url}/project/view?key=${this.projectKey}` this.mobilePreviewUrl = `${url}/project/view?key=${this.projectKey}`
this.$set(this.projectConfig, 'projectKey', this.projectKey) this.$set(this.projectConfig, 'projectKey', this.projectKey)
@ -64,7 +63,7 @@ export default {
.preview-container { .preview-container {
margin: 0; margin: 0;
padding: 0; padding-top: 30px;
background-color: #f7f7f7; background-color: #f7f7f7;
} }
/deep/ .el-tabs__header { /deep/ .el-tabs__header {

15
src/views/form/editor.vue

@ -5,7 +5,7 @@
<div class="components-list"> <div class="components-list">
<div v-for="(item, listIndex) in leftComponents" :key="listIndex"> <div v-for="(item, listIndex) in leftComponents" :key="listIndex">
<div class="components-title"> <div class="components-title">
<svg-icon name="component"/> <svg-icon name="component" />
{{ item.title }} {{ item.title }}
</div> </div>
<draggable <draggable
@ -24,7 +24,7 @@
@click="addComponent(element)" @click="addComponent(element)"
> >
<div class="components-body"> <div class="components-body">
<svg-icon :name="element.__config__.tagIcon"/> <svg-icon :name="element.__config__.tagIcon" />
{{ element.__config__.label }} {{ element.__config__.label }}
</div> </div>
</div> </div>
@ -64,7 +64,7 @@
<!-- </p>--> <!-- </p>-->
</el-col> </el-col>
</el-row> </el-row>
<el-divider/> <el-divider />
<el-form <el-form
:disabled="formConf.disabled" :disabled="formConf.disabled"
:label-position="formConf.labelPosition" :label-position="formConf.labelPosition"
@ -128,11 +128,9 @@ export default {
RightPanel, RightPanel,
DraggableItem DraggableItem
}, },
props: {
projectKey: null
},
data() { data() {
return { return {
idGlobal, idGlobal,
formConf: null, formConf: null,
editDescription: true, editDescription: true,
@ -149,6 +147,7 @@ export default {
activeData: drawingDefalut ? drawingDefalut[0] : null, activeData: drawingDefalut ? drawingDefalut[0] : null,
saveDrawingListDebounce: debounce(340, saveDrawingList), saveDrawingListDebounce: debounce(340, saveDrawingList),
saveIdGlobalDebounce: debounce(340, saveIdGlobal), saveIdGlobalDebounce: debounce(340, saveIdGlobal),
projectKey: null,
leftComponents: [ leftComponents: [
{ {
title: '输入型组件', title: '输入型组件',
@ -204,11 +203,11 @@ export default {
// //
this.formConf = JSON.parse(JSON.stringify(formConf)) this.formConf = JSON.parse(JSON.stringify(formConf))
// key // key
let projectKey = this.projectKey this.projectKey = this.$route.query.key
// //
this.queryProjectItems() this.queryProjectItems()
// //
this.$api.get(`/user/project/${projectKey}`).then(res => { this.$api.get(`/user/project/${this.projectKey}`).then(res => {
this.formConf.title = res.data.name this.formConf.title = res.data.name
this.formConf.description = res.data.describe this.formConf.description = res.data.describe
}) })

5
src/views/form/logic.vue

@ -134,11 +134,9 @@ import {jsonSimpleClone} from '@/utils/index'
export default { export default {
name: 'ProjectLogic', name: 'ProjectLogic',
components: {}, components: {},
props: {
projectKey: null
},
data() { data() {
return { return {
projectKey: '',
// //
defaultLogicItem: { defaultLogicItem: {
formItemId: null, formItemId: null,
@ -198,6 +196,7 @@ export default {
} }
}, },
mounted() { mounted() {
this.projectKey = this.$route.query.key
this.queryProjectItems() this.queryProjectItems()
this.queryProjectLogics() this.queryProjectLogics()
}, },

102
src/views/form/newIndex.vue

@ -2,8 +2,8 @@
<div class="form-index-container"> <div class="form-index-container">
<el-card class="header-container"> <el-card class="header-container">
<el-row align="middle" type="flex"> <el-row align="middle" type="flex">
<el-col :offset="1" :span="1"> <el-col :span="2">
<i class="el-icon-back" /> <i class="el-icon-back" @click="$router.back(-1)" />
</el-col> </el-col>
<el-col :span="3"> <el-col :span="3">
<img class="header-logo" src="@/assets/images/indexLogo.png" @click="$router.push({path:'/home'})"> <img class="header-logo" src="@/assets/images/indexLogo.png" @click="$router.push({path:'/home'})">
@ -14,50 +14,21 @@
<el-col :span="2"> <el-col :span="2">
<el-button type="success">保存为模板</el-button> <el-button type="success">保存为模板</el-button>
</el-col> </el-col>
<el-col :span="1">
<el-button plain type="primary">主题</el-button>
</el-col>
<el-col :span="1">
<el-button plain type="success">设置</el-button>
</el-col>
<el-col :span="1">
<el-button plain type="info">逻辑</el-button>
</el-col>
<el-col :span="1">
<el-button plain type="warning">统计</el-button>
</el-col>
</el-row> </el-row>
</el-card> </el-card>
<div class="main-container"> <div class="main-container">
<div class="left-menu-container"> <div class="left-menu-container">
<el-menu :collapse="isCollapse" class="el-menu-vertical" :router="true" default-active="editor"> <el-menu :collapse="isCollapse" class="el-menu-vertical"
<el-menu-item index="editor"> :default-active="defaultActiveMenu"
<i class="el-icon-edit" /> @select="menuSelectHandle"
<span slot="title">编辑</span> >
</el-menu-item> <el-menu-item v-for="menuItem in menuItemList" :key="menuItem.route" :index="menuItem.route">
<el-menu-item index="logic"> <i :class="menuItem.icon" />
<i class="el-icon-menu" /> <span slot="title">{{ menuItem.title }}</span>
<span slot="title">逻辑</span>
</el-menu-item>
<el-menu-item index="preview">
<i class="el-icon-view" />
<span slot="title">预览</span>
</el-menu-item>
<el-menu-item index="setting">
<i class="el-icon-video-play" />
<span slot="title">发布</span>
</el-menu-item>
<el-menu-item index="setting">
<i class="el-icon-setting" />
<span slot="title">设置</span>
</el-menu-item>
<el-menu-item index="statistics">
<i class="el-icon-data-line" />
<span slot="title">统计</span>
</el-menu-item> </el-menu-item>
</el-menu> </el-menu>
<i v-if="!isCollapse" class="el-icon-d-arrow-left" @click="isCollapse=!isCollapse" /> <i v-if="!isCollapse" class="el-icon-d-arrow-left" @click="collapseHandle" />
<i v-else class="el-icon-d-arrow-right" @click="isCollapse=!isCollapse" /> <i v-else class="el-icon-d-arrow-right" @click="collapseHandle" />
</div> </div>
<div class="right-content-container"> <div class="right-content-container">
<router-view /> <router-view />
@ -72,7 +43,55 @@ export default {
components: {}, components: {},
data() { data() {
return { return {
isCollapse: false defaultActiveMenu: 'editor',
projectKey: null,
isCollapse: false,
menuItemList: [
{
title: '编辑',
icon: 'el-icon-edit',
route: '/project/form/editor'
},
{
title: '逻辑',
icon: 'el-icon-menu',
route: '/project/form/logic'
}, {
title: '预览',
icon: 'el-icon-view',
route: '/project/form/preview'
},
{
title: '设置',
icon: 'el-icon-setting',
route: '/project/form/setting'
},
{
title: '发布',
icon: 'el-icon-video-play',
route: '/project/form/publish'
}, {
title: '统计',
icon: 'el-icon-data-line',
route: '/project/form/statistics'
}
]
}
},
created() {
this.projectKey = this.$route.query.key
this.defaultActiveMenu = this.$route.path
this.isCollapse = this.$store.state.form.isCollapse
},
methods: {
menuSelectHandle(index) {
this.$router.replace({path: index, query: {key: this.projectKey}})
},
collapseHandle() {
let isCollapse = !this.isCollapse
this.$store.dispatch('form/setIsCollapse', isCollapse).then(() => {
this.isCollapse = isCollapse
})
} }
} }
} }
@ -98,6 +117,7 @@ export default {
font-weight: 550; font-weight: 550;
cursor: pointer; cursor: pointer;
color: #000; color: #000;
margin-left: 40px;
&:hover { &:hover {
color: rgb(32, 160, 255); color: rgb(32, 160, 255);
} }

5
src/views/form/publish.vue

@ -82,17 +82,16 @@ export default {
components: { components: {
VueQr VueQr
}, },
props: {
projectKey: null
},
data() { data() {
return { return {
publishStatus: false, publishStatus: false,
projectKey: null,
writeLink: '', writeLink: '',
qrCodeUrl: '' qrCodeUrl: ''
} }
}, },
mounted() { mounted() {
this.projectKey = this.$route.query.key
let url = window.location.protocol + '//' + window.location.host let url = window.location.protocol + '//' + window.location.host
this.writeLink = `${url}/s/${this.projectKey}` this.writeLink = `${url}/s/${this.projectKey}`
this.getProjectStatus() this.getProjectStatus()

4
src/views/form/setting.vue

@ -713,8 +713,8 @@ export default {
width: 100%; width: 100%;
height: 100%; height: 100%;
min-height: 85vh; min-height: 85vh;
padding: 0; padding-top: 30px;
margin: 10px 0 0 0; margin: 0;
background-color: #f7f7f7; background-color: #f7f7f7;
} }
.project-setting-view { .project-setting-view {

7
src/views/form/statistics.vue

@ -155,11 +155,9 @@ const fixedDefaultLabelFormColumn = {serialNumber: '提交序号', submitAddress
export default { export default {
name: 'ProjectStatistics', name: 'ProjectStatistics',
components: {}, components: {},
props: {
projectKey: null
},
data() { data() {
return { return {
projectKey: null,
customColumnDialogVisible: false, customColumnDialogVisible: false,
// //
fixedCustomColumns: fixedDefaultFormColumn, fixedCustomColumns: fixedDefaultFormColumn,
@ -187,6 +185,7 @@ export default {
} }
}, },
mounted() { mounted() {
this.projectKey = this.$route.query.key
this.queryConditions.projectKey = this.projectKey this.queryConditions.projectKey = this.projectKey
this.queryProjectResult() this.queryProjectResult()
this.queryProjectItems() this.queryProjectItems()
@ -280,7 +279,7 @@ export default {
.statistics-container { .statistics-container {
width: 100%; width: 100%;
height: 100%; height: 100%;
padding: 0; padding-top: 30px;
min-height: 85vh; min-height: 85vh;
background-color: #f7f7f7; background-color: #f7f7f7;
} }

13
src/views/home/NewIndex.vue

@ -38,7 +38,7 @@
</div> </div>
</div> </div>
<div class="right-container"> <div class="right-container">
<el-button type="primary">新建项目</el-button> <el-button type="primary" @click="createBlankTemplate">新建项目</el-button>
<el-button>新建项目</el-button> <el-button>新建项目</el-button>
<my-project /> <my-project />
</div> </div>
@ -52,11 +52,22 @@
<script> <script>
import MyProject from '@/views/project/MyProject' import MyProject from '@/views/project/MyProject'
import {formConf} from '@/components/generator/config'
export default { export default {
name: 'NewIndex', name: 'NewIndex',
components: { components: {
MyProject MyProject
}, methods: {
createBlankTemplate() {
this.$api.post('/user/project/create', {
'describe': formConf.description,
'name': formConf.title
}).then(res => {
console.log(res)
this.$router.push({path: '/project/form', query: {key: res.data}})
})
}
} }
} }
</script> </script>

7
src/views/test.vue

@ -1,6 +1,11 @@
<template> <template>
<div> <div>
<image-select v-model="radio" :options="options" :multiple="true" /> <image-select v-model="radio" :options="options" :multiple="false" />
<el-radio-group v-model="radio">
<el-radio :label="3">备选项</el-radio>
<el-radio :label="6">备选项</el-radio>
<el-radio :label="9">备选项</el-radio>
</el-radio-group>
</div> </div>
</template> </template>

Loading…
Cancel
Save