提交 70898bdd authored 作者: taojinlong's avatar taojinlong

Merge branch 'main' of github.com:dataease/dataease into main

......@@ -59,8 +59,13 @@ public class AuthUserServiceImpl implements AuthUserService {
@Cacheable(value = AuthConstants.USER_PERMISSION_CACHE_NAME, key = "'user' + #userId" )
@Override
public List<String> permissions(Long userId){
// 用户登录获取菜单权限时同时更新插件菜单表
dynamicMenuService.syncPluginMenu();
try {
// 用户登录获取菜单权限时同时更新插件菜单表
dynamicMenuService.syncPluginMenu();
}catch (Exception e){
LogUtil.error(e);
//ignore
}
List<String> permissions;
SysUser sysUser = sysUserMapper.selectByPrimaryKey(userId);
if(sysUser.getIsAdmin()!=null&&sysUser.getIsAdmin()){
......
......@@ -19,6 +19,7 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.ArrayList;
......@@ -69,6 +70,7 @@ public class PanelGroupService {
return result;
}
@Transactional
public PanelGroup saveOrUpdate(PanelGroupRequest request) {
String panelId = request.getId();
if (StringUtils.isEmpty(panelId)) {
......@@ -90,6 +92,7 @@ public class PanelGroupService {
newDefaultPanel.setPid(PanelConstants.PANEL_GATHER_DEFAULT_PANEL);
newDefaultPanel.setLevel(0);
newDefaultPanel.setSource(request.getId());
newDefaultPanel.setCreateBy(AuthUtils.getUser().getUsername());
checkPanelName(newDefaultPanel.getName(), newDefaultPanel.getPid(), PanelConstants.OPT_TYPE_INSERT, newDefaultPanel.getId());
panelGroupMapper.insertSelective(newDefaultPanel);
} else {
......@@ -105,6 +108,9 @@ public class PanelGroupService {
authRequest.setId(panelId);
authRequest.setUserId(String.valueOf(AuthUtils.getUser().getUserId()));
List<PanelGroupDTO> panelGroupDTOList = extPanelGroupMapper.panelGroupList(authRequest);
if(CollectionUtils.isNotEmpty(panelGroupDTOList)){
DataEaseException.throwException("未查询到用户对应的资源权限,请尝试刷新重新保存");
}
return panelGroupDTOList.get(0);
}
......
......@@ -195,6 +195,9 @@ module.exports = {
'object-curly-spacing': [2, 'always', {
objectsInObjects: false
}],
'array-bracket-spacing': [2, 'never']
'array-bracket-spacing': [2, 'never'],
"vue/no-use-v-if-with-v-for": ["error", {
"allowUsingIterationVar": true
}]
}
}
......@@ -20,14 +20,14 @@
@mouseleave="leave"
>
<div
v-for="(handle, index) in actualHandles"
:key="index"
:class="[classNameHandle, classNameHandle + '-' + handle]"
:style="handleStyle(handle, index)"
@mousedown.stop.prevent="handleDown(handle, $event)"
@touchstart.stop.prevent="handleTouchDown(handle, $event)"
v-for="(handlei, indexi) in actualHandles"
:key="indexi"
:class="[classNameHandle, classNameHandle + '-' + handlei]"
:style="handleStyle(handlei, indexi)"
@mousedown.stop.prevent="handleDown(handlei, $event)"
@touchstart.stop.prevent="handleTouchDown(handlei, $event)"
>
<slot :name="handle" />
<slot :name="handlei" />
</div>
<slot />
</div>
......@@ -282,14 +282,17 @@ export default {
type: String,
default: 'mouseOn'
},
// eslint-disable-next-line vue/require-default-prop
element: {
require: true,
type: Object
},
// eslint-disable-next-line vue/require-default-prop
defaultStyle: {
require: true,
type: Object
},
// eslint-disable-next-line vue/require-default-prop
index: {
require: true,
type: [Number, String]
......@@ -299,6 +302,7 @@ export default {
type: Boolean,
default: true
},
// eslint-disable-next-line vue/require-default-prop
changeStyle: {
require: true,
type: Object
......@@ -911,6 +915,7 @@ export default {
},
// 外部传参改动x
moveHorizontally(val) {
// eslint-disable-next-line no-unused-vars
const [deltaX, _] = snapToGrid(this.grid, val, this.top, this.scale)
const left = restrictToBounds(deltaX, this.bounds.minLeft, this.bounds.maxLeft)
this.left = left
......@@ -918,6 +923,7 @@ export default {
},
// 外部传参改动y
moveVertically(val) {
// eslint-disable-next-line no-unused-vars
const [_, deltaY] = snapToGrid(this.grid, this.left, val, this.scale)
const top = restrictToBounds(deltaY, this.bounds.minTop, this.bounds.maxTop)
this.top = top
......@@ -926,6 +932,7 @@ export default {
// 控制柄移动
handleResize(e) {
const handle = this.handle
// eslint-disable-next-line no-unused-vars
const scaleRatio = this.scaleRatio
const { TL, TR, BL, BR } = this
let { x: mouseX, y: mouseY } = this.getMouseCoordinate(e)
......@@ -1085,6 +1092,7 @@ export default {
changeWidth(val) {
// console.log('parentWidth', this.parentWidth)
// console.log('parentHeight', this.parentHeight)
// eslint-disable-next-line no-unused-vars
const [newWidth, _] = snapToGrid(this.grid, val, 0, this.scale)
// const right = restrictToBounds(this.parentWidth - newWidth - this.left, this.bounds.minRight, this.bounds.maxRight)
// private 将 this.bounds.minRight 设置为0
......@@ -1102,6 +1110,7 @@ export default {
this.height = height
},
changeHeight(val) {
// eslint-disable-next-line no-unused-vars
const [_, newHeight] = snapToGrid(this.grid, 0, val, this.scale)
// const bottom = restrictToBounds(this.parentHeight - newHeight - this.top, this.bounds.minBottom, this.bounds.maxBottom)
// private 将 this.bounds.minBottom 设置为0
......@@ -1418,6 +1427,7 @@ export default {
},
// 修复 正则获取left与top
formatTransformVal(string) {
// eslint-disable-next-line prefer-const
let [left, top, rotate = 0] = string.match(/[\d|\.]+/g)
if (top === undefined) top = 0
return [Number(left), Number(top), rotate]
......
......@@ -14,7 +14,9 @@ export default {
components: { DeComplexOperator },
// mixins: [mixins],
props: {
// eslint-disable-next-line vue/require-default-prop
field: String,
// eslint-disable-next-line vue/require-default-prop
label: String,
defaultOperator: {
type: String,
......
......@@ -30,8 +30,11 @@ export default {
event: 'change'
},
props: {
// eslint-disable-next-line vue/require-default-prop
label: String,
// eslint-disable-next-line vue/require-default-prop
operator: String,
// eslint-disable-next-line vue/require-default-prop
operators: Array
},
data() {
......
......@@ -14,13 +14,16 @@
export default {
props: {
start: {
type: Object
type: Object,
default: null
},
width: {
type: Number
type: Number,
default: null
},
height: {
type: Number
type: Number,
default: null
}
}
}
......
......@@ -27,6 +27,7 @@
export default {
props: {
// eslint-disable-next-line vue/require-default-prop
matrixStyle: {
type: Object
}
......
......@@ -25,6 +25,7 @@ export default {
type: Array,
default: () => []
},
// eslint-disable-next-line vue/require-default-prop
element: {
type: Object
}
......
......@@ -7,6 +7,7 @@
<script>
export default {
props: {
// eslint-disable-next-line vue/require-default-prop
propValue: {
type: String,
require: true
......
......@@ -7,6 +7,7 @@
<script>
export default {
props: {
// eslint-disable-next-line vue/require-default-prop
element: {
type: Object
}
......
......@@ -25,10 +25,12 @@ import { keycodes } from '@/components/canvas/utils/shortcutKey.js'
export default {
props: {
// eslint-disable-next-line vue/require-default-prop
propValue: {
type: String,
require: true
},
// eslint-disable-next-line vue/require-default-prop
element: {
type: Object
},
......@@ -68,17 +70,17 @@ export default {
},
handleKeydown(e) {
if (e.keyCode == this.ctrlKey) {
if (e.keyCode === this.ctrlKey) {
this.isCtrlDown = true
} else if (this.isCtrlDown && this.canEdit && keycodes.includes(e.keyCode)) {
e.stopPropagation()
} else if (e.keyCode == 46) { // deleteKey
} else if (e.keyCode === 46) { // deleteKey
e.stopPropagation()
}
},
handleKeyup(e) {
if (e.keyCode == this.ctrlKey) {
if (e.keyCode === this.ctrlKey) {
this.isCtrlDown = false
}
},
......
......@@ -38,6 +38,7 @@ import generateID from '@/utils/generateID'
import { listenGlobalKeyDown } from '@/utils/shortcutKey'
export default {
// eslint-disable-next-line vue/no-unused-components
components: { Editor, ComponentList, AttrList, AnimationList, EventList, Toolbar },
data() {
return {
......@@ -71,6 +72,7 @@ export default {
resetID(data) {
if (data) {
data.forEach(item => {
// eslint-disable-next-line no-undef
item.type !== 'custom' && (item.id = uuid.v1())
})
}
......@@ -85,7 +87,7 @@ export default {
let component
const id = e.dataTransfer.getData('componentId')
componentList.forEach(componentTemp => {
if (id == componentTemp.id) {
if (id === componentTemp.id) {
component = deepCopy(componentTemp)
}
})
......@@ -112,7 +114,7 @@ export default {
}
// 0 左击 1 滚轮 2 右击
if (e.button != 2) {
if (e.button !== 2) {
this.$store.commit('hideContextMenu')
}
}
......
......@@ -77,7 +77,7 @@ export default {
batchDeleteComponent({ componentData }, deleteData) {
deleteData.forEach(component => {
for (let i = 0, len = componentData.length; i < len; i++) {
if (component.id == componentData[i].id) {
if (component.id === componentData[i].id) {
componentData.splice(i, 1)
break
}
......
......@@ -56,9 +56,9 @@ let isCtrlDown = false
export function listenGlobalKeyDown() {
window.onkeydown = (e) => {
const { curComponent } = store.state
if (e.keyCode == ctrlKey) {
if (e.keyCode === ctrlKey) {
isCtrlDown = true
} else if (e.keyCode == deleteKey && curComponent) {
} else if (e.keyCode === deleteKey && curComponent) {
store.commit('deleteComponent')
store.commit('recordSnapshot')
} else if (isCtrlDown) {
......@@ -73,7 +73,7 @@ export function listenGlobalKeyDown() {
}
window.onkeyup = (e) => {
if (e.keyCode == ctrlKey) {
if (e.keyCode === ctrlKey) {
isCtrlDown = false
}
}
......@@ -109,7 +109,7 @@ function compose() {
function decompose() {
const curComponent = store.state.curComponent
if (curComponent && !curComponent.isLock && curComponent.component == 'Group') {
if (curComponent && !curComponent.isLock && curComponent.component === 'Group') {
store.commit('decompose')
store.commit('recordSnapshot')
}
......
......@@ -33,7 +33,7 @@ export function getStyle(style, filter = []) {
// 获取一个组件旋转 rotate 后的样式
export function getComponentRotatedStyle(style) {
style = { ...style }
if (style.rotate != 0) {
if (style.rotate !== 0) {
const newWidth = style.width * cos(style.rotate) + style.height * sin(style.rotate)
const diffX = (style.width - newWidth) / 2 // 旋转后范围变小是正值,变大是负值
style.left += diffX
......
......@@ -46,7 +46,7 @@ export default {
setCondition() {
const param = {
component: this.element,
value: [this.options.value],
value: !this.options.value ? [] : Array.isArray(this.options.value) ? this.options.value : [this.options.value],
operator: this.operator
}
this.inDraw && this.$store.commit('addViewFilter', param)
......
function checkDataPermission(el, binding, vnode) {
// eslint-disable-next-line no-unused-vars
const dataPermission = vnode.privileges
// eslint-disable-next-line no-unused-vars
const { value } = binding
// // 数据授权采用并集的方式 部门 角色 用户 有一个有权限即可
// if (value && value instanceof Array) {
......
......@@ -8,8 +8,7 @@ export default new Router({
{
path: '/',
name: 'home',
component: () =>
import('../views/link/index.vue'),
component: () => import('../views/link/index.vue'),
meta: {
title: '首页'
}
......
@mixin flex-row($justify: flex-start, $align: stretch) {
display: flex;
@if $justify != flex-start {
justify-content: $justify;
}
@if $align != stretch {
align-items: $align;
}
display: flex;
@if $justify != flex-start {
justify-content: $justify;
}
@mixin variant($color, $background-color, $border-color) {
color: $color;
background-color: $background-color;
border-color: $border-color;
@if $align != stretch {
align-items: $align;
}
\ No newline at end of file
}
@mixin variant($color, $background-color, $border-color) {
color: $color;
background-color: $background-color;
border-color: $border-color;
}
......@@ -73,34 +73,32 @@ div:focus {
}
.de-dialog {
width: 30% !important;
width: 30% !important;
.el-dialog__header{
background-color: #f4f4f5;
padding: 10px 20px !important;
}
.el-dialog__body{
padding: 1px 20px !important;
}
.el-dialog__header{
background-color: #f4f4f5;
padding: 10px 20px !important;
}
.el-dialog__body{
padding: 1px 20px !important;
}
}
.de-filter-dialog {
min-width: 500px !important;
width: 50% !important;
.el-dialog__header{
// background-color: #f4f4f5;
padding: 10px 20px !important;
min-width: 500px !important;
width: 50% !important;
.el-dialog__headerbtn {
top: 15px !important;
}
}
.el-dialog__body{
padding: 1px 15px !important;
.el-dialog__header{
// background-color: #f4f4f5;
padding: 10px 20px !important;
.el-dialog__headerbtn {
top: 15px !important;
}
}
.el-dialog__body{
padding: 1px 15px !important;
}
}
.de-style-dialog {
......@@ -117,7 +115,6 @@ div:focus {
}
.el-dialog__body{
padding: 1px 15px !important;
}
}
......@@ -129,7 +126,6 @@ div:focus {
.el-dialog__header{
display:none!important;
}
.el-dialog__body{
padding: 0px!important;
......@@ -138,79 +134,74 @@ div:focus {
}
.de-search-header {
.el-tabs__header{
display: none !important;;
}
.el-tabs__header{
display: none !important;;
}
}
.de-input{
margin-bottom: 14px;
margin-top: 10px;
.el-input{
.el-input__inner {
line-height: 30px !important;
height: 30px !important;
border-right: none;
}
}
.el-input__inner:focus{
border-color: #E6E6E6 !important;
}
.el-input-group__append {
background-color: #ffffff;
margin-bottom: 14px;
margin-top: 10px;
.el-input{
.el-input__inner {
line-height: 30px !important;
height: 30px !important;
border-right: none;
}
}
.el-input__inner:focus{
border-color: #E6E6E6 !important;
}
.el-input-group__append {
background-color: #ffffff;
}
}
.filter-card-class {
width: 100%;
.el-card__header {
padding: 5px 0 !important;
border-bottom: none !important;
}
width: 100%;
.el-card__header {
padding: 5px 0 !important;
border-bottom: none !important;
}
.el-card__body {
padding: 10px;
}
.el-card__body {
padding: 10px;
}
}
.real-input {
.el-input__inner {
height: 25px !important;
border: none !important;
}
.el-input__inner {
height: 25px !important;
border: none !important;
}
}
.de-filter-data-table {
.el-table__body-wrapper >table>{
tbody {
.el-table__row {
:hover {
cursor: pointer;
}
td {
border: none !important;
}
}
.el-table__body-wrapper >table>{
tbody {
.el-table__row {
:hover {
cursor: pointer;
}
td {
border: none !important;
}
}
}
}
}
.de-filter-data-table::before {
height: 0px !important;
height: 0px !important;
}
.custom-component-class {
width: 100%;
div.el-input-group__append {
width: 10% !important;
}
div {
width: 100% !important;
}
width: 100%;
div.el-input-group__append {
width: 10% !important;
}
div {
width: 100% !important;
}
}
%field-icon{
......
......@@ -38,8 +38,8 @@
}
@mixin variant($color, $background-color, $border-color) {
color: $color;
background-color: $background-color;
border-color: $border-color;
}
color: $color;
background-color: $background-color;
border-color: $border-color;
}
......@@ -15,7 +15,7 @@
transition: width 0.28s;
// width: $sideBarWidth !important;
background-color: $menuBg;
// width: 260px;
// width: 260px;
height: $contentHeight;
position: fixed;
font-size: 0px;
......
.top-nav {
// margin-left: $sideBarWidth;
width: 100%;
// background-color: #304156;
// background-color: $--color-primary;
position: fixed;
top: 0;
left: 0;
z-index: 1001;
overflow: hidden;
border-bottom: 1px solid #DCDFE6;
// margin-left: $sideBarWidth;
width: 100%;
// background-color: #304156;
// background-color: $--color-primary;
position: fixed;
top: 0;
left: 0;
z-index: 1001;
overflow: hidden;
border-bottom: 1px solid #DCDFE6;
.log {
padding: 0 16px;
line-height: 56px;
height: 56px;
font-size: 24px;
font-weight: bold;
// color: rgb(191, 203, 217);
color: rgba(255,255,255,0.87);
float: left;
img{
width: auto;
max-height: 45px;
}
.log {
padding: 0 16px;
line-height: 56px;
height: 56px;
font-size: 24px;
font-weight: bold;
// color: rgb(191, 203, 217);
color: rgba(255,255,255,0.87);
float: left;
img{
width: auto;
max-height: 45px;
}
.el-menu {
float: left;
border: none!important;
// background-color: #304156;
}
.el-menu {
float: left;
border: none!important;
// background-color: #304156;
// background-color: $--color-primary;
.nav-item {
display: inline-block;
.el-menu-item:not(.is-active) {
// color: rgb(191, 203, 217);
color: $menuText;
&:hover {
background-color: $menuHover !important;
// color: $subMenuActiveText !important;
}
&:focus {
background-color: $subMenuHover !important;
color: $subMenuActiveText !important;
}
.nav-item {
display: inline-block;
.el-menu-item:not(.is-active) {
// color: rgb(191, 203, 217);
color: $menuText;
&:hover {
background-color: $menuHover !important;
// color: $subMenuActiveText !important;
}
.is-active {
background-color: $subMenuHover !important;
color: $subMenuActiveText !important;
&:focus {
background-color: $subMenuHover !important;
color: $subMenuActiveText !important;
}
}
.is-active {
background-color: $subMenuHover !important;
color: $subMenuActiveText !important;
}
}
}
.right-menu {
float: right;
height: 56px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
.right-menu {
float: right;
height: 56px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
&:focus {
outline: none;
}
&:focus {
outline: none;
}
.right-menu-item {
display: inline-block;
padding: 10px 8px;
height: 100%;
font-size: 18px;
// color: #5a5e66;
color: #606266;
vertical-align: text-bottom;
.right-menu-item {
display: inline-block;
padding: 10px 8px;
height: 100%;
font-size: 18px;
// color: #5a5e66;
color: #606266;
vertical-align: text-bottom;
&.hover-effect {
cursor: pointer;
transition: background .3s;
&.hover-effect {
cursor: pointer;
transition: background .3s;
&:hover {
background-color: rgba(0, 0, 0, .025)
}
&:hover {
background-color: rgba(0, 0, 0, .025)
}
}
}
.avatar-container {
margin-right: 30px;
.avatar-wrapper {
margin-top: 5px;
position: relative;
.user-avatar {
cursor: pointer;
width: 40px;
height: 40px;
border-radius: 10px;
}
.de-user-avatar {
cursor: pointer;
height: 40px;
border-radius: 10px;
span {
color: #ffffff;
}
.avatar-container {
margin-right: 30px;
.avatar-wrapper {
margin-top: 5px;
position: relative;
.user-avatar {
cursor: pointer;
width: 40px;
height: 40px;
border-radius: 10px;
}
.de-user-avatar {
cursor: pointer;
height: 40px;
border-radius: 10px;
span {
color: #ffffff;
}
}
.el-icon-caret-bottom {
cursor: pointer;
position: absolute;
right: -20px;
top: 25px;
font-size: 12px;
}
.el-icon-caret-bottom {
cursor: pointer;
position: absolute;
right: -20px;
top: 25px;
font-size: 12px;
}
}
}
}
}
......@@ -213,6 +213,7 @@ export function formatCondition(param) {
return null
}
const result = { conditions: [] }
// eslint-disable-next-line no-unused-vars
for (const [key, value] of Object.entries(param)) {
result.conditions.push(value)
}
......
......@@ -58,7 +58,7 @@ export function stackLineOption(chart_option, chart) {
baseLineOption(chart_option, chart)
// ext
chart_option.tooltip.trigger = 'axis'
// chart_option.tooltip.trigger = 'axis'
chart_option.series.forEach(function(s) {
s.stack = 'stack'
})
......
......@@ -9,6 +9,7 @@ export function hexColorToRGBA(hex, alpha) {
}
if (/^#[0-9A-F]{6}$/i.test(hex)) { // 判断传入是否为#六位十六进制数
hex.replace(/[0-9A-F]{2}/ig, function(kw) {
// eslint-disable-next-line no-eval
rgb.push(eval('0x' + kw)) // 十六进制转化为十进制并存如数组
})
return `rgba(${rgb.join(',')},${alpha / 100})` // 输出RGB格式颜色
......
......@@ -17,6 +17,7 @@
</template>
<script>
// eslint-disable-next-line no-unused-vars
import { DEFAULT_PANEL_STYLE } from '@/views/panel/panel'
import { mapState } from 'vuex'
import { deepCopy } from '@/components/canvas/utils/utils'
......
// eslint-disable-next-line no-unused-vars
import { BASE_CHART, BASE_CHART_STRING } from '@/views/chart/chart/chart'
import { deepCopy } from '@/components/canvas/utils/utils'
......@@ -48,6 +50,7 @@ export function chartTransStr2Object(targetIn, copy) {
}
export function chartTransObject2Str(targetIn, deepCopy) {
// eslint-disable-next-line no-undef
const target = copy === 'Y' ? deepCopy(targetIn) : targetIn
if (target.chart) {
if (target.chart.xaxis && typeof target.chart.xaxis !== 'string') {
......
......@@ -11,6 +11,7 @@
</template>
<script>
// eslint-disable-next-line no-unused-vars
import { get, post } from '@/api/panel/panel'
export default {
name: 'TemplateItem',
......
......@@ -52,6 +52,7 @@ import LazyTree from './components/LazyTree'
export default {
name: 'Authority',
// eslint-disable-next-line vue/no-unused-components
components: { LazyTree, DeMainContainer, DeAsideContainer, DeContainer },
props: {
resourceId: {
......
......@@ -20,6 +20,7 @@ import AuthQuickConfig from './authQuickConfig'
export default {
name: 'Authority',
// eslint-disable-next-line vue/no-unused-components
components: { DeContainer, DeMainContainer, AuthConfig, AuthQuickConfig },
data() {
return {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论