Commit 4fe17893 authored by 何虹's avatar 何虹 💬

新版ui

parent 817dff1e
......@@ -17,12 +17,13 @@
"build-bundle": "vue-cli-service build --target lib --name hs-sky-ui ./src/packages/index.js"
},
"dependencies": {
"hs-util-js": "^1.0.4",
"axios": "^0.19.2",
"core-js": "^3.6.4",
"echarts": "^4.7.0",
"element-ui": "^2.14.1",
"file-saver": "^2.0.5",
"hs-util-js": "^1.0.4",
"i": "^0.3.6",
"jsoneditor": "^8.6.5",
"lodash": "^4.17.15",
"mathjs": "^8.1.0",
......@@ -30,6 +31,8 @@
"script-loader": "^0.7.2",
"sortablejs": "^1.12.0",
"vue": "^2.6.11",
"vue-codemirror": "^4.0.6",
"vue-qr": "^2.3.0",
"vue-video-player": "^5.0.2",
"xlsx": "^0.16.9"
},
......
import Vue from 'vue'
window.Vue=Vue
import App from './App.vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import tt from './packages/index'
window.Vue = Vue
Vue.config.productionTip = false
Vue.use(ElementUI)
Vue.use(tt)
......
......@@ -2,7 +2,7 @@
<el-dialog
top='10px'
:visible.sync="dialogVisible"
width="80%"
width="100%"
title='字段设置'
:append-to-body='true'
class="innerDialogBox"
......@@ -10,6 +10,9 @@
:close-on-click-modal='false'>
<div class="toopBox1">
<el-button-group >
<el-button @click='print'>
输入
</el-button>
<el-button @click="addPropViSayncTop()" size='mini' type="primary" icon="el-icon-plus"></el-button>
<el-button @click='deleteAll' size='mini' type="primary" icon="el-icon-delete"></el-button>
<el-button @click='upStupe' size='mini' type="primary" icon="el-icon-arrow-left">上移</el-button>
......@@ -46,7 +49,7 @@
</el-select>
</template>
</el-table-column>
<el-table-column prop='lineNumber' label='行号' width='80' v-if='controlType!=="queryArea"'>
<el-table-column prop='lineNumber' label='行号' width='80' v-if="controlType!='queryArea'">
<template slot-scope="scope">
<el-input clearable v-model="scope.row.lineNumber" size='mini'></el-input>
</template>
......@@ -132,12 +135,12 @@
<el-input clearable v-model="scope.row.spanRatio" size='mini'></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width='300' fixed="right">
<el-table-column label="操作" width='200px' fixed="right">
<template slot-scope="scope">
<el-button size='mini' @click='addAsyncColumn(scope.$index)'>新增</el-button>
<el-button size='mini' @click="deletAsyncProp(scope.$index)">删除</el-button>
<el-button size='mini' @click="upGoAsync(scope.$index)">上移</el-button>
<el-button size='mini' @click="downGoAsync(scope.$index)">下移</el-button>
<el-button class="handleBut" size='mini' @click='addAsyncColumn(scope.$index)'>新增</el-button>
<el-button class="handleBut" size='mini' @click="deletAsyncProp(scope.$index)">删除</el-button>
<el-button class="handleBut" size='mini' @click="upGoAsync(scope.$index)">上移</el-button>
<el-button class="handleBut" size='mini' @click="downGoAsync(scope.$index)">下移</el-button>
</template>
</el-table-column>
</el-table>
......@@ -150,7 +153,7 @@
</div>
<div v-if="privewComVi" class="asyncBox">
<hsDyncForm
:type='controlType'
:type='type'
:formColumns='formColumns_'
:formParms='formParms'
:config='asyncFormItemComponentTableConfig'
......@@ -161,7 +164,7 @@
</template>
<script>
import _ from 'lodash'
import uuidv1 from 'uuid/v1'
import { v1 as uuidv1 } from 'uuid'
export default {
name: 'dyncFormPropSet',
props: {
......@@ -171,9 +174,14 @@ export default {
return []
}
},
controlType: {},
elInfo: {}
},
computed: {
// 控件类型
controlType: function() {
return this.$attrs.type
}
},
data() {
return {
dialogVisible: false,
......@@ -303,6 +311,11 @@ export default {
value: 'hsInputSelect',
label: '25hs-input-select',
isRequireControlName: true
},
{
value: 'hsQrcode',
label: '26hs-qrcode',
isRequireControlName: true
}
],
formColumns_: [],
......@@ -333,6 +346,9 @@ export default {
},
methods: {
print() {
console.log(this.$attrs)
},
showColumn(prop) {
if (typeof prop === 'string') {
return false
......@@ -519,4 +535,8 @@ export default {
width: 100%;
overflow: scroll;
}
.handleBut{
padding: 0;
padding-right: 5px;
}
</style>
......@@ -66,7 +66,7 @@
</template>
<script>
import _ from 'lodash'
import uuidv1 from 'uuid/v1'
import { v1 as uuidv1 } from 'uuid'
export default {
name: 'hsTabsFormSet',
props: {
......
......@@ -1212,6 +1212,16 @@ const hsPageConfigSingle = {
showQueryComponent: false
}
},
'entityInfo': {
'indexSearchParamEntityInfo': {
'defaultValue': {
}
},
'mainSearchParamEntityInfo': {
'defaultValue': {
}
}
},
'entity': { // 实体节点
'index': {
'isInitNewDefault': false, // 初始化新增默认值
......@@ -1236,7 +1246,6 @@ const hsPageConfigSingle = {
'initNewDefaultOnce': true, // 是否只调用一次
'check': {}, // 修改时数据校验
'enableBillFlow': true, // 是否开启审核流程
'queryDefault': {}, // 查询默认值
'isHideQueryZone': false, // 是否隐藏搜索区域
'group': '', // 分组
'table_name': '', // 表名
......@@ -1375,6 +1384,12 @@ const hsPageConfigSingleForm = {
isTabsForm: false
}
},
'entityInfo': {
'mainSearchParamEntityInfo': {
'defaultValue': {
}
}
},
'entity': {
'main': {
'isInitNewDefault': false, // 初始化新增默认值
......@@ -1416,6 +1431,16 @@ const hsPageConfigHdrDtl = {
tableHeightAdaption: false
}
},
'entityInfo': {
'mainSearchParamEntityInfo': {
'defaultValue': {
}
},
'dtlSearchParamEntityInfo': {
'defaultValue': {
}
}
},
'entity': {
'childs': [
],
......@@ -1475,6 +1500,16 @@ const hsPageConfigBill = {
showQueryComponent: false
}
},
'entityInfo': {
'indexSearchParamEntityInfo': {
'defaultValue': {
}
},
'mainSearchParamEntityInfo': {
'defaultValue': {
}
}
},
'entity': {
'index': {
'isInitNewDefault': false, // 初始化新增默认值
......@@ -1495,7 +1530,6 @@ const hsPageConfigBill = {
'main': {
'isInitNewDefault': false, // 初始化新增默认值
'initNewDefaultOnce': true, // 是否只调用一次
'queryDefault': {},
'isHideQueryZone': false,
'group': '',
'table_name': '',
......@@ -1533,9 +1567,14 @@ const hsPageConfigImport = {
tableHeightAdaption: false
}
},
'entityInfo': {
'mainSearchParamEntityInfo': {
'defaultValue': {
}
}
},
'entity': {
'main': {
'queryDefault': {}, // 默认查询参数
'isHideQueryZone': false, // 是否隐藏查询区域
'group': '', // 分组
'table_name': '', // 表名
......@@ -1560,6 +1599,16 @@ const hsPageConfigHdrDtlImport = {
}
},
'entityInfo': {
'mainSearchParamEntityInfo': {
'defaultValue': {
}
},
'dtlSearchParamEntityInfo': {
'defaultValue': {
}
}
},
'entity': {
'main': {
'isHideQueryZone': false,
......@@ -2415,6 +2464,16 @@ const hsPageConfigDragList = {
showQueryComponent: false
}
},
'entityInfo': {
'rightSearchParamEntityInfo': {
'defaultValue': {
}
},
'LeftSearchParamEntityInfo': {
'defaultValue': {
}
}
},
'entity': {
'right': {
'isInitNewDefault': false, // 初始化新增默认值
......@@ -2458,6 +2517,18 @@ const hsPageConfigDragList = {
},
sourceData: []
}
const hsQrcode = {
config: {
flag: 'hsQrcode',
text: '暂无信息',
size: 100,
logoSrc: '',
colorLight: '',
colorDark: '',
backgroundColor: ''
},
sourceData: []
}
const mockData = {
hsLineBar: initLineBar,
hsPie: initPie,
......@@ -2518,6 +2589,7 @@ const mockData = {
hsButtonToolsSingleForm,
hsPageConfigSingleForm,
hsDragList,
hsPageConfigDragList
hsPageConfigDragList,
hsQrcode
}
export default mockData
<template>
<el-dialog
top='5px'
:visible.sync="dialogVisible"
width="80%" title='列样式设置'
:append-to-body='true' :close-on-click-modal='false'>
......
This diff is collapsed.
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
This diff is collapsed.
<template>
<div class="inner_table_box">
<el-table
ref="multipleTable"
:data="table_data"
border
:height="height"
tooltip-effect="dark"
@row-click='row_click'
:highlight-current-row='true'
:style="table_style"
>
<el-table-column v-if='selection' type="selection" width="55"></el-table-column>
<template v-for="(column,index) in table_columns">
<el-table-column
:show-overflow-tooltip="column.showOverflowTooltip"
:key="index"
:prop="column.prop"
:label="column.label"
v-if="!column.slotName"
:width="column.width || 120"
:fixed="column.fixed"
/>
<el-table-column
:show-overflow-tooltip="column.showOverflowTooltip"
:key="index"
:prop="column.prop"
:label="column.label"
v-if="column.slotName"
:width="column.width || 120"
:fixed="column.fixed"
>
<template slot-scope="scope">
<slot :name="column.slotName" :row='scope.row'></slot>
</template>
</el-table-column>
</template>
<slot name="table_handle"></slot>
</el-table>
</div>
</template>
<script>
export default {
props: {
table_columns: {},
table_data: {},
selection: {
default: false
},
tools: {},
table_style: {},
height: {
default: 600
}
},
data() {
return {
}
},
methods: {
row_click(row) {
this.$emit('row_click', row)
}
}
}
</script>
<style scoped>
.inner_table_box >>> .el-table__body tr.current-row>td{
background-color: #409EFF;
}
</style>
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -43,7 +43,7 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'button-group-component',
......@@ -203,7 +203,7 @@ export default {
} else if (buttonList) {
tempList = buttonList
}
const user_info = sessionStorage['user_info']
if (user_info) {
const user_info_json = JSON.parse(user_info)
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -11,7 +11,7 @@
</el-button>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
data() {
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -14,7 +14,7 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'carousel-component',
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -24,7 +24,7 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'cascader-component',
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -12,7 +12,7 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'checkbox-group-component',
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -7,7 +7,7 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins:[commonMixins],
name: 'hs-checkbox',
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
import uuidv1 from 'uuid/v1'
import { v1 as uuidv1 } from 'uuid'
export default {
data() {
return {
......
......@@ -5,7 +5,7 @@
>
<slot></slot>
<hs-jsoneditor
v-model='jsoneditorVisible'
:visible.sync='jsoneditorVisible'
:elInfo='elInfo'
v-bind="$attrs"
v-on="$listeners"
......@@ -27,4 +27,4 @@ export default {
width: 100%;
height: auto;
}
</style>
\ No newline at end of file
</style>
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -2,7 +2,7 @@
<span>{{valueTxt}}</span>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'computed-component',
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -19,7 +19,7 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
import moment from 'moment'
export default {
mixins: [commonMixins],
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -21,7 +21,7 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'date-picker-component',
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
<template>
<hs-dialog
:visible='visible'
:allSourceData='hsDialogSourceData'
:elInfo='elInfoDialog'
@close='close'
v-bind="$attrs"
v-on="$listeners"
>
<div
slot="body"
v-if='visible'
>
<hs-dync-form
type='ediArea'
:style="{'height':dialogHeight}"
:formParms='detailForm'
:elInfo='asyncElInfoEdiArea'
:allSourceData='dyncFormEdiAreaMain'
v-bind="$attrs"
v-on="$listeners"
>
</hs-dync-form>
</div>
<div
slot="footer"
class="hs-dialog-footer"
>
<el-row>
<el-button-group style="float: right">
<hs-button-group
:allSourceData='HsButtonToolsSourceData'
:elInfo='elInfoHsButtonTools'
@itemClick='itemClick'
v-bind="$attrs"
v-on="$listeners"
>
</hs-button-group>
</el-button-group>
</el-row>
</div>
</hs-dialog>
</template>
<script>
export default {
name: 'hs-dialog-dyncform',
data() {
return {
visible: false,
elInfoDialog: {
el: 'hsDialog',
position: ''
},
hsDialogSourceData: {
config: {},
sourceData: []
},
detailForm: {},
asyncElInfoEdiArea: {
el: 'hsDyncFormComponent',
position: ''
},
dyncFormEdiAreaMain: {
config: {},
sourceData: []
},
HsButtonToolsSourceData: {
config: {},
sourceData: []
},
elInfoHsButtonTools: {
el: 'hsButtonToolsInDyncDialog',
position: ''
},
identify: null,
uc: null,
confirmCallback: null,
cancelCallback: null,
formColumn: [],
emptyInvalid: [undefined, null, 'undefined', 'null', ''],
dialogHeight: '100%' // index 编辑弹框默认高度
}
},
methods: {
async close() {
if (this.resolve) {
await this.resolve()
} else if (this.cancelCallback) {
await this.cancelCallback(this.detailForm)
}
this.visible = false
this.detailForm = {}
},
itemClick(item) {
const { click } = item
switch (click) {
case 'confirm':
this.confirm()
break
case 'cancel':
this.close()
break
}
},
async confirm() {
// 做一个表单必填验证
const f = this.checkRequireColumn(this.formColumn, this.detailForm)
if (!f) return
if (this.confirmCallback) {
const r = await this.confirmCallback(this.detailForm)
if (r) {
this.visible = false // 让使用者自己去调用是否应该关闭
}
} else if (this.resolve) {
await this.resolve(this.detailForm)
}
// this.visible = false // 让使用者自己去调用是否应该关闭
},
checkRequireColumn(detailFormColumn, detailForm) {
const detailFormColumn_ = detailFormColumn.filter(
item => !item.isHide && item.isRequired
)
let f = true
for (const item of detailFormColumn_) {
const value = detailForm[item.prop]
if (this.emptyInvalid.includes(value)) {
this.$message.error(`${item.label}不能为空!`)
f = false
break
}
}
return f
},
initComponentInfo() {
this.elInfoDialog.position = this.identify + '_hsDialog'
this.asyncElInfoEdiArea.position = this.identify + '_dyncForm'
this.elInfoHsButtonTools.position = this.identify + '_hsButtonTools'
},
/**
* identify 当前弹出框的标识
* uc uc
* formData 表单的初始数据
* config 未来可能会有的配置
*/
show(identify, uc, formData = {}, confirm, cancel) {
this.detailForm = formData
this.identify = identify
this.uc = uc
this.initComponentInfo()
this.pageControsInit()
this.visible = true
if (!confirm && !cancel) {
return new Promise((resolve, reject) => {
this.resolve = resolve
this.reject = reject
})
} else {
if (confirm) {
this.confirmCallback = confirm
}
if (cancel) {
this.cancelCallback = cancel
}
}
},
/**
* 页面组件配置绑定到视图,这一步要等页面所有控件请求、action 请求完, 再执行
*/
pageControsInit() {
this.initHsDialog(this.elInfoDialog)
this.initAsyncFormEdiArea(this.asyncElInfoEdiArea)
this.initHsButtonTools(this.elInfoHsButtonTools)
},
/**
* 初始化index部分的按钮组
*/
initHsDialog(elInfo) {
const { position, el } = elInfo
const target = this.uc.findTargetControl(position, el)
if (!target) return
this.hsDialogSourceData = target
this.dialogHeight = target.config.height || this.dialogHeight
},
initAsyncFormEdiArea(elInfo) {
// 初始化main 的详情的修改动态表单
const { position, el } = elInfo
const target = this.uc.findTargetControl(position, el)
if (!target) return
const config = target.config
const formColumn = config.formColumn || []
this.dyncFormEdiAreaMain = target
this.formColumn = formColumn
},
initHsButtonTools(elInfo) {
// 初始化main上面的工具栏
const { position, el } = elInfo
const target = this.uc.findTargetControl(position, el)
if (!target) return
this.HsButtonToolsSourceData = target
}
}
}
</script>
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
<template>
<hs-dialog
ref='hsDialog'
:visible='dialogVisible'
:allSourceData='hsDialogConfig'
@close='close'
>
<div slot="body">
<iframe
id='hsDialogIframe'
name="hsDialogIframe"
:src='pageSrc'
style="width:100%;height:600px;padding-top:10px"
sandbox="allow-same-origin allow-scripts allow-forms allow-top-navigation allow-popups"
></iframe>
</div>
</hs-dialog>
</template>
<script>
export default {
name: 'hs-dialog-iframepage',
data() {
return {
pageSrc: '',
hsDialogConfig: {
config: {
title: ''
},
sourceData: []
},
dialogVisible: false,
message: null,
confirmCallback: null,
cancelCallback: null
}
},
mounted() {
console.log('mounted')
},
destroyed() {
console.log('destroyed')
this.removeEventListener()
},
methods: {
postMessage(data, type = 'hsData') {
if (!data) return
// const hsIframe = document.getElementById('hsDialogIframe')
const message = {
type,
data
}
hsDialogIframe.window.postMessage(message, '*')
},
addEventListener() {
window.addEventListener('message', this.handleMessage, true)
},
removeEventListener() {
window.removeEventListener('message', this.handleMessage, true)
},
handleMessage(message) {
const messageData = message.data || {}
const type = messageData.type
const data = messageData.data
if (type === 'popSaveData') {
this.ok(data, messageData)
} else if (type === 'isReadeyWindow') {
console.log('给child 发消息')
this.postMessage(this.message)
} else if (type === 'changeCaption') { // 修改弹出框标题,显示form_id
setTimeout(() => { // 延迟设置title+form_id
this.setCapTion(data)
}, 1000)
}
},
setCapTion(data) {
const formId = data.formId
const title = this.hsDialogConfig.config.title
this.hsDialogConfig.config.title = title ? `${title}(${formId})` : `(${formId})`
},
async ok(data, message) {
if (this.confirmCallback) {
await this.confirmCallback(data, message)
}
console.log('oko----')
const closeDialog = data.closeDialog
if (parseInt(closeDialog) === 1 || closeDialog === undefined) {
this.close()
}
},
close() {
this.removeEventListener()
if (this.cancelCallback) {
this.cancelCallback()
}
this.dialogVisible = false
},
exectAction(action) {
const type = typeof action
if (type === 'function') {
action()
}
},
async show(url, parms, message, config, confirm, cancel) {
this.message = message// 发给iframe 页面的消息
this.initIframeConfig(config)
this.addEventListener()
this.dialogVisible = true
const origin = location.origin
const hostname = location.hostname
const config_run_app = this.hsDialogConfig.config.runAppCode
const runapp = config_run_app || 'queryBi'
const startUrl = hostname === '0.0.0.0' ? origin : origin + `/${runapp}/web/`// 如果已两个//结尾 会出现多个iframe 娃套娃那种页面显示不了
let parmsStr = ''
parms.isInnerDialog = 1 // 表示是弹出框显示的页面
for (const key in parms) {
parmsStr += `&${key}=${parms[key]}`
}
let real_url = ''
if (url.startsWith('http')) {
real_url = `${url}`
} else {
real_url = `${startUrl}#${url}`
}
if (real_url.includes('?')) {
real_url += parmsStr
} else {
real_url += '?' + parmsStr
}
if (!real_url.includes('?')) {
real_url += '?'
}
this.pageSrc = real_url
if (!confirm && !cancel) {
const p = new Promise((resolve, reject) => {
this.confirmCallback = resolve
this.cancelCallback = reject
})
return p
} else {
if (confirm) {
this.confirmCallback = confirm
}
if (cancel) {
this.cancelCallback = cancel
}
}
},
initIframeConfig(config) {
if (typeof config === 'object') {
Object.assign(this.hsDialogConfig.config, config)
} else if (typeof config === 'string') { // 单个的字符串 默认这是title
this.hsDialogConfig.config.title = config
}
},
showFileIframe(parms, message, config, confirm, cancel) {
let parms_ = {}
if (typeof parms === 'string') {
parms_.group = parms
} else {
parms_ = parms
}
this.message = message// 发给iframe 页面的消息
this.initIframeConfig('文件管理')
this.addEventListener()
this.dialogVisible = true
const origin = location.origin
// const hostname = location.hostname
const startUrl = origin + '/fileresource/web/#/'
let parmsStr = ''
for (const key in parms_) {
parmsStr += `&${key}=${parms_[key]}`
}
parmsStr += '&isInnerDialog=1'
let real_url = startUrl
if (real_url.includes('?')) {
real_url += parmsStr
} else {
real_url += '?' + parmsStr
}
this.pageSrc = real_url
if (!confirm && !cancel) {
return new Promise((resolve, reject) => {
this.confirmCallback = resolve
this.cancelCallback = reject
})
} else {
if (confirm) {
this.confirmCallback = confirm
}
if (cancel) {
this.cancelCallback = cancel
}
}
}
}
}
</script>
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
<template>
<el-dialog
ref='elDialog'
:title="config.title"
:visible.sync="dialogVisible"
width="40%"
:before-close="close"
>
<el-input
type="textarea"
:rows="6"
placeholder="请输入内容"
v-model="inputValue"
>
</el-input>
<div
slot="footer"
class="hs-dialog-footer"
>
<el-button @click="close" size="mini">取 消</el-button>
<el-button
size="mini"
type="primary"
@click="submit"
>确 定</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'hs-dialog-rejact-prompt-textarea',
data() {
return {
dialogVisible: false,
inputValue: '',
confirmCallback: null,
cancelCallback: null,
config: {
title: '备注'
}
}
},
mounted() {
console.log('mounted')
},
methods: {
submit() {
this.ok()
},
async ok() {
if (this.confirmCallback) {
await this.confirmCallback(this.inputValue)
this.dialogVisible = false
}
},
close() {
if (this.cancelCallback) {
this.cancelCallback()
}
this.dialogVisible = false
},
async show(config, initvalue, confirm, cancel) {
if (config) {
Object.assign(this.config, config || {})
}
if (initvalue) {
this.inputValue = initvalue
}
this.dialogVisible = true
if (!confirm && !cancel) {
const p = new Promise((resolve, reject) => {
this.confirmCallback = resolve
this.cancelCallback = reject
})
return p
} else {
if (confirm) {
this.confirmCallback = confirm
}
if (cancel) {
this.cancelCallback = cancel
}
}
}
}
}
</script>
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
<template>
<hs-dialog
:visible='visible'
:allSourceData='hsDialogConfig'
:elInfo='hsDialogEl'
@close='close'
v-bind="$attrs"
v-on="$listeners"
>
<div slot="body">
<!-- <dyncFormComponent
@searchSubmit='query'
type='queryArea'
:formParms='searchForm'
:elInfo='asyncElInfo'
:allSourceData='dyncFormConfig'
>
</dyncFormComponent> -->
<hs-table
:height="hsTableHeight"
:config='hsTableConfig'
:data='hsTableData'
:elInfo='hsTableEl'
fromWhere='hdrDtl'
@handleClick='handleClick'
@toolClick='tableItemClick'
v-bind="$attrs"
v-on="$listeners"
>
</hs-table>
</div>
<div
slot="footer"
class="hs-dialog-footer"
>
<el-row>
<el-button-group style="float: right">
<hs-button-group
:allSourceData='hsButtonConfig'
:elInfo='hsButtonEl'
@itemClick='itemClick'
v-bind="$attrs"
v-on="$listeners"
>
</hs-button-group>
</el-button-group>
</el-row>
</div>
</hs-dialog>
</template>
<script>
export default {
name: 'hs-dialog-table',
data() {
return {
visible: false,
hsDialogEl: {
el: 'hsDialog',
position: ''
},
hsDialogConfig: {
config: {},
sourceData: []
},
hsButtonConfig: {
config: {},
sourceData: []
},
hsButtonEl: {
el: 'hsButtonToolsInDyncDialog',
position: ''
},
hsTableHeight: '400px',
hsTableConfig: {},
hsTableData: [],
hsTableEl: {
el: 'hsTableInDyncDialog',
position: ''
},
dyncFormConfig: {
config: {},
sourceData: []
},
searchForm: {},
asyncElInfo: {
el: 'hsDyncFormComponent',
position: ''
},
identify: null,
uc: null,
confirmCallback: null,
cancelCallback: null,
formColumn: [],
emptyInvalid: [undefined, null, 'undefined', 'null', '']
}
},
methods: {
handleClick(item) {
const { click } = item
switch (click) {
case 'addRow':
this.addRow()
break
}
},
tableItemClick(item) {
const { click } = item
switch (click) {
case 'addRow':
this.addRow()
break
}
},
addRow() {
this.hsTableData.push({})
},
async close() {
if (this.resolve) {
await this.resolve()
} else if (this.cancelCallback) {
await this.cancelCallback(this.hsTableData)
}
this.visible = false
this.hsTableConfig = []
},
itemClick(item) {
const { click } = item
switch (click) {
case 'confirm':
this.confirm()
break
case 'cancel':
this.close()
break
}
},
initComponentInfo() {
this.hsDialogEl.position = this.identify + '_hsDialog'
this.hsTableEl.position = this.identify + '_hsTable'
this.hsButtonEl.position = this.identify + '_hsButtomTools'
this.asyncElInfo.position = this.identify + '_queryDyncForm'
},
show(identify, uc, tableData = [], confirm, cancel) {
this.identify = identify
this.uc = uc
this.initComponentInfo()
this.hsTableConfig = tableData
this.pageControsInit()
this.visible = true
if (!confirm && !cancel) {
return new Promise((resolve, reject) => {
this.resolve = resolve
this.reject = reject
})
} else {
if (confirm) {
this.confirmCallback = confirm
}
if (cancel) {
this.cancelCallback = cancel
}
}
},
async confirm() {
// 做一个表单必填验证
// const f = this.checkRequireColumn(this.formColumn, this.detailForm)
// if (!f) return
if (this.confirmCallback) {
await this.confirmCallback(this.hsTableData)
} else if (this.resolve) {
await this.resolve(this.hsTableData)
}
this.visible = false
},
/**
* 页面组件配置绑定到视图,这一步要等页面所有控件请求、action 请求完, 再执行
*/
pageControsInit() {
this.initHsDialog(this.hsDialogEl)
// this.initDyncForm()
this.initHsTable(this.hsTableEl)
this.initHsButtonTools(this.hsButtonEl)
},
async initHsButtonTools(elInfo) {
const { position, el } = elInfo
const target = this.uc.findTargetControl(position, el)
if (!target) return
this.hsButtonConfig = target
},
/**
* 初始化index部分的按钮组
*/
initHsDialog(elInfo) {
const { position, el } = elInfo
const target = this.uc.findTargetControl(position, el)
if (!target) return
this.hsDialogConfig = target
},
initHsTable(elInfo) {
const { position, el } = elInfo
const target = this.uc.findTargetControl(position, el)
this.hsTableConfig = target.config
},
initDyncForm(elInfo) {
const { position, el } = elInfo
const target = this.uc.findTargetControl(position, el)
if (!target) return
const formColumn = target.config.formColumn || []
this.uc.filterChildControl(formColumn)
this.dyncFormConfig = target
}
}
}
</script>
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -13,7 +13,7 @@
</el-dialog>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'dialog-component',
......
......@@ -15,7 +15,7 @@
<slot name="footer"></slot>
</el-dialog>
<hs-jsoneditor
v-model='jsoneditorVisible'
:visible.sync='jsoneditorVisible'
:elInfo='elInfo'
v-bind="$attrs"
v-on="$listeners"
......@@ -24,7 +24,7 @@
</div>
</template>
<script>
import ucComponent from '../ucClass/uc_component'
import ucComponent from '../../ucClass/uc_component'
export default {
mixins: [ucComponent],
name: 'hs-dialog',
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -2,7 +2,7 @@
<el-divider id="divider" :direction='configData.direction' :content-position='configData.contentPosition'>{{configData.label}}</el-divider>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'divider-component',
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -74,7 +74,7 @@
import hsUtil from 'hs-util-js'
import _ from 'lodash'
import Sortable from 'sortablejs'
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'drag-list-component',
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -29,7 +29,7 @@
<script>
import dyncFormItemComponentTable from './dyncFormItemComponentTable'
import dyncFormItemComponentQuery from './dyncFormItemComponentQuery'
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
import _ from 'lodash'
export default {
name: 'dync-form-component',
......
......@@ -13,7 +13,7 @@
:placeholder="getPlaceholder(item)"
></el-input>
</template>
<template v-if="item.type==='textarea'">
<template v-else-if="item.type==='textarea'">
<el-input
class="textareaInput"
style="width:100%;height:100%"
......@@ -24,7 +24,7 @@
placeholder=""
></el-input>
</template>
<template v-if="item.type==='elDatePicker'">
<template v-else-if="item.type==='elDatePicker'">
<el-date-picker
clearable
style="width:100%"
......@@ -39,7 +39,7 @@
>
</el-date-picker>
</template>
<template v-if="item.type==='elDatePickerDatetime'">
<template v-else-if="item.type==='elDatePickerDatetime'">
<el-date-picker
clearable
style="width:100%"
......@@ -51,7 +51,7 @@
>
</el-date-picker>
</template>
<template v-if="item.type==='elDatePickerDate'">
<template v-else-if="item.type==='elDatePickerDate'">
<el-date-picker
clearable
style="width:100%"
......@@ -63,7 +63,7 @@
>
</el-date-picker>
</template>
<template v-if="item.type==='elDatePickerMonth'">
<template v-else-if="item.type==='elDatePickerMonth'">
<el-date-picker
clearable
style="width:100%"
......@@ -75,7 +75,7 @@
>
</el-date-picker>
</template>
<template v-if="item.type==='elDatePickerMonthRange'">
<template v-else-if="item.type==='elDatePickerMonthRange'">
<el-date-picker
clearable
style="width:100%"
......@@ -90,7 +90,7 @@
>
</el-date-picker>
</template>
<template v-if="item.type==='hsSwitch'||item.type==='elSwitch'">
<template v-else-if="item.type==='hsSwitch'||item.type==='elSwitch'">
<hs-switch
:prop='item.prop'
:elInfo='item.elInfo'
......@@ -102,7 +102,7 @@
>
</hs-switch>
</template>
<template v-if="item.type==='elCheckbox'">
<template v-else-if="item.type==='elCheckbox'">
<el-checkbox
style="width:100%"
size='mini'
......@@ -111,7 +111,7 @@
>
</el-checkbox>
</template>
<template v-if="item.type==='hsSelectPlus'">
<template v-else-if="item.type==='hsSelectPlus'">
<hs-select-plus
:formData='formParms'
v-model="formParms[item.prop]"
......@@ -125,7 +125,7 @@
>
</hs-select-plus>
</template>
<template v-if="item.type==='hsFile'">
<template v-else-if="item.type==='hsFile'">
<hs-file
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -138,7 +138,7 @@
>
</hs-file>
</template>
<template v-if="item.type==='hsComputed'">
<template v-else-if="item.type==='hsComputed'">
<hs-computed
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -152,7 +152,7 @@
>
</hs-computed>
</template>
<template v-if="item.type==='hsInput'">
<template v-else-if="item.type==='hsInput'">
<hs-input
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -166,7 +166,7 @@
>
</hs-input>
</template>
<template v-if="item.type==='hsInputNumber'">
<template v-else-if="item.type==='hsInputNumber'">
<hs-input-number
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -180,7 +180,7 @@
>
</hs-input-number>
</template>
<template v-if="item.type==='hsImg'">
<template v-else-if="item.type==='hsImg'">
<hs-img
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -195,7 +195,7 @@
>
</hs-img>
</template>
<template v-if="item.type==='hsLookup'">
<template v-else-if="item.type==='hsLookup'">
<hs-lookup
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -208,7 +208,7 @@
>
</hs-lookup>
</template>
<template v-if="item.type==='hsCheckboxGroup'">
<template v-else-if="item.type==='hsCheckboxGroup'">
<hs-checkbox-group
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -221,7 +221,7 @@
>
</hs-checkbox-group>
</template>
<template v-if="item.type==='hsCheckbox'">
<template v-else-if="item.type==='hsCheckbox'">
<hs-checkbox
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -234,7 +234,7 @@
>
</hs-checkbox>
</template>
<template v-if="item.type==='hsDatePicker'">
<template v-else-if="item.type==='hsDatePicker'">
<hs-date-picker
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -247,7 +247,7 @@
>
</hs-date-picker>
</template>
<template v-if="item.type==='hsPopoverTextarea'">
<template v-else-if="item.type==='hsPopoverTextarea'">
<hs-popover-textarea
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -260,7 +260,7 @@
>
</hs-popover-textarea>
</template>
<template v-if="item.type==='hsRadio'">
<template v-else-if="item.type==='hsRadio'">
<hs-radio
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -273,7 +273,7 @@
>
</hs-radio>
</template>
<template v-if="item.type==='hsTabs'">
<template v-else-if="item.type==='hsTabs'">
<hs-tabs
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -286,7 +286,7 @@
>
</hs-tabs>
</template>
<template v-if="item.type==='hsDateTimePicker'">
<template v-else-if="item.type==='hsDateTimePicker'">
<hs-date-time-picker
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
......@@ -299,7 +299,7 @@
>
</hs-date-time-picker>
</template>
<template v-if="item.type==='hsTagsSelect'">
<template v-else-if="item.type==='hsTagsSelect'">
<hs-tags-select
:formData='formParms'
v-model="formParms[item.prop]"
......@@ -313,7 +313,7 @@
>
</hs-tags-select>
</template>
<template v-if="item.type==='hsSelectList'">
<template v-else-if="item.type==='hsSelectList'">
<hs-select-list
:formData='formParms'
v-model="formParms[item.prop]"
......@@ -327,7 +327,7 @@
>
</hs-select-list>
</template>
<template v-if="item.type==='hsStatusGroup'">
<template v-else-if="item.type==='hsStatusGroup'">
<hs-status-group
:formData='formParms'
v-model="formParms[item.prop]"
......@@ -341,7 +341,7 @@
>
</hs-status-group>
</template>
<template v-if="item.type==='hsRate'">
<template v-else-if="item.type==='hsRate'">
<hs-rate
:formData='formParms'
v-model="formParms[item.prop]"
......@@ -354,19 +354,32 @@
>
</hs-rate>
</template>
<template v-if="item.type==='hsInputSelect'">
<template v-else-if="item.type==='hsInputSelect'">
<hs-input-select
:formData='formParms'
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
:elInfo='item.elInfo'
:disabled='disabled'
:disabled='item.handleDisabled'
:filed='item.prop'
v-bind="$attrs"
v-on="$listeners"
>
</hs-input-select>
</template>
<template v-else-if="item.type==='hsQrcode'">
<hs-qrcode
:formData='formParms'
v-model="formParms[item.prop]"
:allSourceData='item.allSourceData'
:elInfo='item.elInfo'
:disabled='item.handleDisabled'
:filed='item.prop'
v-bind="$attrs"
v-on="$listeners"
>
</hs-qrcode>
</template>
</div>
</template>
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -184,7 +184,7 @@ import hsUtil from 'hs-util-js'
import 'video.js/dist/video-js.css'
import _ from 'lodash'
import axios from 'axios'
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
components: {
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -2,9 +2,9 @@
<div :id="elIdBox" :style='style'></div>
</template>
<script>
import mockData from '../common/initDbConfigDataJson'
import mockData from '../../common/initDbConfigDataJson'
import echartResize from './echartResize'
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'gantt-component',
......
import { EleResize } from '../funTools/self-adaption/ezresize.js'
import { EleResize } from '../../funTools/self-adaption/ezresize.js'
import echarts from 'echarts'
export default {
data() {
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -64,12 +64,12 @@
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'img-component',
props: {
appCode: {},
appCode: {}
},
computed: {
dialogImgSrc: function() {
......@@ -146,13 +146,21 @@ export default {
}
formData.append(this.file.name, this.file)
const res = await this.$listeners.uploadFile(formData, this.configData)
const res_data = res.data
const file_result = res_data[0]
const NewFileName = file_result.NewFileName
this.$emit('input', NewFileName)
this.upload_dialogVisible = false
if (this.$listeners.uploadSuccess) {
this.$listeners.uploadSuccess(this.prop)
const res_data = res && res.data
if (Array.isArray(res_data) && res_data.length) {
const file_result = res_data[0]
if (file_result.Sucess === false) { // fileResouce 出错会抛出错误,但是code是200,所以要再次判断结果
this.$message.error(file_result.Error)
return
}
const NewFileName = file_result.NewFileName
this.$emit('input', NewFileName)
this.upload_dialogVisible = false
if (this.$listeners.uploadSuccess) {
this.$listeners.uploadSuccess(this.prop)
}
} else {
this.$message.error('fileResouce:未返回预期格式([{}])的结果!')
}
},
async deleteImg() {
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
<template>
<div
class="hsInputBox"
>
<div class="hsInputBox">
<div
class="inputTitle"
v-if='configData.title'
......@@ -15,17 +13,17 @@
:disabled="getDisabled"
:placeholder="configData.placeholder"
controls-position="right"
:min="configData.min"
:max="configData.max"
:min="getNumber(configData.min)"
:max="getNumber(configData.max)"
:step='configData.step'
></el-input-number>
</div>
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins:[commonMixins],
mixins: [commonMixins],
name: 'input-number-component',
computed: {
innerValue: {
......@@ -97,6 +95,10 @@ export default {
const { entered } = this.configData
this.execAction(entered, val, this.elInfo)
this.$emit('enterInput', this.innerValue, this.elInfo)
},
getNumber(num) {
if (num === undefined) return
return Number(num)
}
}
}
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -47,9 +47,9 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins:[commonMixins],
mixins: [commonMixins],
name: 'input-select-component',
computed: {
configData: function() {
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -22,7 +22,7 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins:[commonMixins],
name: 'input-component',
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -4,30 +4,37 @@
id="jsonEditorBox"
@opened="dialogOpen"
:title='pageTitle'
:visible.sync="dialogVisible"
:visible.sync="innervisible"
@closed="dialogClose"
width="95%"
:append-to-body='true'
:close-on-click-modal='false'
>
<div id="jsonEditBox">
<div>
<div style="display:flex;">
<div class="editItemBox1">
<div
class="editItemBox1"
:style="{height:heightEdit}"
>
<div class="editeTitleItem">配置</div>
<div
:id='ideditor1'
style="width: 100%; height: 100%;"
style="width:100%;height:100%"
></div>
</div>
<div class="editItemBox2">
<div
class="editItemBox2"
:style="{height:heightEdit}"
>
<div class="editeTitleItem">模拟数据</div>
<div
:id='ideditor2'
style="width: 100%; height: 100%;"
style="width:100%;height:100%"
></div>
</div>
<div
class="editItemBox3"
:style="{height:heightEdit}"
id="sqlBox"
>
<div class="editeTitleItem">SQL</div>
......@@ -136,6 +143,8 @@
@submit='asyncFormPropSubmit'
:elInfo='elInfo'
:controlType='controlType'
v-bind="$attrs"
v-on="$listeners"
/>
<hsTabsFormSet
v-model="dialogVisibleHsTabsForm"
......@@ -180,13 +189,13 @@
</el-dialog>
</template>
<script>
import uuidv1 from 'uuid/v1'
import mockData from '../common/initDbConfigDataJson'
import { v1 as uuidv1 } from 'uuid'
import mockData from '../../common/initDbConfigDataJson'
import hsUtil from 'hs-util-js'
import lookPageLog from '../common/lookPageLog.vue'
import asyncFormPropSet from '../common/asyncFormPropSet.vue'
import tbaleColumsSet from '../common/tbaleColumsSet.vue'
import hsTabsFormSet from '../common/hsTabsFormSet'
import lookPageLog from '../../common/lookPageLog.vue'
import asyncFormPropSet from '../../common/asyncFormPropSet.vue'
import tbaleColumsSet from '../../common/tbaleColumsSet.vue'
import hsTabsFormSet from '../../common/hsTabsFormSet'
import 'jsoneditor/dist/jsoneditor.min.css'
import jsoneditor from 'jsoneditor'
export default {
......@@ -205,7 +214,7 @@ export default {
return {}
}
},
value: Boolean,
visible: Boolean,
layout: {},
jsoneditorCloseAfter: {
type: Function,
......@@ -224,17 +233,21 @@ export default {
isEditColumns: {}
},
computed: {
pageTitle: function() {
const { appCode, pageName, controlName } = this.controlInfo
return `配置: AppCode: <${appCode}>---pageName: <${pageName}>---controlName: <${controlName}>`
}
},
watch: {
value(val) {
this.dialogVisible = val
innervisible: {
get() {
return this.visible
},
set(val) {
this.$emit('update:visible', val)
}
},
dialogVisible(val) {
this.$emit('input', val)
pageTitle: function() {
if (this.innervisible) {
const { appCode, pageName, controlName } = this.controlInfo
return `配置: AppCode: <${appCode}>---pageName: <${pageName}>---controlName: <${controlName}>`
} else {
return ''
}
}
},
data() {
......@@ -275,7 +288,8 @@ export default {
updateTime: '',
isMock: true,
controlType: ''
}
},
heightEdit: '400px'
}
},
methods: {
......@@ -460,7 +474,7 @@ export default {
this.$listeners.saveAsDataToLocal(data)
},
dialogClose() {
this.dialogVisible = false
this.innervisible = false
this.jsoneditorCloseAfter()
this.$emit('dialogClose')
},
......@@ -486,6 +500,9 @@ export default {
this.revertVersion = false
this.handleControlInfo()
this.getPageInfo()
// 计算弹出框编辑区域的大小
const height = hsUtil.SystemModule.getClientHeight()
this.heightEdit = height - 150 + 'px'
this.jsoneditorOpenAfter()
},
// 加载传入的数据或者本地模拟数据
......@@ -603,16 +620,13 @@ export default {
display: flex;
}
.editItemBox1 {
flex: 1;
height: 400px;
flex: 2;
}
.editItemBox2 {
flex: 1;
height: 400px;
}
.editItemBox3 {
flex: 2;
height: 400px;
flex: 1;
}
.editeTitleItem {
text-align: center;
......@@ -633,7 +647,7 @@ export default {
right: 10px;
}
#sqlBox >>> .el-textarea__inner {
height: 400px;
height: 100%;
}
.tipLayoutStyle {
text-align: center;
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
import { EleResize } from '../funTools/self-adaption/ezresize.js'
import { EleResize } from '../../funTools/self-adaption/ezresize.js'
import echarts from 'echarts'
export default {
data() {
......
......@@ -3,7 +3,7 @@
<div :id="elId"
style='width:100%;height:100%;'></div>
<hs-jsoneditor
v-model='jsoneditorVisible'
:visible.sync='jsoneditorVisible'
:elInfo='elInfo'
v-bind="$attrs"
v-on="$listeners"
......@@ -12,8 +12,8 @@
</template>
<script>
import mockData from '../common/initDbConfigDataJson'
import ucComponent from '../ucClass/uc_component'
import mockData from '../../common/initDbConfigDataJson'
import ucComponent from '../../ucClass/uc_component'
import echartResize from './echartResize'
import _ from 'lodash'
import DataTool from './dataTool'
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -44,10 +44,14 @@
@click="down"
>下移</el-button>
</div>
<hs-table
maxHeight="300px"
:allSourceData='hsTableFormConfig'
<hs-table
ref='plTable'
height="350px"
:data='hsTableData'
:paging='hsTablePaging'
:config='hsTableConfig'
:elInfo='hsTableEl'
@sortChange='sortChange'
@tableRowDblclick='tableRowDblclick'
@paginationFun="paginationFun"
>
......@@ -72,8 +76,9 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
import hsUtil from 'hs-util-js'
import _ from 'lodash'
export default {
mixins: [commonMixins],
name: 'lookup-component',
......@@ -96,56 +101,59 @@ export default {
}
}
},
tableList: function() {
const sourceData = this.hsTableFormConfig.sourceData
if (Array.isArray(sourceData)) {
return sourceData
} else if (sourceData.paging) {
return sourceData.table || []
}
},
lookupConfig: function() {
return this.allSourceData.config || {}
},
hsDyncFormConfig: function() {
return this.allSourceData.hsDyncForm
},
hsTableFormConfig: function() {
if (!this.allSourceData.hsTable) return
const config = this.allSourceData.hsTable.config
const sourceData = this.tableData
const { value, multiple } = this.lookupConfig
hsTableData() {
console.log('测试hsTableData')
const data = this.tableData
const { value } = this.lookupConfig
const list = this.value ? this.value.split(',') : []
let sourceData_ = []
if (Array.isArray(sourceData)) {
sourceData_ = sourceData
} else if (sourceData.paging) {
sourceData_ = sourceData.table
}
list.forEach(x => {
const target = sourceData_.find(item => item[value] === x)
if (target) {
this.$set(target, 'isSelected', true)
}
list.forEach(x => { // 设置默认勾选
const target = data.find(item => item[value] === x)
target && (target.isSelected = true)
})
config.selection = !!multiple
return {
config,
sourceData: sourceData
}
return data
},
hsTablePaging() {
return this.paging
},
// 查询表单el
hsDyncFormEl: function() {
return {
el: 'hsDyncFormComponent',
position: this.elInfo.position + 'hsDyncForm'
}
},
// 查询表单配置
hsDyncFormConfig: function() {
const { config } = this.$listeners.findTargetControl(
this.hsDyncFormEl.position,
'hsDyncFormComponent'
)
const sourceData = []
return {
config,
sourceData
}
},
// 表格el
hsTableEl: function() {
return {
el: 'hsTable',
position: this.elInfo.position + 'hsTable'
}
},
// 表格配置
hsTableConfig() {
const { config } = this.$listeners.findTargetControl(
this.hsTableEl.position,
'hsTableSimple'
)
const { multiple } = this.lookupConfig
config.selection = !!multiple
return config
},
value_inner: {
get() {
const result = this.init_value()
......@@ -175,10 +183,46 @@ export default {
label_value_old: '',
isChange: false,
selectedData: [],
firstQuery: true
firstQuery: true,
paging: null
}
},
methods: {
sortChange(data) {
const obj = this.getOrderByParm(data, this.searchForm)
Object.assign(this.searchForm, obj)
this.queryTable()
},
getOrderByParm(data, mainSearchParam) {
const orderby = mainSearchParam.orderby
if (orderby) {
const orderby_list = orderby.split(',')
const parms = {
}
orderby_list.forEach(item => {
const [prop, value] = item.split(':')
parms[prop] = value
})
const data_prop = data['prop']
const data_order = data['order']
if (data_order === '') {
delete parms[data_prop]
} else {
parms[data_prop] = data_order
}
const list = []
for (const k in parms) {
list.push(`${k}:${parms[k]}`)
}
return {
orderby: list.join(',')
}
} else {
return {
orderby: `${data['prop']}:${data['order']}`
}
}
},
async showDialog() {
// 弹出之前做逻辑判断
const { value, multiple } = this.lookupConfig
......@@ -200,6 +244,7 @@ export default {
this.queryTable()
}
this.dialogTableVisible = true
this.$refs.plTable && this.$refs.plTable.$children[0].$children[0].tableDoLayout()
},
/**
* 焦点失去事件
......@@ -213,8 +258,8 @@ export default {
* 由于用户绑定的是id 所以不能显示给用户看id, 必须显示中文名给用户,这个中文名还必须是与此ID对应上的
*/
init_value() {
if (!this.hsTableFormConfig) return
const sourceData = this.hsTableFormConfig.sourceData
if (!this.hsTableConfig) return
const sourceData = this.hsTableData
const { multiple, value, displayfield } = this.lookupConfig
const displayfield_value = this.formData[displayfield]
if (displayfield_value) {
......@@ -261,7 +306,12 @@ export default {
obj,
this.formData
)
this.selectedData = data // 这是已经勾选的数据
if (!data) return
if (Array.isArray(data)) {
this.selectedData = data // 这是已经勾选的数据
} else {
this.selectedData = data.table || []
}
},
/**
* 查询table数据
......@@ -283,28 +333,24 @@ export default {
this.formData
)
const { paging, table } = data
if (paging) {
this.paging = paging
}
// 做一个合并数据
const { multiple } = this.lookupConfig
let returnData = []
if (Array.isArray(data)) {
returnData = data
} else if (paging) {
returnData = table
returnData = table || []
}
if (multiple) {
// 多选时,合并已经勾选多数据
const data_ = this.unShiftData(returnData)
if (paging) {
this.tableData = {
paging,
table: data_
}
} else {
this.tableData = data_
}
this.tableData = data_
} else {
// 单选时直接
this.tableData = data
this.tableData = returnData
}
},
unShiftData(queryData) {
......@@ -332,17 +378,17 @@ export default {
* 多选时必须点击确定按钮
*/
submit() {
const selectData = this.tableList.filter(x => x.isSelected)
const selectData = this.hsTableData.filter(x => x.isSelected)
const prop = this.allSourceData.config.value
const list_ids = selectData.map(x => {
return x[prop]
})
this.$emit('input', list_ids.join(','))
this.changeAction(list_ids.join(','))
this.setLabelValue()
this.setLabelValue(selectData)
this.setSelectedData(selectData)
// 设置回写字段
this.setWritebackfield()
this.setWritebackfield(selectData)
this.dialogTableVisible = false
},
setSelectedData(data) {
......@@ -355,12 +401,12 @@ export default {
const prop = this.allSourceData.config.value
this.$emit('input', row[prop])
this.changeAction(row[prop])
this.setWritebackfield()
this.setLabelValue()
this.setWritebackfield([row])
this.setLabelValue([row])
this.dialogTableVisible = false
},
setLabelValue() {
const selectData = this.tableList.filter(x => x.isSelected)
setLabelValue(data) {
const selectData = data
const label = this.allSourceData.config.displayfield
const label_list = selectData.map(x => x[label])
this.label_value = label_list.join(',')
......@@ -369,9 +415,9 @@ export default {
/**
* 设置回写字段
*/
setWritebackfield() {
setWritebackfield(data) {
this.isChange = true
const selectData = this.tableList.filter(x => x.isSelected)
const selectData = data
const writebackfield = this.allSourceData.config.writebackfield
if (writebackfield) {
// 解析回写字段
......@@ -443,19 +489,9 @@ export default {
this.$emit('input', '')
this.clearWritebackfield()
},
getTableData() {
const sourceData = this.hsTableFormConfig.sourceData
let list = []
if (Array.isArray(sourceData)) {
list = sourceData
} else if (sourceData.table) {
list = sourceData.table
}
return list
},
up() {
const selectIndexData = []
const list = this.getTableData()
const list = this.hsTableData
list.forEach((x, index) => {
if (x.isSelected) {
selectIndexData.push(index)
......@@ -468,7 +504,7 @@ export default {
*/
down() {
const selectIndexData = []
const list = this.getTableData()
const list = this.hsTableData
list.forEach((x, index) => {
if (x.isSelected) {
selectIndexData.push(index)
......
import index from './src/index.vue'
index.install = function(Vue) {
Vue.component(index.name, index)
}
export default index
......@@ -42,7 +42,7 @@
</div>
</template>
<script>
import commonMixins from '../ucClass/commonMixins'
import commonMixins from '../../ucClass/commonMixins'
export default {
mixins: [commonMixins],
name: 'popover-textarea-component',
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment