Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
RuoYi Vue
Commits
d00dc3b0
Unverified
Commit
d00dc3b0
authored
Feb 12, 2022
by
若依
Committed by
Gitee
Feb 12, 2022
Browse files
!426 修正单词拼写错误
Merge pull request !426 from 稚屿/master
parents
f5c69bae
c99eb980
Changes
22
Hide whitespace changes
Inline
Side-by-side
ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue
View file @
d00dc3b0
<
template
>
<
template
>
<div>
<div>
<el-dialog
<el-dialog
v-bind=
"$attrs"
v-bind=
"$attrs"
:close-on-click-modal=
"false"
:close-on-click-modal=
"false"
:modal-append-to-body=
"false"
:modal-append-to-body=
"false"
v-on=
"$listeners"
v-on=
"$listeners"
@
open=
"onOpen"
@
open=
"onOpen"
@
close=
"onClose"
@
close=
"onClose"
>
>
<el-row
:gutter=
"0"
>
<el-row
:gutter=
"0"
>
<el-form
<el-form
ref=
"elForm"
ref=
"elForm"
:model=
"formData"
:model=
"formData"
:rules=
"rules"
:rules=
"rules"
size=
"small"
size=
"small"
label-width=
"100px"
label-width=
"100px"
>
>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
<el-form-item
label=
"选项名"
label=
"选项名"
prop=
"label"
prop=
"label"
>
>
<el-input
<el-input
v-model=
"formData.label"
v-model=
"formData.label"
placeholder=
"请输入选项名"
placeholder=
"请输入选项名"
clearable
clearable
/>
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
<el-form-item
label=
"选项值"
label=
"选项值"
prop=
"value"
prop=
"value"
>
>
<el-input
<el-input
v-model=
"formData.value"
v-model=
"formData.value"
placeholder=
"请输入选项值"
placeholder=
"请输入选项值"
clearable
clearable
>
>
<el-select
<el-select
slot=
"append"
slot=
"append"
v-model=
"dataType"
v-model=
"dataType"
:style=
"
{width: '100px'}"
:style=
"
{width: '100px'}"
>
>
<el-option
<el-option
v-for=
"(item, index) in dataTypeOptions"
v-for=
"(item, index) in dataTypeOptions"
:key=
"index"
:key=
"index"
:label=
"item.label"
:label=
"item.label"
:value=
"item.value"
:value=
"item.value"
:disabled=
"item.disabled"
:disabled=
"item.disabled"
/>
/>
</el-select>
</el-select>
</el-input>
</el-input>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-form>
</el-form>
</el-row>
</el-row>
<div
slot=
"footer"
>
<div
slot=
"footer"
>
<el-button
<el-button
type=
"primary"
type=
"primary"
@
click=
"hand
e
lConfirm"
@
click=
"handl
e
Confirm"
>
>
确定
确定
</el-button>
</el-button>
<el-button
@
click=
"close"
>
<el-button
@
click=
"close"
>
取消
取消
</el-button>
</el-button>
</div>
</div>
</el-dialog>
</el-dialog>
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
import
{
isNumberStr
}
from
'
@/utils/index
'
import
{
isNumberStr
}
from
'
@/utils/index
'
export
default
{
export
default
{
components
:
{},
components
:
{},
inheritAttrs
:
false
,
inheritAttrs
:
false
,
props
:
[],
props
:
[],
data
()
{
data
()
{
return
{
return
{
id
:
100
,
id
:
100
,
formData
:
{
formData
:
{
label
:
undefined
,
label
:
undefined
,
value
:
undefined
value
:
undefined
},
},
rules
:
{
rules
:
{
label
:
[
label
:
[
{
{
required
:
true
,
required
:
true
,
message
:
'
请输入选项名
'
,
message
:
'
请输入选项名
'
,
trigger
:
'
blur
'
trigger
:
'
blur
'
}
}
],
],
value
:
[
value
:
[
{
{
required
:
true
,
required
:
true
,
message
:
'
请输入选项值
'
,
message
:
'
请输入选项值
'
,
trigger
:
'
blur
'
trigger
:
'
blur
'
}
}
]
]
},
},
dataType
:
'
string
'
,
dataType
:
'
string
'
,
dataTypeOptions
:
[
dataTypeOptions
:
[
{
{
label
:
'
字符串
'
,
label
:
'
字符串
'
,
value
:
'
string
'
value
:
'
string
'
},
},
{
{
label
:
'
数字
'
,
label
:
'
数字
'
,
value
:
'
number
'
value
:
'
number
'
}
}
]
]
}
}
},
},
computed
:
{},
computed
:
{},
watch
:
{
watch
:
{
// eslint-disable-next-line func-names
// eslint-disable-next-line func-names
'
formData.value
'
:
function
(
val
)
{
'
formData.value
'
:
function
(
val
)
{
this
.
dataType
=
isNumberStr
(
val
)
?
'
number
'
:
'
string
'
this
.
dataType
=
isNumberStr
(
val
)
?
'
number
'
:
'
string
'
}
}
},
},
created
()
{},
created
()
{},
mounted
()
{},
mounted
()
{},
methods
:
{
methods
:
{
onOpen
()
{
onOpen
()
{
this
.
formData
=
{
this
.
formData
=
{
label
:
undefined
,
label
:
undefined
,
value
:
undefined
value
:
undefined
}
}
},
},
onClose
()
{},
onClose
()
{},
close
()
{
close
()
{
this
.
$emit
(
'
update:visible
'
,
false
)
this
.
$emit
(
'
update:visible
'
,
false
)
},
},
hand
e
lConfirm
()
{
handl
e
Confirm
()
{
this
.
$refs
.
elForm
.
validate
(
valid
=>
{
this
.
$refs
.
elForm
.
validate
(
valid
=>
{
if
(
!
valid
)
return
if
(
!
valid
)
return
if
(
this
.
dataType
===
'
number
'
)
{
if
(
this
.
dataType
===
'
number
'
)
{
this
.
formData
.
value
=
parseFloat
(
this
.
formData
.
value
)
this
.
formData
.
value
=
parseFloat
(
this
.
formData
.
value
)
}
}
this
.
formData
.
id
=
this
.
id
++
this
.
formData
.
id
=
this
.
id
++
this
.
$emit
(
'
commit
'
,
this
.
formData
)
this
.
$emit
(
'
commit
'
,
this
.
formData
)
this
.
close
()
this
.
close
()
})
})
}
}
}
}
}
}
</
script
>
</
script
>
ruoyi-ui/src/views/tool/build/index.vue
View file @
d00dc3b0
<
template
>
<
template
>
<div
class=
"container"
>
<div
class=
"container"
>
<div
class=
"left-board"
>
<div
class=
"left-board"
>
<div
class=
"logo-wrapper"
>
<div
class=
"logo-wrapper"
>
<div
class=
"logo"
>
<div
class=
"logo"
>
<img
:src=
"logo"
alt=
"logo"
>
Form Generator
<img
:src=
"logo"
alt=
"logo"
>
Form Generator
</div>
</div>
</div>
</div>
<el-scrollbar
class=
"left-scrollbar"
>
<el-scrollbar
class=
"left-scrollbar"
>
<div
class=
"components-list"
>
<div
class=
"components-list"
>
<div
class=
"components-title"
>
<div
class=
"components-title"
>
<svg-icon
icon-class=
"component"
/>
输入型组件
<svg-icon
icon-class=
"component"
/>
输入型组件
</div>
</div>
<draggable
<draggable
class=
"components-draggable"
class=
"components-draggable"
:list=
"inputComponents"
:list=
"inputComponents"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }"
:clone="cloneComponent"
:clone="cloneComponent"
draggable=".components-item"
draggable=".components-item"
:sort="false"
:sort="false"
@end="onEnd"
@end="onEnd"
>
>
<div
<div
v-for=
"(element, index) in inputComponents"
:key=
"index"
class=
"components-item"
v-for=
"(element, index) in inputComponents"
:key=
"index"
class=
"components-item"
@
click=
"addComponent(element)"
@
click=
"addComponent(element)"
>
>
<div
class=
"components-body"
>
<div
class=
"components-body"
>
<svg-icon
:icon-class=
"element.tagIcon"
/>
<svg-icon
:icon-class=
"element.tagIcon"
/>
{{
element
.
label
}}
{{
element
.
label
}}
</div>
</div>
</div>
</div>
</draggable>
</draggable>
<div
class=
"components-title"
>
<div
class=
"components-title"
>
<svg-icon
icon-class=
"component"
/>
选择型组件
<svg-icon
icon-class=
"component"
/>
选择型组件
</div>
</div>
<draggable
<draggable
class=
"components-draggable"
class=
"components-draggable"
:list=
"selectComponents"
:list=
"selectComponents"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }"
:clone="cloneComponent"
:clone="cloneComponent"
draggable=".components-item"
draggable=".components-item"
:sort="false"
:sort="false"
@end="onEnd"
@end="onEnd"
>
>
<div
<div
v-for=
"(element, index) in selectComponents"
v-for=
"(element, index) in selectComponents"
:key=
"index"
:key=
"index"
class=
"components-item"
class=
"components-item"
@
click=
"addComponent(element)"
@
click=
"addComponent(element)"
>
>
<div
class=
"components-body"
>
<div
class=
"components-body"
>
<svg-icon
:icon-class=
"element.tagIcon"
/>
<svg-icon
:icon-class=
"element.tagIcon"
/>
{{
element
.
label
}}
{{
element
.
label
}}
</div>
</div>
</div>
</div>
</draggable>
</draggable>
<div
class=
"components-title"
>
<div
class=
"components-title"
>
<svg-icon
icon-class=
"component"
/>
布局型组件
<svg-icon
icon-class=
"component"
/>
布局型组件
</div>
</div>
<draggable
<draggable
class=
"components-draggable"
:list=
"layoutComponents"
class=
"components-draggable"
:list=
"layoutComponents"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }" :clone="cloneComponent"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }" :clone="cloneComponent"
draggable=".components-item" :sort="false" @end="onEnd"
draggable=".components-item" :sort="false" @end="onEnd"
>
>
<div
<div
v-for=
"(element, index) in layoutComponents"
:key=
"index"
class=
"components-item"
v-for=
"(element, index) in layoutComponents"
:key=
"index"
class=
"components-item"
@
click=
"addComponent(element)"
@
click=
"addComponent(element)"
>
>
<div
class=
"components-body"
>
<div
class=
"components-body"
>
<svg-icon
:icon-class=
"element.tagIcon"
/>
<svg-icon
:icon-class=
"element.tagIcon"
/>
{{
element
.
label
}}
{{
element
.
label
}}
</div>
</div>
</div>
</div>
</draggable>
</draggable>
</div>
</div>
</el-scrollbar>
</el-scrollbar>
</div>
</div>
<div
class=
"center-board"
>
<div
class=
"center-board"
>
<div
class=
"action-bar"
>
<div
class=
"action-bar"
>
<el-button
icon=
"el-icon-download"
type=
"text"
@
click=
"download"
>
<el-button
icon=
"el-icon-download"
type=
"text"
@
click=
"download"
>
导出vue文件
导出vue文件
</el-button>
</el-button>
<el-button
class=
"copy-btn-main"
icon=
"el-icon-document-copy"
type=
"text"
@
click=
"copy"
>
<el-button
class=
"copy-btn-main"
icon=
"el-icon-document-copy"
type=
"text"
@
click=
"copy"
>
复制代码
复制代码
</el-button>
</el-button>
<el-button
class=
"delete-btn"
icon=
"el-icon-delete"
type=
"text"
@
click=
"empty"
>
<el-button
class=
"delete-btn"
icon=
"el-icon-delete"
type=
"text"
@
click=
"empty"
>
清空
清空
</el-button>
</el-button>
</div>
</div>
<el-scrollbar
class=
"center-scrollbar"
>
<el-scrollbar
class=
"center-scrollbar"
>
<el-row
class=
"center-board-row"
:gutter=
"formConf.gutter"
>
<el-row
class=
"center-board-row"
:gutter=
"formConf.gutter"
>
<el-form
<el-form
:size=
"formConf.size"
:size=
"formConf.size"
:label-position=
"formConf.labelPosition"
:label-position=
"formConf.labelPosition"
:disabled=
"formConf.disabled"
:disabled=
"formConf.disabled"
:label-width=
"formConf.labelWidth + 'px'"
:label-width=
"formConf.labelWidth + 'px'"
>
>
<draggable
class=
"drawing-board"
:list=
"drawingList"
:animation=
"340"
group=
"componentsGroup"
>
<draggable
class=
"drawing-board"
:list=
"drawingList"
:animation=
"340"
group=
"componentsGroup"
>
<draggable-item
<draggable-item
v-for=
"(element, index) in drawingList"
v-for=
"(element, index) in drawingList"
:key=
"element.renderKey"
:key=
"element.renderKey"
:drawing-list=
"drawingList"
:drawing-list=
"drawingList"
:element=
"element"
:element=
"element"
:index=
"index"
:index=
"index"
:active-id=
"activeId"
:active-id=
"activeId"
:form-conf=
"formConf"
:form-conf=
"formConf"
@
activeItem=
"activeFormItem"
@
activeItem=
"activeFormItem"
@
copyItem=
"drawingItemCopy"
@
copyItem=
"drawingItemCopy"
@
deleteItem=
"drawingItemDelete"
@
deleteItem=
"drawingItemDelete"
/>
/>
</draggable>
</draggable>
<div
v-show=
"!drawingList.length"
class=
"empty-info"
>
<div
v-show=
"!drawingList.length"
class=
"empty-info"
>
从左侧拖入或点选组件进行表单设计
从左侧拖入或点选组件进行表单设计
</div>
</div>
</el-form>
</el-form>
</el-row>
</el-row>
</el-scrollbar>
</el-scrollbar>
</div>
</div>
<right-panel
<right-panel
:active-data=
"activeData"
:active-data=
"activeData"
:form-conf=
"formConf"
:form-conf=
"formConf"
:show-field=
"!!drawingList.length"
:show-field=
"!!drawingList.length"
@
tag-change=
"tagChange"
@
tag-change=
"tagChange"
/>
/>
<code-type-dialog
<code-type-dialog
:visible.sync=
"dialogVisible"
:visible.sync=
"dialogVisible"
title=
"选择生成类型"
title=
"选择生成类型"
:show-file-name=
"showFileName"
:show-file-name=
"showFileName"
@
confirm=
"generate"
@
confirm=
"generate"
/>
/>
<input
id=
"copyNode"
type=
"hidden"
>
<input
id=
"copyNode"
type=
"hidden"
>
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
import
draggable
from
'
vuedraggable
'
import
draggable
from
'
vuedraggable
'
import
beautifier
from
'
js-beautify
'
import
beautifier
from
'
js-beautify
'
import
ClipboardJS
from
'
clipboard
'
import
ClipboardJS
from
'
clipboard
'
import
render
from
'
@/utils/generator/render
'
import
render
from
'
@/utils/generator/render
'
import
RightPanel
from
'
./RightPanel
'
import
RightPanel
from
'
./RightPanel
'
import
{
inputComponents
,
selectComponents
,
layoutComponents
,
formConf
}
from
'
@/utils/generator/config
'
import
{
inputComponents
,
selectComponents
,
layoutComponents
,
formConf
}
from
'
@/utils/generator/config
'
import
{
beautifierConf
,
titleCase
}
from
'
@/utils/index
'
import
{
beautifierConf
,
titleCase
}
from
'
@/utils/index
'
import
{
makeUpHtml
,
vueTemplate
,
vueScript
,
cssStyle
}
from
'
@/utils/generator/html
'
import
{
makeUpHtml
,
vueTemplate
,
vueScript
,
cssStyle
}
from
'
@/utils/generator/html
'
import
{
makeUpJs
}
from
'
@/utils/generator/js
'
import
{
makeUpJs
}
from
'
@/utils/generator/js
'
import
{
makeUpCss
}
from
'
@/utils/generator/css
'
import
{
makeUpCss
}
from
'
@/utils/generator/css
'
import
drawingDefa
l
ut
from
'
@/utils/generator/drawingDefa
l
ut
'
import
drawingDefau
l
t
from
'
@/utils/generator/drawingDefau
l
t
'
import
logo
from
'
@/assets/logo/logo.png
'
import
logo
from
'
@/assets/logo/logo.png
'
import
CodeTypeDialog
from
'
./CodeTypeDialog
'
import
CodeTypeDialog
from
'
./CodeTypeDialog
'
import
DraggableItem
from
'
./DraggableItem
'
import
DraggableItem
from
'
./DraggableItem
'
let
oldActiveId
let
oldActiveId
let
tempActiveData
let
tempActiveData
export
default
{
export
default
{
components
:
{
components
:
{
draggable
,
draggable
,
render
,
render
,
RightPanel
,
RightPanel
,
CodeTypeDialog
,
CodeTypeDialog
,
DraggableItem
DraggableItem
},
},
data
()
{
data
()
{
return
{
return
{
logo
,
logo
,
idGlobal
:
100
,
idGlobal
:
100
,
formConf
,
formConf
,
inputComponents
,
inputComponents
,
selectComponents
,
selectComponents
,
layoutComponents
,
layoutComponents
,
labelWidth
:
100
,
labelWidth
:
100
,
drawingList
:
drawingDefa
l
ut
,
drawingList
:
drawingDefau
l
t
,
drawingData
:
{},
drawingData
:
{},
activeId
:
drawingDefa
l
ut
[
0
].
formId
,
activeId
:
drawingDefau
l
t
[
0
].
formId
,
drawerVisible
:
false
,
drawerVisible
:
false
,
formData
:
{},
formData
:
{},
dialogVisible
:
false
,
dialogVisible
:
false
,
generateConf
:
null
,
generateConf
:
null
,
showFileName
:
false
,
showFileName
:
false
,
activeData
:
drawingDefa
l
ut
[
0
]
activeData
:
drawingDefau
l
t
[
0
]
}
}
},
},
created
()
{
created
()
{
// 防止 firefox 下 拖拽 会新打卡一个选项卡
// 防止 firefox 下 拖拽 会新打卡一个选项卡
document
.
body
.
ondrop
=
event
=>
{
document
.
body
.
ondrop
=
event
=>
{
event
.
preventDefault
()
event
.
preventDefault
()
event
.
stopPropagation
()
event
.
stopPropagation
()
}
}
},
},
watch
:
{
watch
:
{
// eslint-disable-next-line func-names
// eslint-disable-next-line func-names
'
activeData.label
'
:
function
(
val
,
oldVal
)
{
'
activeData.label
'
:
function
(
val
,
oldVal
)
{
if
(
if
(
this
.
activeData
.
placeholder
===
undefined
this
.
activeData
.
placeholder
===
undefined
||
!
this
.
activeData
.
tag
||
!
this
.
activeData
.
tag
||
oldActiveId
!==
this
.
activeId
||
oldActiveId
!==
this
.
activeId
)
{
)
{
return
return
}
}
this
.
activeData
.
placeholder
=
this
.
activeData
.
placeholder
.
replace
(
oldVal
,
''
)
+
val
this
.
activeData
.
placeholder
=
this
.
activeData
.
placeholder
.
replace
(
oldVal
,
''
)
+
val
},
},
activeId
:
{
activeId
:
{
handler
(
val
)
{
handler
(
val
)
{
oldActiveId
=
val
oldActiveId
=
val
},
},
immediate
:
true
immediate
:
true
}
}
},
},
mounted
()
{
mounted
()
{
const
clipboard
=
new
ClipboardJS
(
'
#copyNode
'
,
{
const
clipboard
=
new
ClipboardJS
(
'
#copyNode
'
,
{
text
:
trigger
=>
{
text
:
trigger
=>
{
const
codeStr
=
this
.
generateCode
()
const
codeStr
=
this
.
generateCode
()
this
.
$notify
({
this
.
$notify
({
title
:
'
成功
'
,
title
:
'
成功
'
,
message
:
'
代码已复制到剪切板,可粘贴。
'
,
message
:
'
代码已复制到剪切板,可粘贴。
'
,
type
:
'
success
'
type
:
'
success
'
})
})
return
codeStr
return
codeStr
}
}
})
})
clipboard
.
on
(
'
error
'
,
e
=>
{
clipboard
.
on
(
'
error
'
,
e
=>
{
this
.
$message
.
error
(
'
代码复制失败
'
)
this
.
$message
.
error
(
'
代码复制失败
'
)
})
})
},
},
methods
:
{
methods
:
{
activeFormItem
(
element
)
{
activeFormItem
(
element
)
{
this
.
activeData
=
element
this
.
activeData
=
element
this
.
activeId
=
element
.
formId
this
.
activeId
=
element
.
formId
},
},
onEnd
(
obj
,
a
)
{
onEnd
(
obj
,
a
)
{
if
(
obj
.
from
!==
obj
.
to
)
{
if
(
obj
.
from
!==
obj
.
to
)
{
this
.
activeData
=
tempActiveData
this
.
activeData
=
tempActiveData
this
.
activeId
=
this
.
idGlobal
this
.
activeId
=
this
.
idGlobal
}
}
},
},
addComponent
(
item
)
{
addComponent
(
item
)
{
const
clone
=
this
.
cloneComponent
(
item
)
const
clone
=
this
.
cloneComponent
(
item
)
this
.
drawingList
.
push
(
clone
)
this
.
drawingList
.
push
(
clone
)
this
.
activeFormItem
(
clone
)
this
.
activeFormItem
(
clone
)
},
},
cloneComponent
(
origin
)
{
cloneComponent
(
origin
)
{
const
clone
=
JSON
.
parse
(
JSON
.
stringify
(
origin
))
const
clone
=
JSON
.
parse
(
JSON
.
stringify
(
origin
))
clone
.
formId
=
++
this
.
idGlobal
clone
.
formId
=
++
this
.
idGlobal
clone
.
span
=
formConf
.
span
clone
.
span
=
formConf
.
span
clone
.
renderKey
=
+
new
Date
()
// 改变renderKey后可以实现强制更新组件
clone
.
renderKey
=
+
new
Date
()
// 改变renderKey后可以实现强制更新组件
if
(
!
clone
.
layout
)
clone
.
layout
=
'
colFormItem
'
if
(
!
clone
.
layout
)
clone
.
layout
=
'
colFormItem
'
if
(
clone
.
layout
===
'
colFormItem
'
)
{
if
(
clone
.
layout
===
'
colFormItem
'
)
{
clone
.
vModel
=
`field
${
this
.
idGlobal
}
`
clone
.
vModel
=
`field
${
this
.
idGlobal
}
`
clone
.
placeholder
!==
undefined
&&
(
clone
.
placeholder
+=
clone
.
label
)
clone
.
placeholder
!==
undefined
&&
(
clone
.
placeholder
+=
clone
.
label
)
tempActiveData
=
clone
tempActiveData
=
clone
}
else
if
(
clone
.
layout
===
'
rowFormItem
'
)
{
}
else
if
(
clone
.
layout
===
'
rowFormItem
'
)
{
delete
clone
.
label
delete
clone
.
label
clone
.
componentName
=
`row
${
this
.
idGlobal
}
`
clone
.
componentName
=
`row
${
this
.
idGlobal
}
`
clone
.
gutter
=
this
.
formConf
.
gutter
clone
.
gutter
=
this
.
formConf
.
gutter
tempActiveData
=
clone
tempActiveData
=
clone
}
}
return
tempActiveData
return
tempActiveData
},
},
AssembleFormData
()
{
AssembleFormData
()
{
this
.
formData
=
{
this
.
formData
=
{
fields
:
JSON
.
parse
(
JSON
.
stringify
(
this
.
drawingList
)),
fields
:
JSON
.
parse
(
JSON
.
stringify
(
this
.
drawingList
)),
...
this
.
formConf
...
this
.
formConf
}
}
},
},
generate
(
data
)
{
generate
(
data
)
{
const
func
=
this
[
`exec
${
titleCase
(
this
.
operationType
)}
`
]
const
func
=
this
[
`exec
${
titleCase
(
this
.
operationType
)}
`
]
this
.
generateConf
=
data
this
.
generateConf
=
data
func
&&
func
(
data
)
func
&&
func
(
data
)
},
},
execRun
(
data
)
{
execRun
(
data
)
{
this
.
AssembleFormData
()
this
.
AssembleFormData
()
this
.
drawerVisible
=
true
this
.
drawerVisible
=
true
},
},
execDownload
(
data
)
{
execDownload
(
data
)
{
const
codeStr
=
this
.
generateCode
()
const
codeStr
=
this
.
generateCode
()
const
blob
=
new
Blob
([
codeStr
],
{
type
:
'
text/plain;charset=utf-8
'
})
const
blob
=
new
Blob
([
codeStr
],
{
type
:
'
text/plain;charset=utf-8
'
})
this
.
$download
.
saveAs
(
blob
,
data
.
fileName
)
this
.
$download
.
saveAs
(
blob
,
data
.
fileName
)
},
},
execCopy
(
data
)
{
execCopy
(
data
)
{
document
.
getElementById
(
'
copyNode
'
).
click
()
document
.
getElementById
(
'
copyNode
'
).
click
()
},
},
empty
()
{
empty
()
{
this
.
$confirm
(
'
确定要清空所有组件吗?
'
,
'
提示
'
,
{
type
:
'
warning
'
}).
then
(
this
.
$confirm
(
'
确定要清空所有组件吗?
'
,
'
提示
'
,
{
type
:
'
warning
'
}).
then
(
()
=>
{
()
=>
{
this
.
drawingList
=
[]
this
.
drawingList
=
[]
}
}
)
)
},
},
drawingItemCopy
(
item
,
parent
)
{
drawingItemCopy
(
item
,
parent
)
{
let
clone
=
JSON
.
parse
(
JSON
.
stringify
(
item
))
let
clone
=
JSON
.
parse
(
JSON
.
stringify
(
item
))
clone
=
this
.
createIdAndKey
(
clone
)
clone
=
this
.
createIdAndKey
(
clone
)
parent
.
push
(
clone
)
parent
.
push
(
clone
)
this
.
activeFormItem
(
clone
)
this
.
activeFormItem
(
clone
)
},
},
createIdAndKey
(
item
)
{
createIdAndKey
(
item
)
{
item
.
formId
=
++
this
.
idGlobal
item
.
formId
=
++
this
.
idGlobal
item
.
renderKey
=
+
new
Date
()
item
.
renderKey
=
+
new
Date
()
if
(
item
.
layout
===
'
colFormItem
'
)
{
if
(
item
.
layout
===
'
colFormItem
'
)
{
item
.
vModel
=
`field
${
this
.
idGlobal
}
`
item
.
vModel
=
`field
${
this
.
idGlobal
}
`
}
else
if
(
item
.
layout
===
'
rowFormItem
'
)
{
}
else
if
(
item
.
layout
===
'
rowFormItem
'
)
{
item
.
componentName
=
`row
${
this
.
idGlobal
}
`
item
.
componentName
=
`row
${
this
.
idGlobal
}
`
}
}
if
(
Array
.
isArray
(
item
.
children
))
{
if
(
Array
.
isArray
(
item
.
children
))
{
item
.
children
=
item
.
children
.
map
(
childItem
=>
this
.
createIdAndKey
(
childItem
))
item
.
children
=
item
.
children
.
map
(
childItem
=>
this
.
createIdAndKey
(
childItem
))
}
}
return
item
return
item
},
},
drawingItemDelete
(
index
,
parent
)
{
drawingItemDelete
(
index
,
parent
)
{
parent
.
splice
(
index
,
1
)
parent
.
splice
(
index
,
1
)
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
const
len
=
this
.
drawingList
.
length
const
len
=
this
.
drawingList
.
length
if
(
len
)
{
if
(
len
)
{
this
.
activeFormItem
(
this
.
drawingList
[
len
-
1
])
this
.
activeFormItem
(
this
.
drawingList
[
len
-
1
])
}
}
})
})
},
},
generateCode
()
{
generateCode
()
{
const
{
type
}
=
this
.
generateConf
const
{
type
}
=
this
.
generateConf
this
.
AssembleFormData
()
this
.
AssembleFormData
()
const
script
=
vueScript
(
makeUpJs
(
this
.
formData
,
type
))
const
script
=
vueScript
(
makeUpJs
(
this
.
formData
,
type
))
const
html
=
vueTemplate
(
makeUpHtml
(
this
.
formData
,
type
))
const
html
=
vueTemplate
(
makeUpHtml
(
this
.
formData
,
type
))
const
css
=
cssStyle
(
makeUpCss
(
this
.
formData
))
const
css
=
cssStyle
(
makeUpCss
(
this
.
formData
))
return
beautifier
.
html
(
html
+
script
+
css
,
beautifierConf
.
html
)
return
beautifier
.
html
(
html
+
script
+
css
,
beautifierConf
.
html
)
},
},
download
()
{
download
()
{
this
.
dialogVisible
=
true
this
.
dialogVisible
=
true
this
.
showFileName
=
true
this
.
showFileName
=
true
this
.
operationType
=
'
download
'
this
.
operationType
=
'
download
'
},
},
run
()
{
run
()
{
this
.
dialogVisible
=
true
this
.
dialogVisible
=
true
this
.
showFileName
=
false
this
.
showFileName
=
false
this
.
operationType
=
'
run
'
this
.
operationType
=
'
run
'
},
},
copy
()
{
copy
()
{
this
.
dialogVisible
=
true
this
.
dialogVisible
=
true
this
.
showFileName
=
false
this
.
showFileName
=
false
this
.
operationType
=
'
copy
'
this
.
operationType
=
'
copy
'
},
},
tagChange
(
newTag
)
{
tagChange
(
newTag
)
{
newTag
=
this
.
cloneComponent
(
newTag
)
newTag
=
this
.
cloneComponent
(
newTag
)
newTag
.
vModel
=
this
.
activeData
.
vModel
newTag
.
vModel
=
this
.
activeData
.
vModel
newTag
.
formId
=
this
.
activeId
newTag
.
formId
=
this
.
activeId
newTag
.
span
=
this
.
activeData
.
span
newTag
.
span
=
this
.
activeData
.
span
delete
this
.
activeData
.
tag
delete
this
.
activeData
.
tag
delete
this
.
activeData
.
tagIcon
delete
this
.
activeData
.
tagIcon
delete
this
.
activeData
.
document
delete
this
.
activeData
.
document
Object
.
keys
(
newTag
).
forEach
(
key
=>
{
Object
.
keys
(
newTag
).
forEach
(
key
=>
{
if
(
this
.
activeData
[
key
]
!==
undefined
if
(
this
.
activeData
[
key
]
!==
undefined
&&
typeof
this
.
activeData
[
key
]
===
typeof
newTag
[
key
])
{
&&
typeof
this
.
activeData
[
key
]
===
typeof
newTag
[
key
])
{
newTag
[
key
]
=
this
.
activeData
[
key
]
newTag
[
key
]
=
this
.
activeData
[
key
]
}
}
})
})
this
.
activeData
=
newTag
this
.
activeData
=
newTag
this
.
updateDrawingList
(
newTag
,
this
.
drawingList
)
this
.
updateDrawingList
(
newTag
,
this
.
drawingList
)
},
},
updateDrawingList
(
newTag
,
list
)
{
updateDrawingList
(
newTag
,
list
)
{
const
index
=
list
.
findIndex
(
item
=>
item
.
formId
===
this
.
activeId
)
const
index
=
list
.
findIndex
(
item
=>
item
.
formId
===
this
.
activeId
)
if
(
index
>
-
1
)
{
if
(
index
>
-
1
)
{
list
.
splice
(
index
,
1
,
newTag
)
list
.
splice
(
index
,
1
,
newTag
)
}
else
{
}
else
{
list
.
forEach
(
item
=>
{
list
.
forEach
(
item
=>
{
if
(
Array
.
isArray
(
item
.
children
))
this
.
updateDrawingList
(
newTag
,
item
.
children
)
if
(
Array
.
isArray
(
item
.
children
))
this
.
updateDrawingList
(
newTag
,
item
.
children
)
})
})
}
}
}
}
}
}
}
}
</
script
>
</
script
>
<
style
lang=
'scss'
>
<
style
lang=
'scss'
>
body
,
html
{
body
,
html
{
margin
:
0
;
margin
:
0
;
padding
:
0
;
padding
:
0
;
background
:
#fff
;
background
:
#fff
;
-moz-osx-font-smoothing
:
grayscale
;
-moz-osx-font-smoothing
:
grayscale
;
-webkit-font-smoothing
:
antialiased
;
-webkit-font-smoothing
:
antialiased
;
text-rendering
:
optimizeLegibility
;
text-rendering
:
optimizeLegibility
;
font-family
:
-
apple-system
,
BlinkMacSystemFont
,
Segoe
UI
,
Helvetica
,
Arial
,
sans-serif
,
Apple
Color
Emoji
,
Segoe
UI
Emoji
;
font-family
:
-
apple-system
,
BlinkMacSystemFont
,
Segoe
UI
,
Helvetica
,
Arial
,
sans-serif
,
Apple
Color
Emoji
,
Segoe
UI
Emoji
;
}
}
input
,
textarea
{
input
,
textarea
{
font-family
:
-
apple-system
,
BlinkMacSystemFont
,
Segoe
UI
,
Helvetica
,
Arial
,
sans-serif
,
Apple
Color
Emoji
,
Segoe
UI
Emoji
;
font-family
:
-
apple-system
,
BlinkMacSystemFont
,
Segoe
UI
,
Helvetica
,
Arial
,
sans-serif
,
Apple
Color
Emoji
,
Segoe
UI
Emoji
;
}
}
.editor-tabs
{
.editor-tabs
{
background
:
#121315
;
background
:
#121315
;
.el-tabs__header
{
.el-tabs__header
{
margin
:
0
;
margin
:
0
;
border-bottom-color
:
#121315
;
border-bottom-color
:
#121315
;
.el-tabs__nav
{
.el-tabs__nav
{
border-color
:
#121315
;
border-color
:
#121315
;
}
}
}
}
.el-tabs__item
{
.el-tabs__item
{
height
:
32px
;
height
:
32px
;
line-height
:
32px
;
line-height
:
32px
;
color
:
#888a8e
;
color
:
#888a8e
;
border-left
:
1px
solid
#121315
!
important
;
border-left
:
1px
solid
#121315
!
important
;
background
:
#363636
;
background
:
#363636
;
margin-right
:
5px
;
margin-right
:
5px
;
user-select
:
none
;
user-select
:
none
;
}
}
.el-tabs__item.is-active
{
.el-tabs__item.is-active
{
background
:
#1e1e1e
;
background
:
#1e1e1e
;
border-bottom-color
:
#1e1e1e
!
important
;
border-bottom-color
:
#1e1e1e
!
important
;
color
:
#fff
;
color
:
#fff
;
}
}
.el-icon-edit
{
.el-icon-edit
{
color
:
#f1fa8c
;
color
:
#f1fa8c
;
}
}
.el-icon-document
{
.el-icon-document
{
color
:
#a95812
;
color
:
#a95812
;
}
}
}
}
// home
// home
.right-scrollbar
{
.right-scrollbar
{
.el-scrollbar__view
{
.el-scrollbar__view
{
padding
:
12px
18px
15px
15px
;
padding
:
12px
18px
15px
15px
;
}
}
}
}
.left-scrollbar
.el-scrollbar__wrap
{
.left-scrollbar
.el-scrollbar__wrap
{
box-sizing
:
border-box
;
box-sizing
:
border-box
;
overflow-x
:
hidden
!
important
;
overflow-x
:
hidden
!
important
;
margin-bottom
:
0
!
important
;
margin-bottom
:
0
!
important
;
}
}
.center-tabs
{
.center-tabs
{
.el-tabs__header
{
.el-tabs__header
{
margin-bottom
:
0
!
important
;
margin-bottom
:
0
!
important
;
}
}
.el-tabs__item
{
.el-tabs__item
{
width
:
50%
;
width
:
50%
;
text-align
:
center
;
text-align
:
center
;
}
}
.el-tabs__nav
{
.el-tabs__nav
{
width
:
100%
;
width
:
100%
;
}
}
}
}
.reg-item
{
.reg-item
{
padding
:
12px
6px
;
padding
:
12px
6px
;
background
:
#f8f8f8
;
background
:
#f8f8f8
;
position
:
relative
;
position
:
relative
;
border-radius
:
4px
;
border-radius
:
4px
;
.close-btn
{
.close-btn
{
position
:
absolute
;
position
:
absolute
;
right
:
-6px
;
right
:
-6px
;
top
:
-6px
;
top
:
-6px
;
display
:
block
;
display
:
block
;
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
line-height
:
16px
;
line-height
:
16px
;
background
:
rgba
(
0
,
0
,
0
,
0
.2
);
background
:
rgba
(
0
,
0
,
0
,
0
.2
);
border-radius
:
50%
;
border-radius
:
50%
;
color
:
#fff
;
color
:
#fff
;
text-align
:
center
;
text-align
:
center
;
z-index
:
1
;
z-index
:
1
;
cursor
:
pointer
;
cursor
:
pointer
;
font-size
:
12px
;
font-size
:
12px
;
&
:hover
{
&
:hover
{
background
:
rgba
(
210
,
23
,
23
,
0
.5
)
background
:
rgba
(
210
,
23
,
23
,
0
.5
)
}
}
}
}
&
+
.reg-item
{
&
+
.reg-item
{
margin-top
:
18px
;
margin-top
:
18px
;
}
}
}
}
.action-bar
{
.action-bar
{
&
.el-button
+
.el-button
{
&
.el-button
+
.el-button
{
margin-left
:
15px
;
margin-left
:
15px
;
}
}
&
i
{
&
i
{
font-size
:
20px
;
font-size
:
20px
;
vertical-align
:
middle
;
vertical-align
:
middle
;
position
:
relative
;
position
:
relative
;
top
:
-1px
;
top
:
-1px
;
}
}
}
}
.custom-tree-node
{
.custom-tree-node
{
width
:
100%
;
width
:
100%
;
font-size
:
14px
;
font-size
:
14px
;
.node-operation
{
.node-operation
{
float
:
right
;
float
:
right
;
}
}
i
[
class
*=
"el-icon"
]
+
i
[
class
*=
"el-icon"
]
{
i
[
class
*=
"el-icon"
]
+
i
[
class
*=
"el-icon"
]
{
margin-left
:
6px
;
margin-left
:
6px
;
}
}
.el-icon-plus
{
.el-icon-plus
{
color
:
#409EFF
;
color
:
#409EFF
;
}
}
.el-icon-delete
{
.el-icon-delete
{
color
:
#157a0c
;
color
:
#157a0c
;
}
}
}
}
.left-scrollbar
.el-scrollbar__view
{
.left-scrollbar
.el-scrollbar__view
{
overflow-x
:
hidden
;
overflow-x
:
hidden
;
}
}
.el-rate
{
.el-rate
{
display
:
inline-block
;
display
:
inline-block
;
vertical-align
:
text-top
;
vertical-align
:
text-top
;
}
}
.el-upload__tip
{
.el-upload__tip
{
line-height
:
1
.2
;
line-height
:
1
.2
;
}
}
$selectedColor
:
#f6f7ff
;
$selectedColor
:
#f6f7ff
;
$lighterBlue
:
#409EFF
;
$lighterBlue
:
#409EFF
;
.container
{
.container
{
position
:
relative
;
position
:
relative
;
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
.components-list
{
.components-list
{
padding
:
8px
;
padding
:
8px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
height
:
100%
;
height
:
100%
;
.components-item
{
.components-item
{
display
:
inline-block
;
display
:
inline-block
;
width
:
48%
;
width
:
48%
;
margin
:
1%
;
margin
:
1%
;
transition
:
transform
0ms
!
important
;
transition
:
transform
0ms
!
important
;
}
}
}
}
.components-draggable
{
.components-draggable
{
padding-bottom
:
20px
;
padding-bottom
:
20px
;
}
}
.components-title
{
.components-title
{
font-size
:
14px
;
font-size
:
14px
;
color
:
#222
;
color
:
#222
;
margin
:
6px
2px
;
margin
:
6px
2px
;
.svg-icon
{
.svg-icon
{
color
:
#666
;
color
:
#666
;
font-size
:
18px
;
font-size
:
18px
;
}
}
}
}
.components-body
{
.components-body
{
padding
:
8px
10px
;
padding
:
8px
10px
;
background
:
$selectedColor
;
background
:
$selectedColor
;
font-size
:
12px
;
font-size
:
12px
;
cursor
:
move
;
cursor
:
move
;
border
:
1px
dashed
$selectedColor
;
border
:
1px
dashed
$selectedColor
;
border-radius
:
3px
;
border-radius
:
3px
;
.svg-icon
{
.svg-icon
{
color
:
#777
;
color
:
#777
;
font-size
:
15px
;
font-size
:
15px
;
}
}
&
:hover
{
&
:hover
{
border
:
1px
dashed
#787be8
;
border
:
1px
dashed
#787be8
;
color
:
#787be8
;
color
:
#787be8
;
.svg-icon
{
.svg-icon
{
color
:
#787be8
;
color
:
#787be8
;
}
}
}
}
}
}
.left-board
{
.left-board
{
width
:
260px
;
width
:
260px
;
position
:
absolute
;
position
:
absolute
;
left
:
0
;
left
:
0
;
top
:
0
;
top
:
0
;
height
:
100vh
;
height
:
100vh
;
}
}
.left-scrollbar
{
.left-scrollbar
{
height
:
calc
(
100vh
-
42px
);
height
:
calc
(
100vh
-
42px
);
overflow
:
hidden
;
overflow
:
hidden
;
}
}
.center-scrollbar
{
.center-scrollbar
{
height
:
calc
(
100vh
-
42px
);
height
:
calc
(
100vh
-
42px
);
overflow
:
hidden
;
overflow
:
hidden
;
border-left
:
1px
solid
#f1e8e8
;
border-left
:
1px
solid
#f1e8e8
;
border-right
:
1px
solid
#f1e8e8
;
border-right
:
1px
solid
#f1e8e8
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
}
.center-board
{
.center-board
{
height
:
100vh
;
height
:
100vh
;
width
:
auto
;
width
:
auto
;
margin
:
0
350px
0
260px
;
margin
:
0
350px
0
260px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
}
.empty-info
{
.empty-info
{
position
:
absolute
;
position
:
absolute
;
top
:
46%
;
top
:
46%
;
left
:
0
;
left
:
0
;
right
:
0
;
right
:
0
;
text-align
:
center
;
text-align
:
center
;
font-size
:
18px
;
font-size
:
18px
;
color
:
#ccb1ea
;
color
:
#ccb1ea
;
letter-spacing
:
4px
;
letter-spacing
:
4px
;
}
}
.action-bar
{
.action-bar
{
position
:
relative
;
position
:
relative
;
height
:
42px
;
height
:
42px
;
text-align
:
right
;
text-align
:
right
;
padding
:
0
15px
;
padding
:
0
15px
;
box-sizing
:
border-box
;;
box-sizing
:
border-box
;;
border
:
1px
solid
#f1e8e8
;
border
:
1px
solid
#f1e8e8
;
border-top
:
none
;
border-top
:
none
;
border-left
:
none
;
border-left
:
none
;
.delete-btn
{
.delete-btn
{
color
:
#F56C6C
;
color
:
#F56C6C
;
}
}
}
}
.logo-wrapper
{
.logo-wrapper
{
position
:
relative
;
position
:
relative
;
height
:
42px
;
height
:
42px
;
background
:
#fff
;
background
:
#fff
;
border-bottom
:
1px
solid
#f1e8e8
;
border-bottom
:
1px
solid
#f1e8e8
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
}
.logo
{
.logo
{
position
:
absolute
;
position
:
absolute
;
left
:
12px
;
left
:
12px
;
top
:
6px
;
top
:
6px
;
line-height
:
30px
;
line-height
:
30px
;
color
:
#00afff
;
color
:
#00afff
;
font-weight
:
600
;
font-weight
:
600
;
font-size
:
17px
;
font-size
:
17px
;
white-space
:
nowrap
;
white-space
:
nowrap
;
>
img
{
>
img
{
width
:
30px
;
width
:
30px
;
height
:
30px
;
height
:
30px
;
vertical-align
:
top
;
vertical-align
:
top
;
}
}
.github
{
.github
{
display
:
inline-block
;
display
:
inline-block
;
vertical-align
:
sub
;
vertical-align
:
sub
;
margin-left
:
15px
;
margin-left
:
15px
;
>
img
{
>
img
{
height
:
22px
;
height
:
22px
;
}
}
}
}
}
}
.center-board-row
{
.center-board-row
{
padding
:
12px
12px
15px
12px
;
padding
:
12px
12px
15px
12px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
&
>
.el-form
{
&
>
.el-form
{
// 69 = 12+15+42
// 69 = 12+15+42
height
:
calc
(
100vh
-
69px
);
height
:
calc
(
100vh
-
69px
);
}
}
}
}
.drawing-board
{
.drawing-board
{
height
:
100%
;
height
:
100%
;
position
:
relative
;
position
:
relative
;
.components-body
{
.components-body
{
padding
:
0
;
padding
:
0
;
margin
:
0
;
margin
:
0
;
font-size
:
0
;
font-size
:
0
;
}
}
.sortable-ghost
{
.sortable-ghost
{
position
:
relative
;
position
:
relative
;
display
:
block
;
display
:
block
;
overflow
:
hidden
;
overflow
:
hidden
;
&
::before
{
&
::before
{
content
:
" "
;
content
:
" "
;
position
:
absolute
;
position
:
absolute
;
left
:
0
;
left
:
0
;
right
:
0
;
right
:
0
;
top
:
0
;
top
:
0
;
height
:
3px
;
height
:
3px
;
background
:
rgb
(
89
,
89
,
223
);
background
:
rgb
(
89
,
89
,
223
);
z-index
:
2
;
z-index
:
2
;
}
}
}
}
.components-item.sortable-ghost
{
.components-item.sortable-ghost
{
width
:
100%
;
width
:
100%
;
height
:
60px
;
height
:
60px
;
background-color
:
$selectedColor
;
background-color
:
$selectedColor
;
}
}
.active-from-item
{
.active-from-item
{
&
>
.el-form-item
{
&
>
.el-form-item
{
background
:
$selectedColor
;
background
:
$selectedColor
;
border-radius
:
6px
;
border-radius
:
6px
;
}
}
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
display
:
initial
;
display
:
initial
;
}
}
&
>
.component-name
{
&
>
.component-name
{
color
:
$lighterBlue
;
color
:
$lighterBlue
;
}
}
}
}
.el-form-item
{
.el-form-item
{
margin-bottom
:
15px
;
margin-bottom
:
15px
;
}
}
}
}
.drawing-item
{
.drawing-item
{
position
:
relative
;
position
:
relative
;
cursor
:
move
;
cursor
:
move
;
&
.unfocus-bordered
:not
(
.activeFromItem
)
>
div
:first-child
{
&
.unfocus-bordered
:not
(
.activeFromItem
)
>
div
:first-child
{
border
:
1px
dashed
#ccc
;
border
:
1px
dashed
#ccc
;
}
}
.el-form-item
{
.el-form-item
{
padding
:
12px
10px
;
padding
:
12px
10px
;
}
}
}
}
.drawing-row-item
{
.drawing-row-item
{
position
:
relative
;
position
:
relative
;
cursor
:
move
;
cursor
:
move
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
border
:
1px
dashed
#ccc
;
border
:
1px
dashed
#ccc
;
border-radius
:
3px
;
border-radius
:
3px
;
padding
:
0
2px
;
padding
:
0
2px
;
margin-bottom
:
15px
;
margin-bottom
:
15px
;
.drawing-row-item
{
.drawing-row-item
{
margin-bottom
:
2px
;
margin-bottom
:
2px
;
}
}
.el-col
{
.el-col
{
margin-top
:
22px
;
margin-top
:
22px
;
}
}
.el-form-item
{
.el-form-item
{
margin-bottom
:
0
;
margin-bottom
:
0
;
}
}
.drag-wrapper
{
.drag-wrapper
{
min-height
:
80px
;
min-height
:
80px
;
}
}
&
.active-from-item
{
&
.active-from-item
{
border
:
1px
dashed
$lighterBlue
;
border
:
1px
dashed
$lighterBlue
;
}
}
.component-name
{
.component-name
{
position
:
absolute
;
position
:
absolute
;
top
:
0
;
top
:
0
;
left
:
0
;
left
:
0
;
font-size
:
12px
;
font-size
:
12px
;
color
:
#bbb
;
color
:
#bbb
;
display
:
inline-block
;
display
:
inline-block
;
padding
:
0
6px
;
padding
:
0
6px
;
}
}
}
}
.drawing-item
,
.drawing-row-item
{
.drawing-item
,
.drawing-row-item
{
&
:hover
{
&
:hover
{
&
>
.el-form-item
{
&
>
.el-form-item
{
background
:
$selectedColor
;
background
:
$selectedColor
;
border-radius
:
6px
;
border-radius
:
6px
;
}
}
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
display
:
initial
;
display
:
initial
;
}
}
}
}
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
display
:
none
;
display
:
none
;
position
:
absolute
;
position
:
absolute
;
top
:
-10px
;
top
:
-10px
;
width
:
22px
;
width
:
22px
;
height
:
22px
;
height
:
22px
;
line-height
:
22px
;
line-height
:
22px
;
text-align
:
center
;
text-align
:
center
;
border-radius
:
50%
;
border-radius
:
50%
;
font-size
:
12px
;
font-size
:
12px
;
border
:
1px
solid
;
border
:
1px
solid
;
cursor
:
pointer
;
cursor
:
pointer
;
z-index
:
1
;
z-index
:
1
;
}
}
&
>
.drawing-item-copy
{
&
>
.drawing-item-copy
{
right
:
56px
;
right
:
56px
;
border-color
:
$lighterBlue
;
border-color
:
$lighterBlue
;
color
:
$lighterBlue
;
color
:
$lighterBlue
;
background
:
#fff
;
background
:
#fff
;
&
:hover
{
&
:hover
{
background
:
$lighterBlue
;
background
:
$lighterBlue
;
color
:
#fff
;
color
:
#fff
;
}
}
}
}
&
>
.drawing-item-delete
{
&
>
.drawing-item-delete
{
right
:
24px
;
right
:
24px
;
border-color
:
#F56C6C
;
border-color
:
#F56C6C
;
color
:
#F56C6C
;
color
:
#F56C6C
;
background
:
#fff
;
background
:
#fff
;
&
:hover
{
&
:hover
{
background
:
#F56C6C
;
background
:
#F56C6C
;
color
:
#fff
;
color
:
#fff
;
}
}
}
}
}
}
</
style
>
</
style
>
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment