Commit 65ad985d authored by 何虹's avatar 何虹 💬

升级UI包

parent 687e9618
......@@ -22,11 +22,11 @@
"echarts": "^4.7.0",
"element-ui": "^2.15.0",
"file-saver": "^2.0.5",
"hs-util-js": "^1.0.23",
"hs-util-js": "^1.0.33",
"i": "^0.3.6",
"jsoneditor": "^8.6.5",
"lodash": "^4.17.15",
"mathjs": "^9.0.0",
"mathjs": "8.0.1",
"moment": "^2.24.0",
"script-loader": "^0.7.2",
"sortablejs": "^1.12.0",
......@@ -35,9 +35,12 @@
"vue-codemirror": "^4.0.6",
"vue-qr": "^2.3.0",
"vue-video-player": "^5.0.2",
"xlsx": "^0.16.9"
"xlsx": "^0.16.9",
"vue-contextmenujs": "^1.3.13"
},
"devDependencies": {
"node-sass": "^4.12.0",
"sass-loader": "^7.3.1",
"babel-preset-es2015": "^6.24.1",
"url-loader": "^4.1.1",
"style-loader": "^2.0.0",
......
......@@ -10,9 +10,6 @@
: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>
......@@ -266,27 +263,27 @@ export default {
},
{
value: 'hsDatePicker',
label: '16配置日期选择器',
label: '16配置日期选择器',
isRequireControlName: true
},
{
value: 'hsPopoverTextarea',
label: '17多行文本弹出',
value: 'hsTimePicker',
label: '17配置时间选择器',
isRequireControlName: true
},
{
value: 'hsRadio',
label: '18可配置单选',
value: 'hsPopoverTextarea',
label: '18多行文本弹出',
isRequireControlName: true
},
{
value: 'hsTabs',
label: '19标签页',
value: 'hsRadio',
label: '19可配置单选',
isRequireControlName: true
},
{
value: 'hsDateTimePicker',
label: '20时间范围选择器',
value: 'hsTabs',
label: '20标签页',
isRequireControlName: true
},
{
......
This diff is collapsed.
This diff is collapsed.
......@@ -1125,7 +1125,7 @@ const hsDivider = {
}
const hsDatePicker = {
config: {
'title': '标题',
'title': '',
'type': 'daterange',
'valueFormat': 'yyyy-MM-dd',
'rangeSeparator': '至',
......@@ -2486,6 +2486,25 @@ const hsInputSelect = {
}
]
}
const hsPageConfigQueryBi = {
config: {
restful_appcode: '',
'isInitMenuParam': false, // 是否初始化menuParam
'pageMode': true,
'version': '2.0',
'ui': {
},
'entity': {
}
},
data: []
}
const hsButton = {
config: {
label: '测试'
}
}
const mockData = {
hsLineBar: initLineBar,
hsPie: initPie,
......@@ -2548,6 +2567,8 @@ const mockData = {
hsDragList,
hsPageConfigDragList,
hsInputSelect,
hsTabsTable
hsTabsTable,
hsPageConfigQueryBi,
hsButton
}
export default mockData
......@@ -2,10 +2,10 @@
<el-dialog
top='10px'
class="innerDialogBox"
:visible.sync="dialogVisible"
:visible.sync="innerDialogVisible"
width="100%"
@open='openDialog'
title='表格配置'
title='表格设置(开发,不允许有属性相同的列)'
:append-to-body='true'
:close-on-click-modal='false'
>
......@@ -180,8 +180,14 @@
label='隐藏'
>
<template slot-scope="scope">
<el-switch v-model="scope.row.isHide">
<el-switch
v-if='isBoolean(scope.row.isHide)'
v-model="scope.row.isHide"
>
</el-switch>
<span v-else>
{{'action:'+scope.row.isHide}}
</span>
</template>
</el-table-column>
<el-table-column
......@@ -211,8 +217,14 @@
width='70'
>
<template slot-scope="scope">
<el-switch v-model="scope.row.isDisabled">
<el-switch
v-if='isBoolean(scope.row.isDisabled)'
v-model="scope.row.isDisabled"
>
</el-switch>
<span v-else>
{{'action:'+scope.row.isDisabled}}
</span>
</template>
</el-table-column>
<el-table-column
......@@ -221,8 +233,14 @@
width='70'
>
<template slot-scope="scope">
<el-switch v-model="scope.row.isRequired">
<el-switch
v-if='isBoolean(scope.row.isRequired)'
v-model="scope.row.isRequired"
>
</el-switch>
<span v-else>
{{'action:'+scope.row.isRequired}}
</span>
</template>
</el-table-column>
<el-table-column
......@@ -274,6 +292,7 @@
@click="tanTableHeaderAsync"
>确 定</el-button>
<el-button
v-show="false"
size='mini'
type="success"
@click="generateTheHeaderBefore"
......@@ -286,7 +305,7 @@
<el-button
size='mini'
type="info"
@click="dialogVisible = false"
@click="innerDialogVisible = false"
>取 消</el-button>
</div>
<tbaleColumStyleSet
......@@ -304,47 +323,45 @@ import tbaleColumStyleSet from './tbaleColumStyleSet'
export default {
components: { tbaleColumStyleSet },
props: {
value: Boolean,
tableDataColums: {
default() {
return []
}
},
visible: Boolean,
mockSourceData: {
default() {
return []
}
},
allSourceData: {
default() {
return {
config: {},
data: []
}
isSubmitSuccessFlage: {},
elInfo: {},
data: {},
config: Object
},
computed: {
innerDialogVisible: {
get() {
return this.visible
},
set(val) {
this.$emit('update:visible', val)
}
},
isSubmitSuccessFlage: {},
elInfo: {}
tableDataColums: {
get() {
const list = this.tableDataColums_inner || this.config.columnsConfig || []
return list
}
}
},
watch: {
value(val) {
this.dialogVisible = val
},
dialogVisible(val) {
this.$emit('input', val)
},
isSubmitSuccessFlage(val) {
if (val === 'columnStyleSet') {
this.dialogVisibleTbaleColumStyle = false
} else {
this.dialogVisible = false
this.innerDialogVisible = false
}
}
},
data() {
return {
dialogVisibleTbaleColumStyle: false,
dialogVisible: false,
optionsType: [
{
value: 'checkBox',
......@@ -400,10 +417,18 @@ export default {
value: 'elDatePicker',
label: '6日期范围'
},
{
value: 'hsDatePicker',
label: '6-1可配置日期'
},
{
value: 'elDatePickerDatetime',
label: '7日期时间'
},
{
value: 'hsTimePicker',
label: '7-2可配置时间'
},
{
value: 'hsComputed',
label: '8计算文本',
......@@ -450,19 +475,27 @@ export default {
// isRequireControlName: true
// }
],
tableDataColumsCopy: []
tableDataColums_inner: null,
controlConfig: null
}
},
methods: {
openDialog() {},
initConfig(data) {
for (const index in data) {
const item = data[index]
if (!item.uuidv1) {
item.uuidv1 = uuidv1()
}
isBoolean(value) {
const type = typeof value
return type === 'boolean' || value === '' || type === 'undefined'
},
async openDialog() {
const res = await this.getPageInfo()
const data = res.data
if (data && data.length) { // 说明后端有存储
this.controlConfig = data[0]
const json_config = JSON.parse(this.controlConfig.json_config)
this.tableDataColums_inner = json_config.columnsConfig
} else {
this.controlConfig = null
this.tableDataColums_inner = null
}
this.tableDataColumsCopy = _.cloneDeep(data)
console.log(this.tableDataColums_inner)
},
addPropViSayncTop() {
this.tableDataColums.push({})
......@@ -554,7 +587,8 @@ export default {
this.downSite(this.tableDataColums, index)
},
generateTheHeaderBefore() {
const editor2Data = this.allSourceData && this.allSourceData.data
const editor2Data = this.data
if (
(Array.isArray(editor2Data) && !editor2Data.length) ||
(editor2Data.table && !editor2Data.table.length)
......@@ -713,6 +747,8 @@ export default {
if (itemOptionType && !itemOptionType.isRequireControlName) {
delete item.elInfo
delete item.control_name
delete item.config
delete item.data
}
if (
itemOptionType &&
......@@ -722,23 +758,7 @@ export default {
item.control_name = uuidv1()
}
}
this.$emit('submit', columnsConfig, flage)
},
addOldProp(columnsConfig) {
const olist = this.tableDataColumsCopy.filter(item =>
item.showType.startsWith('hs')
)
const newlist = columnsConfig.filter(
item => item.uuidv1 && item.showType.startsWith('hs')
)
newlist.forEach(item => {
const otarget = olist.find(oitem => item.uuidv1 === oitem.uuidv1)
if (otarget && otarget.prop !== item.prop) {
item.old_control_name = otarget.prop
} else if (otarget && otarget.prop === item.prop) {
delete item.old_control_name
}
})
this.submitTableColums(columnsConfig)
},
tansFormAsyncProps(list) {
const rasyncProps = _(list)
......@@ -784,6 +804,46 @@ export default {
this.tableDataColums[this.editIndex].columnStyle = data
this.dialogVisibleTbaleColumStyle = false
this.tanTableHeaderAsync('columnStyleSet')
},
getPageInfo(info = this.elInfo) {
const data = {
controlName: info.position,
userId: -1,
configType: -1
}
return this.$attrs.webChartConfigQuery(data)
},
async submitTableColums(data) {
let paramsData = {}
if (!this.controlConfig) {
paramsData.json_config = JSON.stringify(this.config || {})
paramsData.json_data = JSON.stringify(this.data || [])
paramsData.is_mock = 1
paramsData.query_sql = ''
} else if (this.controlConfig) {
paramsData = this.controlConfig
}
const { query_sql, json_config, json_data, is_mock } = paramsData
const json_config_ = JSON.parse(json_config)
data.forEach(item => {
delete item.config
delete item.data
})
json_config_.columnsConfig = data
const dataw = {
controlName: this.elInfo.position,
config: json_config_,
data: JSON.parse(json_data),
querySql: query_sql,
mockData: is_mock ? 1 : 0,
userId: -1,
configType: -1
}
this.$attrs.webChartConfigSave(dataw).then(res => {
this.$emit('saveSuccess', json_config_)
this.$message.success('设置成功!')
this.innerDialogVisible = false
})
}
}
}
......
This diff is collapsed.
......@@ -287,7 +287,7 @@ export default {
tableName: 'pbWebDyncCode',
parms: {}
}
this.$attrs.$httpClient.RestFulModule.deleteList(parms).then(res => {
this.$attrs.httpClient.RestFulModule.deleteList(parms).then(res => {
const str = '删除成功'
this.$message.success(str)
this.queryTableData()
......
......@@ -215,7 +215,6 @@ export default {
if (user_info) {
const user_info_json = JSON.parse(user_info)
const { is_admin } = user_info_json
if (!is_admin || is_admin === 0) {
// 不是管理员的情况下隐藏页面设置和action设置
tempList = tempList.filter(
......@@ -224,7 +223,7 @@ export default {
)
}
} else {
if (self !== top) {
if (self !== top && location.hostname !== '0.0.0.0') {
tempList = tempList.filter(
item =>
item.click !== '$setAction' && item.click !== '$setPageConfig'
......
......@@ -105,4 +105,10 @@ export default {
}
}
}
</script>
\ No newline at end of file
</script>
<style scoped>
.targetItem{
width: 100%;
height: 100%;
}
</style>
\ No newline at end of file
......@@ -41,18 +41,26 @@ export default {
this.elId = uuidv1() // 获取随机id
}
},
boxEventMouse(event) {
const that = this
event.stopPropagation()
getIsDev() {
const user_info = sessionStorage['user_info']
if (user_info) {
const user_info_json = JSON.parse(user_info)
const { is_admin } = user_info_json
if (!is_admin || is_admin === 0) return
}
if (!user_info) {
if (top !== self) return
const { systemSysDevDb } = user_info_json
if (
systemSysDevDb === true ||
systemSysDevDb === '1' ||
systemSysDevDb === 1
) { return true }
} else {
if (top !== self && location.hostname !== '0.0.0.0') return false
if (top === self && location.hostname === '0.0.0.0') return true
}
},
boxEventMouse(event) {
const that = this
event.stopPropagation()
const isDev = this.getIsDev()
if (!isDev) return
if (event.shiftKey && event.altKey && !event.ctrlKey) {
that.showJsonEditDialog()
}
......
......@@ -25,6 +25,7 @@ export default {
<style scoped>
.common {
width: 100%;
height: auto;
height:100%;
/* height: auto; */
}
</style>
<template>
<ul
v-show="innervisible"
:style="{left:left+'px',top:top+'px'}"
class="contextmenu"
>
<li v-show="showToolSetItem(item)" v-for="(item,index) in menuList" :key='index' @click='itemClick(item)'>
{{item.label}}
</li>
</ul>
</template>
<script>
export default {
props: {
visible: Boolean,
targetDom: HTMLDivElement,
menuList: {
type: Array,
default() {
return []
}
}
},
computed: {
innervisible: {
get() {
return this.visible
},
set(val) {
this.$emit('update:visible', val)
}
}
},
watch: {
innervisible(value) {
if (value) {
document.body.addEventListener('click', this.closeMenu)
} else {
document.body.removeEventListener('click', this.closeMenu)
}
}
},
name: 'hs-contextmenu',
data() {
return {
top: 100,
left: 100
}
},
mounted() {
setTimeout(() => {
this.initContextmenu()
}, 1500)
},
methods: {
itemClick(item) {
this.$emit('itemClick', item)
},
showToolSetItem(item) {
const { click } = item
if (click === 'sysSet') { // 系统设置
// 根据user_info中的is_admin来控制是否显示
const user_info = sessionStorage['user_info']
if (user_info) {
const user_info_json = JSON.parse(user_info)
const { is_admin } = user_info_json
if (!is_admin || is_admin === 0) return
return is_admin === true
} else {
if (!user_info && top !== self && location.hostname !== '0.0.0.0') return false
return true
}
} else {
return true
}
},
closeMenu() {
this.innervisible = false
},
initContextmenu() {
const nav = this.targetDom
const that = this
nav.oncontextmenu = event => {
event.preventDefault()
that.openMenu(event)
}
},
openMenu(e) {
this.left = e.clientX
this.top = e.clientY
this.innervisible = true
}
}
}
</script>
<style scoped lang="scss">
.contextmenu {
margin: 0;
background: #585858c4;
z-index: 3000;
position: absolute;
list-style-type: none;
padding: 5px 0;
border-radius: 4px;
font-size: 14px;
font-weight: 400;
color: #fff;
box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.3);
text-align: left;
li {
margin: 0;
padding: 7px 16px;
cursor: pointer;
&:hover {
background: #409eff;
}
}
}
</style>
......@@ -6,8 +6,9 @@
>{{configData.title}}</div>
<div class="containerSelf">
<el-date-picker
class="targetPickerDom"
ref='currentDom'
v-clickoutside="hidePicker"
v-click-outside="hidePicker"
@change='changed'
size='mini'
v-model="valueInner"
......@@ -17,6 +18,8 @@
:range-separator="configData.rangeSeparator"
:start-placeholder="configData.startPlaceholder"
:end-placeholder="configData.endPlaceholder"
:picker-options='pickerOptions'
:default-time='configData.defaultTime'
>
</el-date-picker>
</div>
......@@ -24,6 +27,7 @@
</template>
<script>
import commonMixins from '../../ucClass/commonMixins'
import { getSomeWeekStartDays, getSomeMonthStartDays, getSomeYearStartDays } from './moment'
export default {
mixins: [commonMixins],
name: 'date-picker-component',
......@@ -34,14 +38,18 @@ export default {
valueInner: {
get: function() {
const type = this.configData.type
if (!type.includes('range')) {
return this.value
} else if (type.includes('range')) {
if (typeof this.value === 'string') {
return this.value.split(',')
} else if (Array.isArray(this.value)) {
return this.value
if (type) {
if (!type.includes('range')) {
return this.value || ''
} else if (type.includes('range')) {
if (typeof this.value === 'string') {
return this.value.split(',')
} else if (Array.isArray(this.value)) {
return this.value
}
}
} else {
return this.value
}
},
set: function(value) {
......@@ -50,15 +58,87 @@ export default {
return
}
const type = this.configData.type
if (!type.includes('range')) {
this.$emit('input', value)
if (type) {
if (!type.includes('range')) {
this.$emit('input', value)
} else {
this.$emit('input', value.join(','))
}
} else {
this.$emit('input', value.join(','))
this.$emit('input', value)
}
}
},
pickerOptions: function() {
const pickerOptions = this.configData.pickerOptions || {}
const shortcuts = pickerOptions.shortcuts || []
shortcuts.forEach(item => {
const { start, end } = item
const start_ = start ? start.replace(/\-/g, '+-') : ''
const end_ = end ? end.replace(/\-/g, '+-') : ''
item.onClick = (picker) => {
// 如果是单个值则设置一个,否则设置[]
const result_start = this.execNow(start_)
const result_end = this.execNow(end_)
const type = this.configData.type
if (type.includes('range')) {
picker.$emit('pick', [result_start, result_end])
} else {
picker.$emit('pick', result_start)
}
}
})
return {
shortcuts
}
}
},
methods: {
execNow(execStr) {
const list = execStr.split('+')
var now = new Date()
list.forEach(item => {
now = this.addNow(now, item)
})
return now
},
addNow(now, item) {
if (!item) return now
const resultNow = now
const unit_item = item.substr(item.length - 1, 1)// 单位
const unit_list = ['w', 'M', 'd', 'y']
const value_item = unit_list.includes(unit_item) ? Number(item.substr(0, item.length - 1)) : Number(item.substr(0, item.length))// 值
// 要把所有单位换算成天来计算
var d_value = 0
const nowTime = now.getTime()
switch (unit_item) {
case 'w':// 周
d_value = getSomeWeekStartDays(now, value_item)
const time = value_item > 0 ? d_value - nowTime : nowTime - d_value
const r = value_item > 0 ? nowTime + time : nowTime - time
resultNow.setTime(r)
// d_value = value_item * 7
break
case 'M':// 月
d_value = getSomeMonthStartDays(now, value_item)
const time1 = value_item > 0 ? d_value - nowTime : nowTime - d_value
const r1 = value_item > 0 ? nowTime + time1 : nowTime - time1
resultNow.setTime(r1)
break
case 'y':// 年
d_value = getSomeYearStartDays(now, value_item)
const timeY = value_item > 0 ? d_value - nowTime : nowTime - d_value
const rY = value_item > 0 ? nowTime + timeY : nowTime - timeY
resultNow.setTime(rY)
break
default:
// case 'd' :// 天
d_value = 3600 * 1000 * 24 * value_item
resultNow.setTime(resultNow.getTime() + d_value)
break
}
return resultNow
},
hidePicker() {
this.$refs.currentDom.hidePicker()
},
......@@ -102,4 +182,7 @@ export default {
.selectBoxPlus >>> .el-select .el-input__inner {
height: 100%;
}
.targetPickerDom{
width: 100%;
}
</style>
import moment from 'moment'
// 获取当天开始结束时间
export function getCurrDays() {
const date = []
date.push(moment().format('YYYY-MM-DD'))
date.push(moment().format('YYYY-MM-DD'))
// 获取当天的开始结束时间,精确到时分秒
// moment().startOf('days').format('YYYY-MM-DD HH:mm:ss')
// moment().endOf('days').format('YYYY-MM-DD HH:mm:ss')
return date
}
// 获取昨天的开始结束时间
export function getYesterday() {
const date = []
date.push(moment().subtract('days', 1).format('YYYY-MM-DD'))
date.push(moment().subtract('days', 1).format('YYYY-MM-DD'))
// 获取昨天的开始结束时间,精确到时分秒
// moment().subtract('days',1).startOf('days').format('YYYY-MM-DD HH:mm:ss')
// moment().subtract('days',1).endOf('days').format('YYYY-MM-DD HH:mm:ss')
return date
}
// 获取明天的开始结束时间
export function getTomorrow() {
const date = []
date.push(moment().add('days', 1).format('YYYY-MM-DD'))
date.push(moment().add('days', 1).format('YYYY-MM-DD'))
return date
}
// 获取最近七天的开始结束时间
export function getLast7Days() {
const date = []
// 不包含当天
date.push(moment().subtract('days', 7).format('YYYY-MM-DD'))
date.push(moment().subtract('days', 1).format('YYYY-MM-DD'))
// 包含当天
// date.push(moment().subtract('days',6).format('YYYY-MM-DD'))
// date.push(moment().format('YYYY-MM-DD'))
return date
}
// 获取最近30天的开始结束时间
export function getLast30Days() {
const date = []
date.push(moment().subtract('days', 30).format('YYYY-MM-DD'))
date.push(moment().subtract('days', 1).format('YYYY-MM-DD'))
return date
}
// 获取当前周的开始结束时间,周日到周六
export function getCurrWeekDays() {
const date = []
const start = moment().startOf('week').format('YYYY-MM-DD')
const end = moment().endOf('week').format('YYYY-MM-DD')
date.push(start)
date.push(end)
return date
}
// 获取上一周的开始结束时间,周日到周六
export function getLastWeekDays(f = 1) {
const date = []
const start = moment().week(moment().week() + f).startOf('week').add(1, 'days').format('YYYY-MM-DD')
const end = moment().week(moment().week() + f).endOf('week').add(1, 'days').format('YYYY-MM-DD')
date.push(start)
date.push(end)
return date
}
// 获取下一周的开始结束时间,周日到周六
export function getNextWeekDays() {
const date = []
const start = moment().week(moment().week() + 1).startOf('week').format('YYYY-MM-DD')
const end = moment().week(moment().week() + 1).endOf('week').format('YYYY-MM-DD')
date.push(start)
date.push(end)
return date
}
// 获取当前月的开始结束时间
export function getCurrMonthDays() {
const date = []
const start = moment().startOf('month').format('YYYY-MM-DD')
const end = moment().endOf('month').format('YYYY-MM-DD')
date.push(start)
date.push(end)
return date
}
// 获取某一周的开始时间
export function getSomeWeekStartDays(now, f = 1) {
const start = moment(now).week(moment(now).week() + f).startOf('week').add(1, 'days').format()
return new Date(start)
}
export function getSomeMonthStartDays(now, f = 1) {
const start = moment(now).month(moment(now).month() + f).startOf('month').format()
return new Date(start)
}
export function getSomeYearStartDays(now, f = 1) {
const start = moment(now).year(moment(now).year() + f).startOf('year').format()
return new Date(start)
}
// 获取上一月的开始结束时间
export function getLastMonthDays() {
const date = []
const start = moment().month(moment().month() - 1).startOf('month').format('YYYY-MM-DD')
const end = moment().month(moment().month() - 1).endOf('month').format('YYYY-MM-DD')
date.push(start)
date.push(end)
return date
}
// 当前季度
export function getCurrQuarter() {
const date = []
const start = moment().startOf('quarter').format('YYYY-MM-DD')
const end = moment().endOf('quarter').format('YYYY-MM-DD')
date.push(start)
date.push(end)
return date
}
// 上个季度
export function getLastQuarter() {
const date = []
const start = moment().quarter(moment().quarter() - 1).startOf('quarter').format('YYYY-MM-DD')
const end = moment().quarter(moment().quarter() - 1).endOf('quarter').format('YYYY-MM-DD')
date.push(start)
date.push(end)
return date
}
......@@ -12,15 +12,14 @@
v-if='visible'
>
<hs-dync-form
type='ediArea'
controlType='ediArea'
:style="{'height':dialogHeight}"
:formParms='detailForm'
:elInfo='asyncElInfoEdiArea'
:config='dyncFormEdiAreaMainConfig'
v-bind="$attrs"
v-on="$listeners"
>
</hs-dync-form>
/>
</div>
<div
slot="footer"
......
......@@ -5,13 +5,13 @@
:config='hsDialogConfig'
@close='close'
>
<div slot="body">
<div slot="body" v-if='dialogVisible'>
<iframe
id='hsDialogIframe'
name="hsDialogIframe"
:src='pageSrc'
style="width:100%;height:600px;padding-top:10px"
sandbox="allow-popups-to-escape-sandbox allow-downloads allow-same-origin allow-scripts allow-forms allow-top-navigation allow-popups"
sandbox="allow-downloads allow-same-origin allow-scripts allow-forms allow-top-navigation allow-popups"
></iframe>
</div>
</hs-dialog>
......@@ -69,6 +69,9 @@ export default {
// 延迟设置title+form_id
this.setCapTion(data)
}, 1000)
} else if (type === 'close') {
// 关闭当前弹出框
this.close()
}
},
setCapTion(data) {
......
......@@ -10,7 +10,7 @@
<div slot="body">
<!-- <dyncFormComponent
@searchSubmit='query'
type='queryArea'
controlType='queryArea'
:formParms='searchForm'
:elInfo='asyncElInfo'
:allSourceData='dyncFormConfig'
......
......@@ -6,7 +6,7 @@
@open='handleOpen'
:close-on-click-modal="false"
:fullscreen='configData.fullscreen'
:append-to-body="true"
append-to-body
:before-close="handleClose">
<slot name="body"></slot>
<slot name="footer"></slot>
......
......@@ -27,7 +27,7 @@
>
<hs-dync-form
@searchSubmit='queryTable'
type='queryArea'
controlType='queryArea'
:formParms='searchForm'
:elInfo='hsDyncFormEl'
:config='hsDyncFormConfig'
......@@ -126,7 +126,7 @@ export default {
},
hsDyncFormConfig: function() {
// 获取控件配置
const { config } = this.$listeners.findTargetControl(
const { config } = this.$attrs.findTargetControl(
this.hsDyncFormEl.position,
'hsDyncFormComponent'
)
......@@ -134,14 +134,14 @@ export default {
},
hsTableFormConfigRight: function() {
// 获取控件配置
const { config } = this.$listeners.findTargetControl(
const { config } = this.$attrs.findTargetControl(
this.hsTableElRight.position,
'hsTableSimple'
)
return config
},
hsTableFormConfigLeft: function() {
const { config } = this.$listeners.findTargetControl(
const { config } = this.$attrs.findTargetControl(
this.hsTableElLeft.position,
'hsTableSimple'
)
......@@ -295,7 +295,7 @@ export default {
// 调用外面的查询方法
const obj = {}
obj[value] = this.value
const data = await this.$listeners.queryLookup(
const data = await this.$attrs.queryLookup(
this.config,
this.formData,
obj
......@@ -315,7 +315,7 @@ export default {
this.searchForm.page = 1
}
// 调用外面的查询方法
const data = await this.$listeners.queryLookup(
const data = await this.$attrs.queryLookup(
this.config,
this.formData,
this.searchForm
......
<template>
<div
@contextmenu.prevent="onContextmenu"
ref='boxDom'
class="outBox"
:style="{'height':configData.height||height}"
>
<template v-if="type!=='queryArea'">
<template v-if="controlType!=='queryArea'">
<dyncFormItemComponentTable
:formParms='formParms'
:configData='configData'
......@@ -15,6 +17,7 @@
</template>
<template v-else>
<dyncFormItemComponentQuery
controlType='queryArea'
:formParms='formParms'
@submit='searchSubmit'
@enterInput='searchSubmit'
......@@ -24,30 +27,109 @@
v-on="$listeners"
></dyncFormItemComponentQuery>
</template>
<formDevConfigColumsSet
:controlType='controlType'
:visible.sync='visibleFormColumsDevSet'
:elInfo='elInfo'
:config='config'
v-bind="$attrs"
/>
<formUserSysConfigColumsSet
:controlType='controlType'
:configRole='configRole'
:elInfo='elInfo'
:visible.sync='visibleFormColumsUserSysSet'
v-bind="$attrs"
/>
<hs-contextmenu
v-if="false"
:visible.sync='visibleSet'
:menuList='menuList'
:targetDom='targetDom'
@itemClick='itemClickContextmenu'
></hs-contextmenu>
</div>
</template>
<script>
import dyncFormItemComponentTable from './dyncFormItemComponentTable'
import dyncFormItemComponentQuery from './dyncFormItemComponentQuery'
import commonMixins from '../../ucClass/commonMixins'
import formDevConfigColumsSet from '../../common/formDevConfigColumsSet'
import formUserSysConfigColumsSet from '../../common/formUserSysConfigColumsSet'
import _ from 'lodash'
export default {
name: 'dync-form-component',
mixins: [commonMixins],
components: {
dyncFormItemComponentTable,
dyncFormItemComponentQuery
dyncFormItemComponentQuery,
formDevConfigColumsSet,
formUserSysConfigColumsSet
},
props: {
height: {
default: '100%'
},
formParms: {},
type: {
controlType: {
default: 'queryArea'
}
},
data() {
return {
visibleSet: false,
menuList: [
{
label: '用户设置',
click: 'userSet'
},
{
label: '系统设置',
click: 'sysSet'
},
{
label: '开发设置',
click: 'devSet'
}
],
targetDom: null,
configRole: '0',
visibleFormColumsDevSet: false,
visibleFormColumsUserSysSet: false
}
},
mounted() {
this.targetDom = this.$refs.boxDom
},
computed: {
contextmenuItems: function() {
const isDev = this.getIsDev()
const isAdmin = this.getIsAdmin()
const list = [
{
label: '配置(用户)',
isShow: true,
onClick: () => {
this.userSysSet('1')
}
},
{
label: '配置(系统)',
isShow: isAdmin,
onClick: () => {
this.userSysSet('0')
}
},
{
label: '配置(开发)',
isShow: isDev,
onClick: () => {
this.devSet()
}
}
]
return list.filter(item => item.isShow)
},
getDisabled: function() {
return this.execInnerDisabled()
},
......@@ -56,13 +138,24 @@ export default {
},
columnsAll: function() {
const formColumn = this.configData.formColumn || []
// 筛选出可以显示的列
const list = formColumn.filter(item => {
const { isHide } = item
let isHideResult = isHide
if (typeof isHide === 'function') {
isHideResult = isHide(this.formParms)
const { isHide, isShow } = item
const typeofHide = typeof isHide
const typeofShow = typeof isShow
let result = true
if (typeofShow === 'boolean') {
result = isShow
} else if (typeofShow === 'function') {
result = isShow(this.formParms)
} else if (typeofHide === 'boolean') {
result = !isHide
} else if (typeofHide === 'function') {
result = !isHide(this.formParms)
} else if (typeofHide === 'undefined' && typeofShow === 'undefined') {
result = true
}
return !isHideResult
return result
})
list.forEach(item => {
const disabledItem = this.handDisabled(item)
......@@ -72,6 +165,65 @@ export default {
}
},
methods: {
getIsAdmin() {
const user_info = sessionStorage['user_info']
if (user_info) {
const user_info_json = JSON.parse(user_info)
const { is_admin } = user_info_json
if (is_admin === true || is_admin === '1' || is_admin === 1) return true
} else {
if (top !== self && location.hostname !== '0.0.0.0') return false
if (top === self && location.hostname === '0.0.0.0') return true
}
},
getIsDev() {
const user_info = sessionStorage['user_info']
if (user_info) {
const user_info_json = JSON.parse(user_info)
const { systemSysDevDb } = user_info_json
if (
systemSysDevDb === true ||
systemSysDevDb === '1' ||
systemSysDevDb === 1
)
return true
} else {
if (top !== self && location.hostname !== '0.0.0.0') return false
if (top === self && location.hostname === '0.0.0.0') return true
}
},
onContextmenu(event) {
this.$contextmenu({
items: this.contextmenuItems,
event,
// x: event.clientX,
// y: event.clientY,
customClass: 'class-a',
zIndex: 999999999,
minWidth: 230
})
return false
},
itemClickContextmenu(item) {
const { click } = item
switch (click) {
case 'userSet':
this.userSysSet('1')
break
case 'sysSet':
this.userSysSet('0')
break
case 'devSet':
this.devSet()
}
},
userSysSet(num) {
this.configRole = num
this.visibleFormColumsUserSysSet = true
},
devSet() {
this.visibleFormColumsDevSet = true
},
handDisabled(item) {
let bool = false
if (this.formParms._readonlyFields) {
......@@ -119,3 +271,8 @@ export default {
width: auto;
}
</style>
<style>
div.menu.class-a {
z-index: 99999999 !important;
}
</style>
<template>
<div class="itemBox">
<i
v-if='item.isRequired&&!showLabel(item)'
class="isRequiredIcon1"
>*</i>
<label
v-if="showLabel(item)"
class="el-form-item__label labelDefaultWidth labelTextOverflow"
:style="{width:item.labelWidth+'px'}"
>
<i
v-if="item.isRequired"
class="isRequiredIcon"
v-if='item.isRequired'
class="isRequiredIcon2"
>*</i>
{{item.label}}
</label>
......@@ -18,7 +22,6 @@
<childItem
:item='item'
:formParms='formParms'
:type='type'
@enterInput='enterInput'
v-bind="$attrs"
v-on="$listeners"
......@@ -34,9 +37,8 @@ export default {
childItem
},
props: {
type: {},
item: {},
formParms: {},
formParms: {}
},
methods: {
uploadSuccess() {
......@@ -55,8 +57,13 @@ export default {
}
</script>
<style scoped>
.isRequiredIcon {
.isRequiredIcon2{
color: red;
}
.isRequiredIcon1 {
color: red;
display: flex;
align-items: center;
}
.itemBox {
display: flex;
......
......@@ -25,7 +25,6 @@
<template v-else-if="item.type==='elDatePicker'">
<el-date-picker
ref='currentDom'
v-click-outside="hidePicker"
clearable
style="width:100%"
size='mini'
......@@ -55,7 +54,6 @@
<template v-else-if="item.type==='elDatePickerDate'">
<el-date-picker
ref='currentDom'
v-click-outside="hidePicker"
clearable
style="width:100%"
size='mini'
......@@ -69,7 +67,6 @@
<template v-else-if="item.type==='elDatePickerMonth'">
<el-date-picker
ref='currentDom'
v-click-outside="hidePicker"
clearable
style="width:100%"
size='mini'
......@@ -83,7 +80,6 @@
<template v-else-if="item.type==='elDatePickerMonthRange'">
<el-date-picker
ref='currentDom'
v-click-outside="hidePicker"
clearable
style="width:100%"
size='mini'
......@@ -127,7 +123,6 @@
:elInfo='item.elInfo'
:disabled='item.handleDisabled'
:prop='item.prop'
:containerType='type'
v-bind="$attrs"
v-on="$listeners"
>
......@@ -140,7 +135,7 @@
:elInfo='item.elInfo'
:disabled='item.handleDisabled'
:prop='item.prop'
:containerType='type'
:containerType='$attrs.controlType'
v-bind="$attrs"
v-on="$listeners"
>
......@@ -154,7 +149,7 @@
:disabled='item.handleDisabled'
:formData='formParms'
:prop='item.prop'
:containerType='type'
:containerType='$attrs.controlType'
v-bind="$attrs"
v-on="$listeners"
>
......@@ -168,7 +163,7 @@
:disabled='item.handleDisabled'
:formData='formParms'
:prop='item.prop'
:containerType='type'
:containerType='$attrs.controlType'
v-bind="$attrs"
v-on="$listeners"
>
......@@ -182,7 +177,7 @@
:disabled='item.handleDisabled'
:formData='formParms'
:prop='item.prop'
:containerType='type'
:containerType='$attrs.controlType'
v-bind="$attrs"
v-on="$listeners"
>
......@@ -196,7 +191,7 @@
:disabled='item.handleDisabled'
:formData='formParms'
:prop='item.prop'
:containerType='type'
:containerType='$attrs.controlType'
:appCode='item.appCode'
v-bind="$attrs"
v-on="$listeners"
......@@ -294,8 +289,8 @@
>
</hs-tabs>
</template>
<template v-else-if="item.type==='hsDateTimePicker'">
<hs-date-time-picker
<template v-else-if="item.type==='hsDatePicker'">
<hs-date-picker
v-model="formParms[item.prop]"
:config='item.config'
:elInfo='item.elInfo'
......@@ -305,7 +300,20 @@
v-bind="$attrs"
v-on="$listeners"
>
</hs-date-time-picker>
</hs-date-picker>
</template>
<template v-else-if="item.type==='hsTimePicker'">
<hs-time-picker
v-model="formParms[item.prop]"
:config='item.config'
:elInfo='item.elInfo'
:disabled='item.handleDisabled'
:formData='formParms'
:prop='item.prop'
v-bind="$attrs"
v-on="$listeners"
>
</hs-time-picker>
</template>
<template v-else-if="item.type==='hsTagsSelect'">
<hs-tags-select
......@@ -315,7 +323,7 @@
:elInfo='item.elInfo'
:disabled='item.handleDisabled'
:prop='item.prop'
:containerType='type'
:containerType='$attrs.controlType'
v-bind="$attrs"
v-on="$listeners"
>
......@@ -329,7 +337,7 @@
:elInfo='item.elInfo'
:disabled='item.handleDisabled'
:prop='item.prop'
:containerType='type'
:containerType='$attrs.controlType'
v-bind="$attrs"
v-on="$listeners"
>
......@@ -402,20 +410,28 @@ export default {
ClickOutside
},
props: {
type: {},
popover_visible: {
default: false
},
item: {},
formParms: {}
},
watch: {
popover_visible(newV, oldV) {
if (newV === false) {
if (this.$refs.currentDom && this.$refs.currentDom.hidePicker) {
this.hidePicker()
}
}
}
},
methods: {
hidePicker1() {
this.$refs.currentDom.hidePicker()
},
hidePicker() {
this.$refs.currentDom.hidePicker()
},
itemClick() {
if (this.$listeners.searchSubmit) {
this.$listeners.searchSubmit()
if (this.$attrs.searchSubmit) {
this.$attrs.searchSubmit()
}
},
uploadSuccess() {
......@@ -425,7 +441,7 @@ export default {
this.$emit('enterInput', val)
},
getPlaceholder(item) {
if (item.label && item.isHideLabel && this.type === 'queryArea') {
if (item.label && item.isHideLabel && this.$attrs.controlType === 'queryArea') {
return item.label
} else {
return ''
......
......@@ -6,13 +6,12 @@
:item='item'
:formParms='formParms'
@enterInput='enterInput'
type='queryArea'
v-bind="$attrs"
v-on="$listeners"
></asyncFormItem>
</template>
<template>
<el-button-group class="isMoreSearchBox">
<el-button-group class="isMoreSearchBox" v-show='!configData.hideSearchButton'>
<el-button
@click="searchSubmit"
size='mini'
......@@ -23,8 +22,10 @@
v-if="columnsMore.length"
placement="bottom"
width="400"
trigger="click"
trigger="manual"
v-model="bill_search_popover_visible"
@hide='popoverHide'
@show='popoverShow'
>
<el-row>
<el-col :span="24">
......@@ -39,6 +40,9 @@
:label="item.label"
:prop="item.prop"
:key="index"
:rules="[
{ required: item.isRequired, message: ''},
]"
>
<childItem
:item='item'
......@@ -66,6 +70,7 @@
</el-col>
</el-row>
<el-button
@click="bill_search_popover_visible=true"
size='mini'
type="primary"
slot="reference"
......@@ -82,9 +87,13 @@
import elementUiMinins from '../../ucClass/elementUiMinins'
import asyncFormItem from './dyncFormItemComponent'
import childItem from './dyncFormItemComponentChild'
import ClickOutside from 'vue-click-outside'
export default {
mixins: [elementUiMinins],
name: 'dyncFormItemComponentQuery',
directives: {
ClickOutside
},
components: {
asyncFormItem,
childItem
......@@ -111,10 +120,17 @@ export default {
},
data() {
return {
bill_search_popover_visible: false
bill_search_popover_visible: false,
popover_visible: false
}
},
methods: {
popoverShow() {
this.popover_visible = true
},
popoverHide() {
this.popover_visible = false
},
enterInput(val) {
const { click } = this.configData
this.actionEnterInputClick(click)
......@@ -189,6 +205,8 @@ export default {
}
.isMoreSearchBox {
margin-top: 5px;
display: flex;
align-items: center;
}
.isMoreSearchForm {
/* height: 300px; */
......
......@@ -18,7 +18,6 @@
:item='coolun'
:formParms='formParms'
@enterInput='enterInput'
type='editArea'
v-bind="$attrs"
v-on="$listeners"
></asyncFormItemComponent>
......@@ -52,7 +51,7 @@ export default {
columnsLin: function() {
return this.initColumn(this.columnsAll)
},
isHideBorder:function(){
isHideBorder: function() {
return this.configData.isHideBorder || false
}
},
......
......@@ -436,7 +436,7 @@ export default {
// 清除当前input 值
e.target.value = ''
},
deleteCurrImage(image, index) {
deleteCurrImage(index) {
this.fileList.splice(index, 1)
},
preview(item, index) {
......@@ -462,7 +462,7 @@ export default {
/**
* 删除已存在文件
*/
deleteExitFile(item, index) {
deleteExitFile(index) {
this.value_inner.splice(index, 1)
this.value_inner = this.value_inner
},
......@@ -483,7 +483,7 @@ export default {
for (const item of this.fileList) {
const formData = new FormData()
formData.append(item.NewFileName, item.fileBrod)
const r = await this.$listeners.uploadFile(formData, this.configData, {
const r = await this.$attrs.uploadFile(formData, this.configData, {
onUploadProgress: function(progressEvent) {
const complete =
((progressEvent.loaded / progressEvent.total) * 100) | 0
......@@ -534,8 +534,8 @@ export default {
this.fileName = this.value_inner[0].OldFileName
}
this.dialogVisible = false
if (this.$listeners.uploadSuccess) {
this.$listeners.uploadSuccess(this.prop)
if (this.$attrs.uploadSuccess) {
this.$attrs.uploadSuccess(this.prop)
}
// 再执行一个action-uploadSuccess
this.uploadSuccessAction()
......
......@@ -90,7 +90,7 @@ export default {
}
},
configData: function() {
return this.config || { width: 200, height: 200 }
return Object.assign(this.configData_, this.config)
}
},
mounted() {
......@@ -100,7 +100,12 @@ export default {
return {
errorImg01: 'this.src="' + require('./default.png') + '"',
upload_dialogVisible: false,
upload_src: ''
upload_src: '',
configData_: {
accept: 'image/*',
width: 200,
height: 200
}
}
},
methods: {
......@@ -146,7 +151,7 @@ export default {
return
}
formData.append(this.file.name, this.file)
const res = await this.$listeners.uploadFile(formData, this.configData)
const res = await this.$attrs.uploadFile(formData, this.configData)
const res_data = res && res.data
if (Array.isArray(res_data) && res_data.length) {
const file_result = res_data[0]
......@@ -157,8 +162,8 @@ export default {
const NewFileName = file_result.NewFileName
this.$emit('input', NewFileName)
this.upload_dialogVisible = false
if (this.$listeners.uploadSuccess) {
this.$listeners.uploadSuccess(this.prop)
if (this.$attrs.uploadSuccess) {
this.$attrs.uploadSuccess(this.prop)
}
} else {
this.$message.error('fileResouce:未返回预期格式([{}])的结果!')
......
......@@ -6,7 +6,7 @@
>{{configData.title}}</div>
<div class="inputCurr">
<el-input-number
@focus="selectContent($event)"
@focus="selectContent($event)"
:size='configData.size'
@keyup.enter.native="submitInput"
v-model="innerValue"
......@@ -17,6 +17,7 @@
:min="getNumber(configData.min)"
:max="getNumber(configData.max)"
:step='configData.step'
:step-strictly='configData.stepStrictly'
></el-input-number>
</div>
</div>
......@@ -31,16 +32,20 @@ export default {
set(value) {
let result = ''
const typeValue = typeof this.value
if (typeValue === 'string') {
result = String(value)
} else {
if (value !== undefined) {
result = value
}
if (typeValue === 'string') {
result = String(result)
}
this.valueChange(result)
this.$emit('input', result)
},
get() {
return Number(this.value)
if (this.value === '') return
if (this.value === undefined) return
const result = Number(this.value)
return typeof result === 'number' ? result : 0
}
},
configData: function() {
......@@ -72,7 +77,8 @@ export default {
title: '',
placeholder: '',
size: 'mini',
disabled: false
disabled: false,
stepStrictly: false
}
}
},
......
......@@ -48,6 +48,7 @@
</template>
<script>
import commonMixins from '../../ucClass/commonMixins'
import _ from 'lodash'
export default {
mixins: [commonMixins],
name: 'input-select-component',
......@@ -119,7 +120,7 @@ export default {
methods: {
remoteMethodsDebounce: _.debounce(async function(query) {
if (this.is_mock) return
const data = await this.$listeners.queryRef(
const data = await this.$attrs.queryRef(
this.configData,
query || '',
this.formData
......
......@@ -126,7 +126,6 @@ export default {
methods: {
btKeyUp(e) {},
validateHandle(value) {
debugger
if (value === '') return ''
const { validateRegex, innerValidateRegex, validateAction } = this.configData
if (typeof validateAction === 'function') {
......@@ -134,7 +133,6 @@ export default {
return v
} else if (validateRegex) {
const r = this.regExpFun(validateRegex, value)
debugger
if (r) {
return value
} else {
......
......@@ -7,7 +7,7 @@
:visible.sync="innervisible"
@closed="dialogClose"
width="95%"
:append-to-body='true'
append-to-body
:close-on-click-modal='false'
>
<div>
......@@ -127,24 +127,26 @@
v-if="lookPageLogVisible"
:elInfo='elInfo'
/>
<tbaleColumsSet
v-model="dialogVisibleTbaleColums"
<devConfigColumsSet
v-bind="$attrs"
:visible.sync="visibleDevSetTableColums"
:tableDataColums='tableDataColums'
:allSourceData='allSourceDataTbaleColumsSet'
:mockSourceData='mockSourceData'
:elInfo='elInfo'
:isEditColumns='isEditColumns'
@submit='submitTbaleColumsSet'
@saveSuccess='submitTbaleColumsSet'
:config='configEdit'
:data='dataEdit'
:isSubmitSuccessFlage='isSubmitSuccessFlage'
/>
<asyncFormPropSet
v-model="dialogVisibleAsyncFormColumn"
:asyncFormColumns='asyncFormColumns'
@submit='asyncFormPropSubmit'
<formDevConfigColumsSet
:visible.sync="visibleDevSetFormColums"
@saveSuccess='asyncFormPropSubmit'
:elInfo='elInfo'
:controlType='controlType'
v-bind="$attrs"
v-on="$listeners"
:config='configEdit'
:data='dataEdit'
/>
<hsTabsFormSet
v-model="dialogVisibleHsTabsForm"
......@@ -189,19 +191,22 @@
</el-dialog>
</template>
<script>
import elementUiMinins from '../../ucClass/elementUiMinins'
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 formDevConfigColumsSet from '../../common/formDevConfigColumsSet.vue'
import devConfigColumsSet from '../../common/tableDevConfigColumsSet.vue'
import hsTabsFormSet from '../../common/hsTabsFormSet'
import 'jsoneditor/dist/jsoneditor.min.css'
import jsoneditor from 'jsoneditor'
export default {
mixins: [elementUiMinins],
components: { lookPageLog, asyncFormPropSet, tbaleColumsSet, hsTabsFormSet },
components: {
lookPageLog,
formDevConfigColumsSet,
devConfigColumsSet,
hsTabsFormSet
},
name: 'hs-jsoneditor',
props: {
elInfo: {
......@@ -234,12 +239,6 @@ export default {
isEditColumns: {}
},
computed: {
allSourceDataTbaleColumsSet() {
return {
config: this.config,
data: this.data
}
},
innervisible: {
get() {
return this.visible
......@@ -255,6 +254,12 @@ export default {
} else {
return ''
}
},
configEdit() {
return (this.editor1 && this.editor1.get()) || {}
},
dataEdit() {
return (this.editor2 && this.editor2.get()) || []
}
},
data() {
......@@ -274,10 +279,10 @@ export default {
lookPageLogVisible: false,
isrequest: false,
textareaSql: '',
dialogVisibleTbaleColums: false,
visibleDevSetTableColums: false,
mockSourceData: [],
tableDataColums: [],
dialogVisibleAsyncFormColumn: false,
visibleDevSetFormColums: false,
asyncFormColumns: [],
isSubmitSuccessFlage: '',
tipAdminDialogVisible: false,
......@@ -321,51 +326,13 @@ export default {
num
)
},
submitTbaleColumsSet(columnsConfig, flage) {
const config = this.editor1.get()
config.columnsConfig = columnsConfig
submitTbaleColumsSet(config) {
this.editor1.set(config)
const sql = this.textareaSql
const {
dbName,
appCode,
pageName,
controlName,
isMock
} = this.controlInfo
const data = {
dbName,
appCode,
pageName,
controlName,
config,
data: this.editor2.get(),
querySql: this.textareaSql,
mockData: isMock ? 1 : 0,
controlType: this.elInfo.el || ''
}
this.$listeners.webChartConfigSave(data).then(() => {
this.$message.success('设置成功')
if (flage === 'columnStyleSet') {
this.isSubmitSuccessFlage = 'columnStyleSet'
} else {
this.isSubmitSuccessFlage = 'tbaleColumsSet'
this.dialogVisibleTbaleColums = false
}
this.editor1.set(config)
})
this.visibleDevSetTableColums = false
},
asyncFormPropSubmit(data) {
const config = this.editor1.get()
config.formColumn = data
const datas = {
config: config
}
this.saveData(datas).then(res => {
this.dialogVisibleAsyncFormColumn = false
this.editor1.set(datas.config)
})
asyncFormPropSubmit(config) {
this.editor1.set(config)
this.visibleDevSetFormColums = false
},
saveData(datas) {
const data = {
......@@ -376,17 +343,19 @@ export default {
config: datas.config || this.editor1.get(),
data: this.editor2.get(),
querySql: this.textareaSql,
mockData: this.controlInfo.isMock ? 1 : 0
mockData: this.controlInfo.isMock ? 1 : 0,
userId: -1,
configType: -1
}
return this.$listeners.webChartConfigSave(data)
return this.$attrs.webChartConfigSave(data)
},
editAnyncColums() {
this.dialogVisibleAsyncFormColumn = true
this.visibleDevSetFormColums = true
const config = this.editor1.get()
this.asyncFormColumns = config.formColumn
},
editTableColums() {
this.dialogVisibleTbaleColums = true
this.visibleDevSetTableColums = true
const config = this.editor1.get()
this.mockSourceData = this.editor2.get()
if (config && config.columnsConfig && config.columnsConfig.length) {
......@@ -415,7 +384,7 @@ export default {
this.showView()
},
revertVersion_(parm) {
this.$listeners.webChartConfigRevert(parm).then(res => {
this.$attrs.webChartConfigRevert(parm).then(res => {
this.getPageInfo()
this.isrequest = !this.isrequest
})
......@@ -425,18 +394,21 @@ export default {
execSql: this.query_sql,
dbName: this.controlInfo.dbName
}
this.$listeners.execSql(data).then(res => {
this.$attrs.execSql(data).then(res => {
this.editor2.set(res)
})
},
getPageInfo(info = this.controlInfo) {
// 传入的参数要判断是否是系统、用户、开发
const { controlName, pageName, appCode } = info
const data = {
controlName,
appCode,
pageName
pageName,
userId: -1,
configType: -1
}
this.$listeners.webChartConfigQuery(data).then(res => {
this.$attrs.webChartConfigQuery(data).then(res => {
const data = res.data
if (data && data.length) {
// 以后端返回的控件信息为准
......@@ -478,7 +450,7 @@ export default {
appCode: this.controlInfo.appCode,
pageName: this.controlInfo.pageName
}
this.$listeners.saveAsDataToLocal(data)
this.$attrs.saveAsDataToLocal(data)
},
dialogClose() {
this.innervisible = false
......@@ -563,9 +535,11 @@ export default {
config: editor1Config,
data: editor2Config,
querySql: sql,
mockData: this.controlInfo.isMock ? 1 : 0
mockData: this.controlInfo.isMock ? 1 : 0,
userId: -1,
configType: -1
}
this.$listeners.webChartConfigSave(data_).then(() => {
this.$attrs.webChartConfigSave(data_).then(() => {
this.$message.success('设置成功')
})
},
......
......@@ -23,12 +23,11 @@
>
<hs-dync-form
@searchSubmit='queryTable'
type='queryArea'
controlType='queryArea'
:formParms='searchForm'
:elInfo='hsDyncFormEl'
:config='hsDyncFormConfig'
v-bind="$attrs"
v-on="$listeners"
>
</hs-dync-form>
<div
......@@ -57,7 +56,6 @@
@tableRowDblclick='tableRowDblclick'
@paginationFun="paginationFun"
v-bind="$attrs"
v-on="$listeners"
>
</hs-table>
......@@ -71,6 +69,7 @@
@click="dialogTableVisible = false"
>取 消</el-button>
<el-button
v-show='configData.isShowSubmit'
size='mini'
type="primary"
@click="submit"
......@@ -106,7 +105,6 @@ export default {
}
},
hsTableData() {
console.log('测试hsTableData')
const data = this.tableData
const { value } = this.configData
const list = this.value ? this.value.split(',') : []
......@@ -129,7 +127,7 @@ export default {
},
// 查询表单配置
hsDyncFormConfig: function() {
const { config } = this.$listeners.findTargetControl(
const { config } = this.$attrs.findTargetControl(
this.hsDyncFormEl.position,
'hsDyncFormComponent'
)
......@@ -144,7 +142,7 @@ export default {
},
// 表格配置
hsTableConfig() {
const { config } = this.$listeners.findTargetControl(
const { config } = this.$attrs.findTargetControl(
this.hsTableEl.position,
'hsTableSimple'
)
......@@ -159,7 +157,7 @@ export default {
}
},
configData: function() {
return this.config || {}
return Object.assign(defaultConfigData, this.config || {})
}
},
watch: {
......@@ -182,7 +180,10 @@ export default {
isChange: false,
selectedData: [],
firstQuery: true,
paging: null
paging: null,
defaultConfigData: {
isShowSubmit: true
}
}
},
methods: {
......@@ -298,7 +299,7 @@ export default {
// 调用外面的查询方法
const obj = {}
obj[value] = this.value
const data = await this.$listeners.queryLookup(
const data = await this.$attrs.queryLookup(
this.configData,
obj,
this.formData
......@@ -323,7 +324,7 @@ export default {
this.searchForm.page = 1
}
// 调用外面的查询方法
const data = await this.$listeners.queryLookup(
const data = await this.$attrs.queryLookup(
this.configData,
this.searchForm,
this.formData
......@@ -360,22 +361,37 @@ export default {
return data_
},
/**
* 将输入框第一个值属性作为查询条件
* 将输入框第一个值属性作为查询条件, 把显示的值赋给查询对象中的某个值,当查询区域中有displayfield对应的字段时 则直接赋予给他,否则赋予给第一个字段
*/
setDefaultQueryParms() {
if (this.dialogTableVisible) return
const config = this.hsDyncFormConfig || {}
if (config.formColumn && config.formColumn.length) {
const formColumn = config.formColumn
const targetItem = formColumn[0]
const prop = targetItem.prop
this.$set(this.searchForm, prop, this.label_value)
const displayfield = this.configData.displayfield
const f = displayfield
? formColumn.find(item => item.prop === displayfield)
: false
if (f) {
this.$set(this.searchForm, displayfield, this.label_value)
} else {
const targetItem = formColumn[0]
const prop = targetItem.prop
this.$set(this.searchForm, prop, this.label_value)
}
} else {
this.$set(
this.searchForm,
this.configData.displayfield,
this.label_value
)
}
},
/**
* 多选时必须点击确定按钮
*/
submit() {
if (this.getDisabled) return
const selectData = this.hsTableData.filter(x => x.isSelected)
const prop = this.configData.value
const list_ids = selectData.map(x => {
......@@ -388,6 +404,7 @@ export default {
// 设置回写字段
this.setWritebackfield(selectData)
this.dialogTableVisible = false
debugger
},
setSelectedData(data) {
this.selectedData = _.cloneDeep(data)
......@@ -396,6 +413,7 @@ export default {
* 双击行时设置当前行为选中项
*/
tableRowDblclick(row) {
if (this.getDisabled) return
const prop = this.configData.value
this.$emit('input', row[prop])
this.changeAction(row[prop])
......
......@@ -39,7 +39,7 @@
<hs-dync-form
height='55px'
@searchSubmit='queryLeft'
type='queryArea'
controlType='queryArea'
:formParms='searchFormLeft'
:elInfo='hsDyncFormElLeft'
:config='hsDyncFormConfigLeft'
......@@ -83,7 +83,7 @@
<hs-dync-form
height='55px'
@searchSubmit='queryRight'
type='queryArea'
controlType='queryArea'
:formParms='searchFormRight'
:elInfo='hsDyncFormElRight'
:config='hsDyncFormConfigRight'
......
<template>
<div style='width:100%;height:100%;'>
<div class="outBox">
<div class="boxInputButton">
<el-input
:disabled="getDisabled"
......@@ -35,12 +35,11 @@
<hs-dync-form
height='55px'
@searchSubmit='queryLeft'
type='queryArea'
controlType='queryArea'
:formParms='searchFormLeft'
:elInfo='hsDyncFormElLeft'
:config='hsDyncFormConfigLeft'
v-bind="$attrs"
v-on="$listeners"
>
</hs-dync-form>
<hs-table
......@@ -52,7 +51,6 @@
:elInfo='hsTableElLeft'
@paginationFun="paginationFunLeft"
v-bind="$attrs"
v-on="$listeners"
>
</hs-table>
</div>
......@@ -79,12 +77,11 @@
<hs-dync-form
height='55px'
@searchSubmit='queryRight'
type='queryArea'
controlType='queryArea'
:formParms='searchFormRight'
:elInfo='hsDyncFormElRight'
:config='hsDyncFormConfigRight'
v-bind="$attrs"
v-on="$listeners"
>
</hs-dync-form>
<hs-table
......@@ -96,7 +93,6 @@
:elInfo='hsTableElRight'
@paginationFun="paginationFunRight"
v-bind="$attrs"
v-on="$listeners"
>
</hs-table>
</div>
......@@ -113,11 +109,13 @@
@click="beforeClose"
>取 消</el-button>
<el-button
v-show="configData.isShowSubmit"
size='mini'
type="primary"
@click="submit"
>确 定</el-button>
<el-button
v-show="configData.isShowAdd"
size='mini'
icon='el-icon-position'
type="primary"
......@@ -161,21 +159,21 @@ export default {
},
hsDyncFormConfigLeft: function() {
// 获取控件配置
const { config } = this.$listeners.findTargetControl(
const { config } = this.$attrs.findTargetControl(
this.hsDyncFormElLeft.position,
'hsDyncFormComponent'
)
return config
},
rightHsTableConfig() {
const { config } = this.$listeners.findTargetControl(
const { config } = this.$attrs.findTargetControl(
this.hsTableElRight.position,
'hsTableSimple'
)
return config
},
leftHsTableConfig() {
const { config } = this.$listeners.findTargetControl(
const { config } = this.$attrs.findTargetControl(
this.hsTableElLeft.position,
'hsTableSimple'
)
......@@ -198,7 +196,7 @@ export default {
},
hsDyncFormConfigRight: function() {
// 获取控件配置
const { config } = this.$listeners.findTargetControl(
const { config } = this.$attrs.findTargetControl(
this.hsDyncFormElRight.position,
'hsDyncFormComponent'
)
......@@ -217,7 +215,7 @@ export default {
}
},
configData: function() {
return this.config || {}
return Object.assign(this.defaultConfigData, this.config || {})
},
label_value: {
get() {
......@@ -261,6 +259,10 @@ export default {
dialogVisible: false,
dialogConfig: {
title: '查询'
},
defaultConfigData: {
isShowSubmit: true,
isShowAdd:true
}
}
},
......@@ -274,7 +276,7 @@ export default {
*/
async showAddPage() {
this.isChange = false
const configData = this.$listeners.dealWithConfig(
const configData = this.$attrs.dealWithConfig(
this.configData,
this.formData
)
......@@ -402,7 +404,7 @@ export default {
const { value } = this.configData
// 调用外面的查询方法
this.searchFormRight[value] = this.value
const data = await this.$listeners.queryLookup(
const data = await this.$attrs.queryLookup(
this.configData,
this.searchFormRight,
this.formData
......@@ -430,7 +432,7 @@ export default {
this.searchFormLeft.page = 1
}
// 调用外面的查询方法
const data = await this.$listeners.queryLookup(
const data = await this.$attrs.queryLookup(
this.configData,
this.searchFormLeft,
this.formData
......@@ -616,6 +618,12 @@ export default {
}
</script>
<style scoped>
.outBox{
width: 100%;
height: 100%;
display: flex;
align-items: center;
}
.showBox {
position: relative;
width: 100%;
......
......@@ -11,7 +11,7 @@
>
<el-select
:class="{'noneStyle':isReadOnly1,'noneStyle2':isReadOnly1}"
v-clickoutside='handleClickOutside'
v-click-outside='handleClickOutside'
ref='elSelect'
:allow-create='configData.allowCreate'
:default-first-option='configData.defaultFirstOption'
......@@ -438,7 +438,7 @@ export default {
*/
async showAddPage() {
this.isChange = false
const configData = this.$listeners.dealWithConfig(
const configData = this.$attrs.dealWithConfig(
this.configData,
this.formData
)
......@@ -556,7 +556,7 @@ export default {
// 节流
remoteMethodsDebounce: _.debounce(async function(query) {
if (this.is_mock) return
const data = await this.$listeners.queryRef(
const data = await this.$attrs.queryRef(
this.configData,
query || '',
this.formData
......@@ -697,7 +697,7 @@ export default {
color: inherit;
}
.noneStyle >>> .el-input__suffix-inner {
display: none;
display: none ;
}
.noneStyle2 >>> .el-input__suffix-inner {
display: none;
......
<template>
<div class="componentBox">
<div class="componentLabel" v-if='configData.title'>{{configData.title}}</div>
<el-switch
class="componentSelf"
v-model="innerValue"
:active-text="configData.activeText"
:inactive-text="configData.inactiveText"
......@@ -7,6 +10,8 @@
:disabled='getDisabled'
>
</el-switch>
</div>
</template>
<script>
import commonMixins from '../../ucClass/commonMixins'
......@@ -67,6 +72,7 @@ export default {
data() {
return {
config_data: {
title: '',
activeText: '',
inactiveText: '',
disabled: false
......@@ -87,3 +93,23 @@ export default {
}
}
</script>
<style scoped>
.componentBox {
padding: 1px;
width: 100%;
height: 100%;
align-items: center;
display: flex;
}
.componentLabel{
margin-right: 8px;
display: flex;
justify-content: center;
align-items: center;
}
.componentSelf{
display: flex;
justify-content: center;
align-items: center;
}
</style>
<template>
<div style="width:100%;height:100%;" class="itemBoxHstable">
<div style="width:100%;height:100%;" class="itemBoxHstable">
<template v-if="item.showType==='text'||!item.showType">
<span
style="width:100%"
......@@ -26,7 +26,6 @@
:elInfo='item.elInfo'
:disabled='getDisabled||isEditable'
:formData='formParms'
v-on="$listeners"
v-bind="$attrs"
></hs-input>
</template>
......@@ -43,7 +42,7 @@
<template v-else-if="item.showType==='elDatePicker'">
<el-date-picker
ref='currentDom'
v-clickoutside="hidePicker"
v-click-outside="hidePicker"
clearable
:disabled='getDisabled||isEditable'
style="width:100%"
......@@ -60,8 +59,8 @@
<template v-else-if="item.showType==='elDatePickerDatetime'">
<el-date-picker
ref='currentDom'
v-clickoutside="hidePicker"
clearable
v-click-outside="hidePicker"
:disabled='getDisabled||isEditable'
style="width:100%"
size='mini'
......@@ -98,7 +97,6 @@
:elInfo='item.elInfo'
:disabled='getDisabled||isEditable'
:formData='formParms'
v-on="$listeners"
v-bind="$attrs"
>
</hs-computed>
......@@ -113,7 +111,6 @@
:elInfo='item.elInfo'
:formData='formParms'
:disabled='getDisabled||isEditable'
v-on="$listeners"
v-bind="$attrs"
>
</hs-select-plus>
......@@ -127,7 +124,6 @@
:disabled='getDisabled||isEditable'
:formData='formParms'
v-bind="$attrs"
v-on="$listeners"
></hs-input-number>
</template>
<template v-else-if="item.showType==='hsPopoverTextarea'">
......@@ -139,7 +135,6 @@
:disabled='getDisabled||isEditable'
:formData='formParms'
v-bind="$attrs"
v-on="$listeners"
></hs-popover-textarea>
</template>
<template v-else-if="item.showType==='hsLookup'">
......@@ -150,7 +145,6 @@
:elInfo='item.elInfo'
:disabled='getDisabled||isEditable'
:formData='formParms'
v-on="$listeners"
v-bind="$attrs"
>
</hs-lookup>
......@@ -163,7 +157,6 @@
:elInfo='item.elInfo'
:formData='formParms'
:disabled='getDisabled||isEditable'
v-on="$listeners"
v-bind="$attrs"
>
</hs-tags-select>
......@@ -176,7 +169,6 @@
:elInfo='item.elInfo'
:formData='formParms'
:disabled='getDisabled'
v-on="$listeners"
v-bind="$attrs"
>
</hs-tags-table>
......@@ -189,7 +181,6 @@
:elInfo='item.elInfo'
:formData='formParms'
:disabled='getDisabled||isEditable'
v-on="$listeners"
v-bind="$attrs"
>
</hs-tags-from>
......@@ -202,7 +193,6 @@
:disabled='getDisabled||isEditable'
:formData='formParms'
:prop='item.prop'
v-on="$listeners"
v-bind="$attrs"
>
</hs-select-list>
......@@ -215,7 +205,6 @@
:disabled='getDisabled||isEditable'
:formData='formParms'
:prop='item.prop'
v-on="$listeners"
v-bind="$attrs"
>
</hs-drag-list>
......@@ -228,19 +217,44 @@
:disabled='getDisabled||isEditable'
:formData='formParms'
:prop='item.prop'
v-on="$listeners"
v-bind="$attrs"
>
</hs-input-select>
</template>
<template v-else-if="item.showType==='hsTimePicker'">
<hs-time-picker
v-model="formParms[item.prop]"
:config='item.config'
:elInfo='item.elInfo'
:disabled='getDisabled||isEditable'
:formData='formParms'
:prop='item.prop'
v-bind="$attrs"
>
</hs-time-picker>
</template>
<template v-else-if="item.showType==='hsDatePicker'">
<hs-date-picker
v-model="formParms[item.prop]"
:config='item.config'
:elInfo='item.elInfo'
:disabled='getDisabled||isEditable'
:formData='formParms'
:prop='item.prop'
v-bind="$attrs"
>
</hs-date-picker>
</template>
</div>
</template>
<script>
import clickOutSide from '../../ucClass/click-out-side'
// import clickOutSide from '../../ucClass/click-out-side'
// import Clickoutside from 'element-ui/src/utils/clickoutside'
import Clickoutside from 'vue-click-outside'
export default {
directives: {
clickoutside: clickOutSide
ClickOutside: Clickoutside
},
name: 'dyncFormItemComponentChild_',
props: {
......@@ -294,7 +308,10 @@ export default {
},
methods: {
hidePicker() {
this.$refs.currentDom.hidePicker()
// console.log(this.item.showType)
// if (this.$refs.currentDom && this.$refs.currentDom.hidePicker) {
// this.$refs.currentDom.hidePicker()
// }
},
enterInput(val) {
this.$emit('enterInput', val)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<template>
<el-table
<u-table
:data="tableData"
border
style="width: 100%">
<template slot="empty">
没有查询到符合条件的记录
</template>
<u-table-column
show-overflow-tooltip
v-for="item in tableColumn" :key="item"
:prop="item"
:label="item">
</u-table-column>
</u-table>
<!-- <el-table
class="innerTable"
:data="tableData"
border
>
<el-table-column v-for="item in tableColumn" :key="item"
<el-table-column
v-for="item in tableColumn" :key="item"
:prop="item"
:label="item">
</el-table-column>
</el-table>
</el-table> -->
</template>
<script>
export default {
......@@ -52,6 +67,7 @@ export default {
</script>
<style scoped>
.innerTable{
margin: 5px;
border: 1px solid #ebeef5 !important
}
</style>
......@@ -37,12 +37,6 @@
<script>
export default {
props: {
showItem: {
type: Function
},
disabledItem: {
type: Function
},
row: {
type: Object,
default() {
......@@ -57,9 +51,6 @@ export default {
}
},
computed: {
filterData() {
return this.dealWithData()
},
columnsHorizontal() {
return this.dealWithColumns(false)
},
......@@ -71,15 +62,8 @@ export default {
}
},
methods: {
dealWithData() {
this.data.forEach(element => {
element.isShow = this.showItem(element, this.row)
element.isShow && (element.isDisabled = this.disabledItem(element, this.row))
})
return this.data.filter(element => element.isShow)
},
dealWithColumns(mark) {
return this.filterData.filter(item => mark ? item.isMore : !item.isMore)
return this.data.filter(item => mark ? item.isMore : !item.isMore)
},
itemClickHandle(item, row) {
this.$emit('itemClickHandle', item, this.row)
......
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