forked from github/dataease
feat: 组件解偶 使用继承
This commit is contained in:
parent
79d37827a4
commit
ebf90fb02a
@ -22,6 +22,7 @@
|
|||||||
"fit2cloud-ui": "^0.1.12",
|
"fit2cloud-ui": "^0.1.12",
|
||||||
"js-cookie": "2.2.0",
|
"js-cookie": "2.2.0",
|
||||||
"jsencrypt": "^3.0.0-rc.1",
|
"jsencrypt": "^3.0.0-rc.1",
|
||||||
|
"lodash": "4.17.21",
|
||||||
"normalize.css": "7.0.0",
|
"normalize.css": "7.0.0",
|
||||||
"nprogress": "0.2.0",
|
"nprogress": "0.2.0",
|
||||||
"screenfull": "4.2.0",
|
"screenfull": "4.2.0",
|
||||||
|
@ -24,14 +24,14 @@
|
|||||||
:index="index"
|
:index="index"
|
||||||
:class="{ lock: item.isLock }"
|
:class="{ lock: item.isLock }"
|
||||||
>
|
>
|
||||||
<component
|
|
||||||
:is="item.component"
|
<de-drawing-widget
|
||||||
v-if="item.component !== 'v-text'"
|
v-if="item.type==='custom'"
|
||||||
:id="'component' + item.id"
|
:id="'component' + item.id"
|
||||||
class="component"
|
class="component"
|
||||||
:style="getComponentStyle(item.style)"
|
:style="getComponentStyle(item.style)"
|
||||||
:prop-value="item.propValue"
|
|
||||||
:element="item"
|
:element="item"
|
||||||
|
:item="item"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<component
|
<component
|
||||||
@ -42,8 +42,17 @@
|
|||||||
:style="getComponentStyle(item.style)"
|
:style="getComponentStyle(item.style)"
|
||||||
:prop-value="item.propValue"
|
:prop-value="item.propValue"
|
||||||
:element="item"
|
:element="item"
|
||||||
@input="handleInput"
|
|
||||||
/>
|
/>
|
||||||
|
<!-- <component
|
||||||
|
:is="item.component"
|
||||||
|
v-else
|
||||||
|
:id="'component' + item.id"
|
||||||
|
class="component"
|
||||||
|
:style="getComponentStyle(item.style)"
|
||||||
|
:prop-value="item.propValue"
|
||||||
|
:element="item"
|
||||||
|
@input="handleInput"
|
||||||
|
/> -->
|
||||||
</Shape>
|
</Shape>
|
||||||
<!-- 右击菜单 -->
|
<!-- 右击菜单 -->
|
||||||
<ContextMenu />
|
<ContextMenu />
|
||||||
|
43
frontend/src/components/widget/DeWidget/DeButton.vue
Normal file
43
frontend/src/components/widget/DeWidget/DeButton.vue
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
<el-button
|
||||||
|
v-if="options!== null && options.attrs!==null"
|
||||||
|
:type="options.attrs.type"
|
||||||
|
:round="options.attrs.round"
|
||||||
|
>
|
||||||
|
{{ options.value }}
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
|
||||||
|
props: {
|
||||||
|
options: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
// this.defaultOptions = Object.assign({}, this.options)
|
||||||
|
// const dom = this.$refs[this.options.refId]
|
||||||
|
// for (const key in this.options.attrs) {
|
||||||
|
// if (Object.hasOwnProperty.call(this.defaultOptions.attrs, key)) {
|
||||||
|
// const element = this.defaultOptions.attrs[key]
|
||||||
|
// dom.$props[key] = element
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
</style>
|
27
frontend/src/components/widget/DeWidget/DeDate.vue
Normal file
27
frontend/src/components/widget/DeWidget/DeDate.vue
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<template>
|
||||||
|
<el-date-picker
|
||||||
|
v-if="options!== null && options.attrs!==null"
|
||||||
|
v-model="options.value"
|
||||||
|
:type="options.attrs.type"
|
||||||
|
:range-separator="options.attrs.rangeSeparator"
|
||||||
|
:start-placeholder="options.attrs.startPlaceholder"
|
||||||
|
:end-placeholder="options.attrs.endPlaceholder"
|
||||||
|
:placeholder="options.attrs.placeholder"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
|
||||||
|
props: {
|
||||||
|
options: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
</style>
|
20
frontend/src/components/widget/DeWidget/DeDrawingWidget.vue
Normal file
20
frontend/src/components/widget/DeWidget/DeDrawingWidget.vue
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
functional: true,
|
||||||
|
props: {
|
||||||
|
item: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
render(createElement, context) {
|
||||||
|
const item = context.props.item
|
||||||
|
return createElement(item.component, {
|
||||||
|
props: {
|
||||||
|
options: item.options,
|
||||||
|
element: item
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
34
frontend/src/components/widget/DeWidget/DeInputSearch.vue
Normal file
34
frontend/src/components/widget/DeWidget/DeInputSearch.vue
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
<el-input v-if="options!== null && options.attrs!==null" v-model="options.value" style="width:260px;" :placeholder="options.attrs.placeholder">
|
||||||
|
|
||||||
|
<el-button slot="append" icon="el-icon-search" />
|
||||||
|
</el-input>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
|
||||||
|
props: {
|
||||||
|
options: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
</style>
|
24
frontend/src/components/widget/DeWidget/DeQuarter.vue
Normal file
24
frontend/src/components/widget/DeWidget/DeQuarter.vue
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<template>
|
||||||
|
<el-quarter
|
||||||
|
v-if="options!== null && options.attrs!==null"
|
||||||
|
v-model="options.value"
|
||||||
|
|
||||||
|
:placeholder="options.attrs.placeholder"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
|
||||||
|
props: {
|
||||||
|
options: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
</style>
|
38
frontend/src/components/widget/DeWidget/DeSelect.vue
Normal file
38
frontend/src/components/widget/DeWidget/DeSelect.vue
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
<el-select v-if="options!== null && options.attrs!==null" v-model="options.value" :placeholder="options.attrs.placeholder">
|
||||||
|
<el-option
|
||||||
|
v-for="item in options.attrs.datas"
|
||||||
|
:key="item[options.attrs.key]"
|
||||||
|
:label="item[options.attrs.label]"
|
||||||
|
:value="item[options.attrs.value]"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
|
||||||
|
props: {
|
||||||
|
options: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
</style>
|
@ -1,32 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div>de-widget</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { ApplicationContext } from '@/utils/ApplicationContext'
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
options: {
|
|
||||||
type: Object,
|
|
||||||
default: null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
widget: null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed() {
|
|
||||||
this.widget = ApplicationContext.getService(this.options.name)
|
|
||||||
console.log(this.widget.name)
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
onDraw() {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
|
|
||||||
</style>
|
|
138
frontend/src/components/widget/DeWidget/sources/ElQuarter.vue
Normal file
138
frontend/src/components/widget/DeWidget/sources/ElQuarter.vue
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<mark
|
||||||
|
v-show="showSeason"
|
||||||
|
style="position:fixed;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,0);z-index:999;"
|
||||||
|
@click.stop="showSeason=false"
|
||||||
|
/>
|
||||||
|
<el-input v-model="showValue" :placeholder="placeholder" style="width:138px;" @focus="showSeason=true">
|
||||||
|
<i slot="prefix" class="el-input__icon el-icon-date" />
|
||||||
|
</el-input>
|
||||||
|
<el-card
|
||||||
|
v-show="showSeason"
|
||||||
|
class="box-card"
|
||||||
|
style="width:322px;padding: 0 3px 20px;margin-top:10px;position:fixed;z-index:9999"
|
||||||
|
>
|
||||||
|
<div slot="header" class="clearfix" style="text-align:center;padding:0">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
aria-label="前一年"
|
||||||
|
class="el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left"
|
||||||
|
@click="prev"
|
||||||
|
/>
|
||||||
|
<span role="button" class="el-date-picker__header-label">{{ year }}年</span>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
aria-label="后一年"
|
||||||
|
class="el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right"
|
||||||
|
@click="next"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="text item" style="text-align:center;">
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="medium"
|
||||||
|
style="width:40%;color: #606266;float:left;"
|
||||||
|
@click="selectSeason(0)"
|
||||||
|
>第一季度</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="medium"
|
||||||
|
style="float:right;width:40%;color: #606266;"
|
||||||
|
@click="selectSeason(1)"
|
||||||
|
>第二季度</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="text item" style="text-align:center;">
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="medium"
|
||||||
|
style="width:40%;color: #606266;float:left;"
|
||||||
|
@click="selectSeason(2)"
|
||||||
|
>第三季度</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
size="medium"
|
||||||
|
style="float:right;width:40%;color: #606266;"
|
||||||
|
@click="selectSeason(3)"
|
||||||
|
>第四季度</el-button>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
/**
|
||||||
|
* @file: View 组件 季节选择控件
|
||||||
|
* @author: v_zhuchun
|
||||||
|
* @date: 2019-05-23
|
||||||
|
* @description: UI组件 可选择季节
|
||||||
|
* @api: valueArr : 季度value defalut['01-03', '04-06', '07-09', '10-12'] 默认值待设置
|
||||||
|
*/
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
valueArr: {
|
||||||
|
default: () => {
|
||||||
|
return ['01-03', '04-06', '07-09', '10-12']
|
||||||
|
},
|
||||||
|
type: Array
|
||||||
|
},
|
||||||
|
getValue: {
|
||||||
|
default: () => {},
|
||||||
|
type: Function
|
||||||
|
},
|
||||||
|
defaultValue: {
|
||||||
|
default: '',
|
||||||
|
type: String
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
showSeason: false,
|
||||||
|
season: '',
|
||||||
|
year: new Date().getFullYear(),
|
||||||
|
showValue: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
defaultValue: function(value, oldValue) {
|
||||||
|
const arr = value.split('-')
|
||||||
|
this.year = arr[0].slice(0, 4)
|
||||||
|
const str = arr[0].slice(4, 6) + '-' + arr[1].slice(4, 6)
|
||||||
|
const arrAll = this.valueArr
|
||||||
|
this.showValue = `${this.year}年${arrAll.indexOf(str) + 1}季度`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
if (this.defaultValue) {
|
||||||
|
const value = this.defaultValue
|
||||||
|
const arr = value.split('-')
|
||||||
|
this.year = arr[0].slice(0, 4)
|
||||||
|
const str = arr[0].slice(4, 6) + '-' + arr[1].slice(4, 6)
|
||||||
|
const arrAll = this.valueArr
|
||||||
|
this.showValue = `${this.year}年${arrAll.indexOf(str) + 1}季度`
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
one() {
|
||||||
|
this.showSeason = false
|
||||||
|
},
|
||||||
|
prev() {
|
||||||
|
this.year = this.year * 1 - 1
|
||||||
|
},
|
||||||
|
next() {
|
||||||
|
this.year = this.year * 1 + 1
|
||||||
|
},
|
||||||
|
selectSeason(i) {
|
||||||
|
const that = this
|
||||||
|
that.season = i + 1
|
||||||
|
const arr = that.valueArr[i].split('-')
|
||||||
|
that.getValue(that.year + arr[0] + '-' + that.year + arr[1])
|
||||||
|
that.showSeason = false
|
||||||
|
this.showValue = `${this.year}年${this.season}季度`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -1,4 +1,36 @@
|
|||||||
// import store from '@/store'
|
// import store from '@/store'
|
||||||
|
|
||||||
|
import Vue from 'vue'
|
||||||
|
import upperFirst from 'lodash/upperFirst'
|
||||||
|
import camelCase from 'lodash/camelCase'
|
||||||
|
|
||||||
|
const requireComponent = require.context('./DeWidget', true, /\.vue$/)
|
||||||
|
|
||||||
|
requireComponent.keys().forEach(fileName => {
|
||||||
|
// 获取组件配置
|
||||||
|
const componentConfig = requireComponent(fileName)
|
||||||
|
// 这个地方直接传入filename其实就是内部会调用了resolve方法,会返回对应的文件内容(不理解可以console一下看看)
|
||||||
|
// 获取组件的 PascalCase 命名
|
||||||
|
const componentName = upperFirst(
|
||||||
|
camelCase(
|
||||||
|
// 获取和目录深度无关的文件名
|
||||||
|
fileName
|
||||||
|
.split('/')
|
||||||
|
.pop()
|
||||||
|
.replace(/\.\w+$/, '')
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
// 全局注册组件
|
||||||
|
Vue.component(
|
||||||
|
componentName,
|
||||||
|
// 如果这个组件选项是通过 `export default` 导出的,
|
||||||
|
// 那么就会优先使用 `.default`,
|
||||||
|
// 否则回退到使用模块的根。
|
||||||
|
componentConfig.default || componentConfig
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
const req = require.context('./serviceImpl', false, /\.js$/)
|
const req = require.context('./serviceImpl', false, /\.js$/)
|
||||||
const requireAll = requireContext => requireContext.keys()
|
const requireAll = requireContext => requireContext.keys()
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ export class WidgetService {
|
|||||||
options = { ...commonAttr, ...options }
|
options = { ...commonAttr, ...options }
|
||||||
Object.assign(this, options)
|
Object.assign(this, options)
|
||||||
this.style = { ...commonStyle, ...options.style }
|
this.style = { ...commonStyle, ...options.style }
|
||||||
|
this.type = 'custom'
|
||||||
this.storeWidget()
|
this.storeWidget()
|
||||||
}
|
}
|
||||||
storeWidget() {
|
storeWidget() {
|
||||||
|
@ -17,8 +17,15 @@ const defaultOptions = {
|
|||||||
color: '',
|
color: '',
|
||||||
backgroundColor: ''
|
backgroundColor: ''
|
||||||
},
|
},
|
||||||
propValue: '按钮',
|
component: 'de-button',
|
||||||
component: 'v-button'
|
options: {
|
||||||
|
refId: '1234567890',
|
||||||
|
attrs: {
|
||||||
|
type: 'primary',
|
||||||
|
round: true
|
||||||
|
},
|
||||||
|
value: '测试按钮'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ButtonSureServiceImpl extends WidgetService {
|
class ButtonSureServiceImpl extends WidgetService {
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
import { WidgetService } from '../service/WidgetService'
|
||||||
|
const defaultOptions = {
|
||||||
|
name: 'textInputWidget',
|
||||||
|
icon: null,
|
||||||
|
label: '文本搜索',
|
||||||
|
style: {
|
||||||
|
width: 100,
|
||||||
|
height: 34,
|
||||||
|
borderWidth: '',
|
||||||
|
borderColor: '',
|
||||||
|
borderRadius: '',
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: 500,
|
||||||
|
lineHeight: '',
|
||||||
|
letterSpacing: 0,
|
||||||
|
textAlign: '',
|
||||||
|
color: '',
|
||||||
|
backgroundColor: ''
|
||||||
|
},
|
||||||
|
component: 'de-input-search',
|
||||||
|
options: {
|
||||||
|
refId: '1234567890',
|
||||||
|
attrs: {
|
||||||
|
placeholder: '请输入关键字'
|
||||||
|
},
|
||||||
|
value: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TextInputServiceImpl extends WidgetService {
|
||||||
|
constructor(options) {
|
||||||
|
Object.assign(options, defaultOptions)
|
||||||
|
super(options)
|
||||||
|
}
|
||||||
|
|
||||||
|
initWidget() {
|
||||||
|
// console.log('this is first initWidget')
|
||||||
|
}
|
||||||
|
toDrawWidget() {
|
||||||
|
// console.log('this is first toDrawWidget')
|
||||||
|
}
|
||||||
|
// 移动到画布之前回掉
|
||||||
|
beforeToDraw() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const textInputServiceImpl = new TextInputServiceImpl({ name: 'textInputWidget' })
|
||||||
|
export default textInputServiceImpl
|
@ -0,0 +1,67 @@
|
|||||||
|
import { WidgetService } from '../service/WidgetService'
|
||||||
|
const defaultOptions = {
|
||||||
|
name: 'textSelectWidget',
|
||||||
|
icon: null,
|
||||||
|
label: '文本下拉',
|
||||||
|
style: {
|
||||||
|
width: 200,
|
||||||
|
height: 22,
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: 500,
|
||||||
|
lineHeight: '',
|
||||||
|
letterSpacing: 0,
|
||||||
|
textAlign: '',
|
||||||
|
color: ''
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
refId: '1234567890',
|
||||||
|
attrs: {
|
||||||
|
multiple: false,
|
||||||
|
placeholder: '请选择',
|
||||||
|
datas: [
|
||||||
|
{
|
||||||
|
id: '0',
|
||||||
|
text: '北京'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '1',
|
||||||
|
text: '上海'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '2',
|
||||||
|
text: '广东'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '3',
|
||||||
|
text: '深圳'
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
key: 'id',
|
||||||
|
label: 'text',
|
||||||
|
value: 'id'
|
||||||
|
},
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
component: 'de-select'
|
||||||
|
}
|
||||||
|
|
||||||
|
class TextSelectServiceImpl extends WidgetService {
|
||||||
|
constructor(options) {
|
||||||
|
Object.assign(options, defaultOptions)
|
||||||
|
super(options)
|
||||||
|
}
|
||||||
|
|
||||||
|
initWidget() {
|
||||||
|
// console.log('this is first initWidget')
|
||||||
|
}
|
||||||
|
toDrawWidget() {
|
||||||
|
// console.log('this is first toDrawWidget')
|
||||||
|
}
|
||||||
|
// 移动到画布之前回掉
|
||||||
|
beforeToDraw() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const textSelectServiceImpl = new TextSelectServiceImpl({ name: 'textSelectWidget' })
|
||||||
|
export default textSelectServiceImpl
|
@ -0,0 +1,47 @@
|
|||||||
|
import { WidgetService } from '../service/WidgetService'
|
||||||
|
const defaultOptions = {
|
||||||
|
name: 'timeDateRangeWidget',
|
||||||
|
icon: null,
|
||||||
|
label: '日期范围',
|
||||||
|
style: {
|
||||||
|
width: 200,
|
||||||
|
height: 22,
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: 500,
|
||||||
|
lineHeight: '',
|
||||||
|
letterSpacing: 0,
|
||||||
|
textAlign: '',
|
||||||
|
color: ''
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
refId: '1234567890',
|
||||||
|
attrs: {
|
||||||
|
type: 'daterange',
|
||||||
|
rangeSeparator: '至',
|
||||||
|
startPlaceholder: '开始日期',
|
||||||
|
endPlaceholder: '结束日期'
|
||||||
|
},
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
component: 'de-date'
|
||||||
|
}
|
||||||
|
|
||||||
|
class TimeDateRangeServiceImpl extends WidgetService {
|
||||||
|
constructor(options) {
|
||||||
|
Object.assign(options, defaultOptions)
|
||||||
|
super(options)
|
||||||
|
}
|
||||||
|
|
||||||
|
initWidget() {
|
||||||
|
// console.log('this is first initWidget')
|
||||||
|
}
|
||||||
|
toDrawWidget() {
|
||||||
|
// console.log('this is first toDrawWidget')
|
||||||
|
}
|
||||||
|
// 移动到画布之前回掉
|
||||||
|
beforeToDraw() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const timeDateRangeServiceImpl = new TimeDateRangeServiceImpl({ name: 'timeDateRangeWidget' })
|
||||||
|
export default timeDateRangeServiceImpl
|
@ -0,0 +1,45 @@
|
|||||||
|
import { WidgetService } from '../service/WidgetService'
|
||||||
|
const defaultOptions = {
|
||||||
|
name: 'timeDateWidget',
|
||||||
|
icon: null,
|
||||||
|
label: '日期',
|
||||||
|
style: {
|
||||||
|
width: 200,
|
||||||
|
height: 22,
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: 500,
|
||||||
|
lineHeight: '',
|
||||||
|
letterSpacing: 0,
|
||||||
|
textAlign: '',
|
||||||
|
color: ''
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
refId: '1234567890',
|
||||||
|
attrs: {
|
||||||
|
type: 'date',
|
||||||
|
placeholder: '请选择日期'
|
||||||
|
},
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
component: 'de-date'
|
||||||
|
}
|
||||||
|
|
||||||
|
class TimeDateServiceImpl extends WidgetService {
|
||||||
|
constructor(options) {
|
||||||
|
Object.assign(options, defaultOptions)
|
||||||
|
super(options)
|
||||||
|
}
|
||||||
|
|
||||||
|
initWidget() {
|
||||||
|
// console.log('this is first initWidget')
|
||||||
|
}
|
||||||
|
toDrawWidget() {
|
||||||
|
// console.log('this is first toDrawWidget')
|
||||||
|
}
|
||||||
|
// 移动到画布之前回掉
|
||||||
|
beforeToDraw() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const timeDateServiceImpl = new TimeDateServiceImpl({ name: 'timeDateWidget' })
|
||||||
|
export default timeDateServiceImpl
|
@ -0,0 +1,45 @@
|
|||||||
|
import { WidgetService } from '../service/WidgetService'
|
||||||
|
const defaultOptions = {
|
||||||
|
name: 'timeMonthWidget',
|
||||||
|
icon: null,
|
||||||
|
label: '年月',
|
||||||
|
style: {
|
||||||
|
width: 200,
|
||||||
|
height: 22,
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: 500,
|
||||||
|
lineHeight: '',
|
||||||
|
letterSpacing: 0,
|
||||||
|
textAlign: '',
|
||||||
|
color: ''
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
refId: '1234567890',
|
||||||
|
attrs: {
|
||||||
|
type: 'month',
|
||||||
|
placeholder: '请选择年月'
|
||||||
|
},
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
component: 'de-date'
|
||||||
|
}
|
||||||
|
|
||||||
|
class TimeMonthServiceImpl extends WidgetService {
|
||||||
|
constructor(options) {
|
||||||
|
Object.assign(options, defaultOptions)
|
||||||
|
super(options)
|
||||||
|
}
|
||||||
|
|
||||||
|
initWidget() {
|
||||||
|
// console.log('this is first initWidget')
|
||||||
|
}
|
||||||
|
toDrawWidget() {
|
||||||
|
// console.log('this is first toDrawWidget')
|
||||||
|
}
|
||||||
|
// 移动到画布之前回掉
|
||||||
|
beforeToDraw() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const timeMonthServiceImpl = new TimeMonthServiceImpl({ name: 'timeMonthWidget' })
|
||||||
|
export default timeMonthServiceImpl
|
@ -0,0 +1,45 @@
|
|||||||
|
import { WidgetService } from '../service/WidgetService'
|
||||||
|
const defaultOptions = {
|
||||||
|
name: 'timeQuarterWidget',
|
||||||
|
icon: null,
|
||||||
|
label: '季度',
|
||||||
|
style: {
|
||||||
|
width: 200,
|
||||||
|
height: 22,
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: 500,
|
||||||
|
lineHeight: '',
|
||||||
|
letterSpacing: 0,
|
||||||
|
textAlign: '',
|
||||||
|
color: ''
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
refId: '1234567890',
|
||||||
|
attrs: {
|
||||||
|
|
||||||
|
placeholder: '请选择季度'
|
||||||
|
},
|
||||||
|
value: ''
|
||||||
|
},
|
||||||
|
component: 'de-quarter'
|
||||||
|
}
|
||||||
|
|
||||||
|
class TimeQuarterServiceImpl extends WidgetService {
|
||||||
|
constructor(options) {
|
||||||
|
Object.assign(options, defaultOptions)
|
||||||
|
super(options)
|
||||||
|
}
|
||||||
|
|
||||||
|
initWidget() {
|
||||||
|
// console.log('this is first initWidget')
|
||||||
|
}
|
||||||
|
toDrawWidget() {
|
||||||
|
// console.log('this is first toDrawWidget')
|
||||||
|
}
|
||||||
|
// 移动到画布之前回掉
|
||||||
|
beforeToDraw() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const timeQuarterServiceImpl = new TimeQuarterServiceImpl({ name: 'timeQuarterWidget' })
|
||||||
|
export default timeQuarterServiceImpl
|
@ -13,10 +13,15 @@ const defaultOptions = {
|
|||||||
textAlign: '',
|
textAlign: '',
|
||||||
color: ''
|
color: ''
|
||||||
},
|
},
|
||||||
deProp: {
|
options: {
|
||||||
type: 'year'
|
refId: '1234567890',
|
||||||
|
attrs: {
|
||||||
|
type: 'year',
|
||||||
|
placeholder: '请选择年份'
|
||||||
},
|
},
|
||||||
component: 'el-date-picker'
|
value: ''
|
||||||
|
},
|
||||||
|
component: 'de-date'
|
||||||
}
|
}
|
||||||
|
|
||||||
class TimeYearServiceImpl extends WidgetService {
|
class TimeYearServiceImpl extends WidgetService {
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
// import { WidgetService } from '../service/WidgetService'
|
|
||||||
// class WidgetServiceImpl extends WidgetService {
|
|
||||||
// constructor(options) {
|
|
||||||
// super(options)
|
|
||||||
// console.log('init child class WidgetServiceImpl')
|
|
||||||
// }
|
|
||||||
|
|
||||||
// initWidget() {
|
|
||||||
// console.log('this is first initWidget')
|
|
||||||
// }
|
|
||||||
// toDrawWidget() {
|
|
||||||
// console.log('this is first toDrawWidget')
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// const widgetServiceImpl = new WidgetServiceImpl({ name: 'testWidget' })
|
|
||||||
// export default widgetServiceImpl
|
|
@ -64,9 +64,9 @@ Vue.use(message)
|
|||||||
Vue.config.productionTip = false
|
Vue.config.productionTip = false
|
||||||
|
|
||||||
new Vue({
|
new Vue({
|
||||||
el: '#app',
|
|
||||||
router,
|
router,
|
||||||
store,
|
store,
|
||||||
i18n,
|
i18n,
|
||||||
render: h => h(App)
|
render: h => h(App)
|
||||||
})
|
}).$mount('#app')
|
||||||
|
@ -49,7 +49,16 @@ export default {
|
|||||||
componentList,
|
componentList,
|
||||||
widgetSubjects: {
|
widgetSubjects: {
|
||||||
'时间过滤组件': [
|
'时间过滤组件': [
|
||||||
'timeYearWidget'
|
'timeYearWidget',
|
||||||
|
'timeMonthWidget',
|
||||||
|
'timeQuarterWidget',
|
||||||
|
'timeDateWidget',
|
||||||
|
'timeDateRangeWidget'
|
||||||
|
|
||||||
|
],
|
||||||
|
'文本过滤组件': [
|
||||||
|
'textSelectWidget',
|
||||||
|
'textInputWidget'
|
||||||
],
|
],
|
||||||
'按钮': [
|
'按钮': [
|
||||||
'buttonSureWidget'
|
'buttonSureWidget'
|
||||||
|
Loading…
Reference in New Issue
Block a user