Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Unverified
Commit
df5e2f48
authored
Mar 04, 2023
by
芋道源码
Committed by
Gitee
Mar 04, 2023
Browse files
Options
Browse Files
Download
Plain Diff
!13 解决同事所提pr i12冲突问题
Merge pull request !13 from 周建/master
parents
2f98d5c7
853dab7f
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
189 additions
and
49 deletions
+189
-49
src/components/XTable/src/XTable.vue
+27
-4
src/views/bpm/form/formEditor.vue
+44
-2
src/views/bpm/group/group.data.ts
+1
-0
src/views/bpm/oa/leave/leave.data.ts
+1
-0
src/views/bpm/task/todo/todo.data.ts
+1
-0
src/views/system/role/index.vue
+49
-39
src/views/system/tenant/tenant.data.ts
+18
-0
src/views/system/tenantPackage/index.vue
+19
-2
src/views/system/tenantPackage/tenantPackage.data.ts
+6
-1
src/views/system/user/index.vue
+23
-1
No files found.
src/components/XTable/src/XTable.vue
View file @
df5e2f48
...
@@ -12,7 +12,7 @@ import { useAppStore } from '@/store/modules/app'
...
@@ -12,7 +12,7 @@ import { useAppStore } from '@/store/modules/app'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
import
{
XTableProps
}
from
'./type'
import
{
XTableProps
}
from
'./type'
import
{
isBoolean
,
isFunction
}
from
'@/utils/is'
import
{
isBoolean
,
isFunction
}
from
'@/utils/is'
import
styleCss
from
'./style/dark.scss'
import
download
from
'@/utils/download'
import
download
from
'@/utils/download'
const
{
t
}
=
useI18n
()
const
{
t
}
=
useI18n
()
...
@@ -25,15 +25,38 @@ const prefixCls = getPrefixCls('x-vxe-table')
...
@@ -25,15 +25,38 @@ const prefixCls = getPrefixCls('x-vxe-table')
const
attrs
=
useAttrs
()
const
attrs
=
useAttrs
()
const
emit
=
defineEmits
([
'register'
])
const
emit
=
defineEmits
([
'register'
])
const
removeStyles
=
()
=>
{
var
filename
=
'cssTheme'
//移除引入的文件名
var
targetelement
=
'style'
var
targetattr
=
'id'
var
allsuspects
=
document
.
getElementsByTagName
(
targetelement
)
for
(
var
i
=
allsuspects
.
length
;
i
>=
0
;
i
--
)
{
if
(
allsuspects
[
i
]
&&
allsuspects
[
i
].
getAttribute
(
targetattr
)
!=
null
&&
allsuspects
[
i
].
getAttribute
(
targetattr
)?.
indexOf
(
filename
)
!=
-
1
)
{
console
.
log
(
allsuspects
[
i
],
'node'
)
allsuspects
[
i
].
parentNode
?.
removeChild
(
allsuspects
[
i
])
}
}
}
const
reImport
=
()
=>
{
var
head
=
document
.
getElementsByTagName
(
'head'
)[
0
]
var
style
=
document
.
createElement
(
'style'
)
style
.
innerText
=
styleCss
style
.
id
=
'cssTheme'
head
.
appendChild
(
style
)
}
watch
(
watch
(
()
=>
appStore
.
getIsDark
,
()
=>
appStore
.
getIsDark
,
()
=>
{
()
=>
{
if
(
appStore
.
getIsDark
==
true
)
{
if
(
appStore
.
getIsDark
==
true
)
{
import
(
'./style/dark.scss'
)
reImport
(
)
}
}
if
(
appStore
.
getIsDark
==
false
)
{
if
(
appStore
.
getIsDark
==
false
)
{
import
(
'./style/light.scss'
)
removeStyles
(
)
}
}
},
},
{
immediate
:
true
}
{
immediate
:
true
}
...
...
src/views/bpm/form/formEditor.vue
View file @
df5e2f48
...
@@ -3,9 +3,21 @@
...
@@ -3,9 +3,21 @@
<!-- 表单设计器 -->
<!-- 表单设计器 -->
<fc-designer
ref=
"designer"
height=
"780px"
>
<fc-designer
ref=
"designer"
height=
"780px"
>
<template
#
handle
>
<template
#
handle
>
<XButton
type=
"primary"
title=
"生成JSON"
@
click=
"showJson"
/>
<XButton
type=
"primary"
title=
"生成Options"
@
click=
"showOption"
/>
<XButton
type=
"primary"
:title=
"t('action.save')"
@
click=
"handleSave"
/>
<XButton
type=
"primary"
:title=
"t('action.save')"
@
click=
"handleSave"
/>
</
template
>
</
template
>
</fc-designer>
</fc-designer>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisible1"
maxHeight=
"600"
>
<div
ref=
"editor"
v-if=
"dialogVisible1"
>
<XTextButton
style=
"float: right"
:title=
"t('common.copy')"
@
click=
"copy(formValue)"
/>
<el-scrollbar
height=
"580"
>
<pre>
{{ formValue }}
</pre>
</el-scrollbar>
</div>
</Dialog>
<!-- 表单保存的弹窗 -->
<!-- 表单保存的弹窗 -->
<XModal
v-model=
"dialogVisible"
title=
"保存表单"
>
<XModal
v-model=
"dialogVisible"
title=
"保存表单"
>
<el-form
ref=
"formRef"
:model=
"formValues"
:rules=
"formRules"
label-width=
"80px"
>
<el-form
ref=
"formRef"
:model=
"formValues"
:rules=
"formRules"
label-width=
"80px"
>
...
@@ -48,13 +60,18 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
...
@@ -48,13 +60,18 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
*
as
FormApi
from
'@/api/bpm/form'
import
*
as
FormApi
from
'@/api/bpm/form'
import
{
encodeConf
,
encodeFields
,
setConfAndFields
}
from
'@/utils/formCreate'
import
{
encodeConf
,
encodeFields
,
setConfAndFields
}
from
'@/utils/formCreate'
import
{
useClipboard
}
from
'@vueuse/core'
const
{
t
}
=
useI18n
()
// 国际化
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息
const
message
=
useMessage
()
// 消息
const
{
query
}
=
useRoute
()
// 路由
const
{
query
}
=
useRoute
()
// 路由
const
designer
=
ref
()
// 表单设计器
const
designer
=
ref
()
// 表单设计器
const
type
=
ref
(
-
1
)
const
formValue
=
ref
(
''
)
const
dialogTitle
=
ref
(
''
)
const
dialogVisible
=
ref
(
false
)
// 弹窗是否展示
const
dialogVisible
=
ref
(
false
)
// 弹窗是否展示
const
dialogVisible1
=
ref
(
false
)
// 弹窗是否展示
const
dialogLoading
=
ref
(
false
)
// 弹窗的加载中
const
dialogLoading
=
ref
(
false
)
// 弹窗的加载中
const
formRef
=
ref
<
FormInstance
>
()
const
formRef
=
ref
<
FormInstance
>
()
const
formRules
=
reactive
({
const
formRules
=
reactive
({
...
@@ -98,7 +115,32 @@ const submitForm = async () => {
...
@@ -98,7 +115,32 @@ const submitForm = async () => {
dialogLoading
.
value
=
false
dialogLoading
.
value
=
false
}
}
}
}
const
showJson
=
()
=>
{
openModel
(
'生成JSON'
)
type
.
value
=
0
formValue
.
value
=
designer
.
value
.
getRule
()
}
const
showOption
=
()
=>
{
openModel
(
'生成Options'
)
type
.
value
=
1
formValue
.
value
=
designer
.
value
.
getOption
()
}
const
openModel
=
(
title
:
string
)
=>
{
dialogVisible1
.
value
=
true
dialogTitle
.
value
=
title
}
/** 复制 **/
const
copy
=
async
(
text
:
string
)
=>
{
const
{
copy
,
copied
,
isSupported
}
=
useClipboard
({
source
:
text
})
if
(
!
isSupported
)
{
message
.
error
(
t
(
'common.copyError'
))
}
else
{
await
copy
()
if
(
unref
(
copied
))
{
message
.
success
(
t
(
'common.copySuccess'
))
}
}
}
// ========== 初始化 ==========
// ========== 初始化 ==========
onMounted
(()
=>
{
onMounted
(()
=>
{
// 场景一:新增表单
// 场景一:新增表单
...
...
src/views/bpm/group/group.data.ts
View file @
df5e2f48
...
@@ -16,6 +16,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
...
@@ -16,6 +16,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
primaryType
:
'id'
,
primaryType
:
'id'
,
primaryTitle
:
'编号'
,
primaryTitle
:
'编号'
,
action
:
true
,
action
:
true
,
searchSpan
:
8
,
columns
:
[
columns
:
[
{
{
title
:
'组名'
,
title
:
'组名'
,
...
...
src/views/bpm/oa/leave/leave.data.ts
View file @
df5e2f48
...
@@ -16,6 +16,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
...
@@ -16,6 +16,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
primaryTitle
:
'申请编号'
,
primaryTitle
:
'申请编号'
,
action
:
true
,
action
:
true
,
actionWidth
:
'260'
,
actionWidth
:
'260'
,
searchSpan
:
8
,
columns
:
[
columns
:
[
{
{
title
:
t
(
'common.status'
),
title
:
t
(
'common.status'
),
...
...
src/views/bpm/task/todo/todo.data.ts
View file @
df5e2f48
...
@@ -7,6 +7,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
...
@@ -7,6 +7,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
primaryKey
:
'id'
,
primaryKey
:
'id'
,
primaryType
:
null
,
primaryType
:
null
,
action
:
true
,
action
:
true
,
searchSpan
:
8
,
columns
:
[
columns
:
[
{
{
title
:
'任务编号'
,
title
:
'任务编号'
,
...
...
src/views/system/role/index.vue
View file @
df5e2f48
...
@@ -99,36 +99,41 @@
...
@@ -99,36 +99,41 @@
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<!-- 分配角色的菜单权限对话框 -->
<!-- 分配角色的菜单权限对话框 -->
<el-form-item
<el-row>
label=
"权限范围"
<el-col
:span=
"24"
>
v-if=
"
<el-form-item
actionScopeType === 'menu' || dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM
label=
"权限范围"
"
v-if=
"
>
actionScopeType === 'menu' ||
<el-card
shadow=
"never"
>
dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM
<
template
#
header
>
"
父子联动(选中父节点,自动选择子节点):
style=
"display: flex"
<el-switch
v-model=
"checkStrictly"
inline-prompt
active-text=
"是"
inactive-text=
"否"
/>
>
全选/全不选:
<el-card
class=
"card"
shadow=
"never"
>
<el-switch
<
template
#
header
>
v-model=
"treeNodeAll"
<!--父子联动(选中父节点,自动选择子节点):-->
inline-prompt
<!--
<el-switch
v-model=
"checkStrictly"
inline-prompt
active-text=
"是"
inactive-text=
"否"
/>
-->
active-text=
"是"
<!--全选/全不选:-->
inactive-text=
"否"
<!--
<el-switch-->
@
change=
"handleCheckedTreeNodeAll()"
<!-- v-model="treeNodeAll"-->
/>
<!-- inline-prompt-->
</
template
>
<!-- active-text="是"-->
<el-tree
<!-- inactive-text="否"-->
ref=
"treeRef"
<!-- @change="handleCheckedTreeNodeAll()"-->
node-key=
"id"
<!--/>-->
show-checkbox
</
template
>
:check-strictly=
"!checkStrictly"
<el-tree
:props=
"defaultProps"
ref=
"treeRef"
:data=
"treeOptions"
node-key=
"id"
empty-text=
"加载中,请稍后"
show-checkbox
/>
:check-strictly=
"!checkStrictly"
</el-card>
:props=
"defaultProps"
</el-form-item>
:data=
"treeOptions"
empty-text=
"加载中,请稍后"
/>
</el-card>
</el-form-item>
</el-col
></el-row>
</el-form>
</el-form>
<!-- 操作按钮 -->
<!-- 操作按钮 -->
<
template
#
footer
>
<
template
#
footer
>
...
@@ -245,18 +250,17 @@ const dialogScopeTitle = ref('数据权限')
...
@@ -245,18 +250,17 @@ const dialogScopeTitle = ref('数据权限')
const
actionScopeType
=
ref
(
''
)
const
actionScopeType
=
ref
(
''
)
const
dataScopeDictDatas
=
ref
()
const
dataScopeDictDatas
=
ref
()
// 选项
// 选项
const
checkStrictly
=
ref
(
tru
e
)
const
checkStrictly
=
ref
(
fals
e
)
const
treeNodeAll
=
ref
(
false
)
//
const treeNodeAll = ref(false)
// 全选/全不选
// 全选/全不选
const
handleCheckedTreeNodeAll
=
()
=>
{
//
const handleCheckedTreeNodeAll = () => {
treeRef
.
value
!
.
setCheckedNodes
(
treeNodeAll
.
value
?
treeOptions
.
value
:
[])
//
treeRef.value!.setCheckedNodes(treeNodeAll.value ? treeOptions.value : [])
}
//
}
// 权限操作
// 权限操作
const
handleScope
=
async
(
type
:
string
,
row
:
RoleApi
.
RoleVO
)
=>
{
const
handleScope
=
async
(
type
:
string
,
row
:
RoleApi
.
RoleVO
)
=>
{
dataScopeForm
.
id
=
row
.
id
dataScopeForm
.
id
=
row
.
id
dataScopeForm
.
name
=
row
.
name
dataScopeForm
.
name
=
row
.
name
dataScopeForm
.
code
=
row
.
code
dataScopeForm
.
code
=
row
.
code
actionScopeType
.
value
=
type
actionScopeType
.
value
=
type
dialogScopeVisible
.
value
=
true
dialogScopeVisible
.
value
=
true
if
(
type
===
'menu'
)
{
if
(
type
===
'menu'
)
{
...
@@ -265,7 +269,7 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) => {
...
@@ -265,7 +269,7 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) => {
const
role
=
await
PermissionApi
.
listRoleMenusApi
(
row
.
id
)
const
role
=
await
PermissionApi
.
listRoleMenusApi
(
row
.
id
)
if
(
role
)
{
if
(
role
)
{
role
?.
forEach
((
item
:
any
)
=>
{
role
?.
forEach
((
item
:
any
)
=>
{
unref
(
treeRef
)?.
setChecked
(
item
,
true
,
false
);
unref
(
treeRef
)?.
setChecked
(
item
,
true
,
false
)
})
})
}
}
}
else
if
(
type
===
'data'
)
{
}
else
if
(
type
===
'data'
)
{
...
@@ -275,11 +279,10 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) => {
...
@@ -275,11 +279,10 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) => {
dataScopeForm
.
dataScope
=
role
.
dataScope
dataScopeForm
.
dataScope
=
role
.
dataScope
if
(
role
.
dataScopeDeptIds
)
{
if
(
role
.
dataScopeDeptIds
)
{
role
.
dataScopeDeptIds
?.
forEach
((
item
:
any
)
=>
{
role
.
dataScopeDeptIds
?.
forEach
((
item
:
any
)
=>
{
unref
(
treeRef
)?.
setChecked
(
item
,
true
,
false
);
unref
(
treeRef
)?.
setChecked
(
item
,
true
,
false
)
})
})
}
}
}
}
}
}
// 保存权限
// 保存权限
const
submitScope
=
async
()
=>
{
const
submitScope
=
async
()
=>
{
...
@@ -314,3 +317,10 @@ onMounted(() => {
...
@@ -314,3 +317,10 @@ onMounted(() => {
init
()
init
()
})
})
</
script
>
</
script
>
<
style
scoped
>
.card
{
width
:
100%
;
max-height
:
400px
;
overflow-y
:
scroll
;
}
</
style
>
src/views/system/tenant/tenant.data.ts
View file @
df5e2f48
...
@@ -27,6 +27,24 @@ export const rules = reactive({
...
@@ -27,6 +27,24 @@ export const rules = reactive({
contactMobile
:
[
required
],
contactMobile
:
[
required
],
accountCount
:
[
required
],
accountCount
:
[
required
],
expireTime
:
[
required
],
expireTime
:
[
required
],
username
:
[
required
,
{
min
:
4
,
max
:
30
,
trigger
:
'blur'
,
message
:
'用户名称长度为 4-30 个字符'
}
],
password
:
[
required
,
{
min
:
4
,
max
:
16
,
trigger
:
'blur'
,
message
:
'密码长度为 4-16 位'
}
],
domain
:
[
required
],
domain
:
[
required
],
status
:
[
required
]
status
:
[
required
]
})
})
...
...
src/views/system/tenantPackage/index.vue
View file @
df5e2f48
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
ref=
"formRef"
ref=
"formRef"
>
>
<
template
#
menuIds
>
<
template
#
menuIds
>
<el-card
class=
"w-120"
>
<el-card>
<template
#
header
>
<template
#
header
>
<div
class=
"card-header"
>
<div
class=
"card-header"
>
全选/全不选:
全选/全不选:
...
@@ -91,6 +91,16 @@ const dialogTitle = ref('edit') // 弹出层标题
...
@@ -91,6 +91,16 @@ const dialogTitle = ref('edit') // 弹出层标题
const
handleCheckedTreeNodeAll
=
()
=>
{
const
handleCheckedTreeNodeAll
=
()
=>
{
treeRef
.
value
!
.
setCheckedNodes
(
treeNodeAll
.
value
?
menuOptions
.
value
:
[])
treeRef
.
value
!
.
setCheckedNodes
(
treeNodeAll
.
value
?
menuOptions
.
value
:
[])
}
}
const
validateCategory
=
(
rule
:
any
,
value
:
any
,
callback
:
any
)
=>
{
if
(
!
treeRef
.
value
!
.
getCheckedKeys
().
length
)
{
callback
(
new
Error
(
'该项为必填项'
))
}
else
{
callback
()
}
}
rules
.
menuIds
=
[{
required
:
true
,
validator
:
validateCategory
,
trigger
:
'blur'
}]
const
getTree
=
async
()
=>
{
const
getTree
=
async
()
=>
{
const
res
=
await
listSimpleMenusApi
()
const
res
=
await
listSimpleMenusApi
()
menuOptions
.
value
=
handleTree
(
res
)
menuOptions
.
value
=
handleTree
(
res
)
...
@@ -126,7 +136,7 @@ const handleUpdate = async (rowId: number) => {
...
@@ -126,7 +136,7 @@ const handleUpdate = async (rowId: number) => {
unref
(
formRef
)?.
setValues
(
res
)
unref
(
formRef
)?.
setValues
(
res
)
// 设置选中
// 设置选中
res
.
menuIds
?.
forEach
((
item
:
any
)
=>
{
res
.
menuIds
?.
forEach
((
item
:
any
)
=>
{
unref
(
treeRef
)?.
setChecked
(
item
,
true
,
false
);
unref
(
treeRef
)?.
setChecked
(
item
,
true
,
false
)
})
})
}
}
...
@@ -168,3 +178,10 @@ onMounted(async () => {
...
@@ -168,3 +178,10 @@ onMounted(async () => {
})
})
// getList()
// getList()
</
script
>
</
script
>
<
style
scoped
>
.el-card
{
width
:
100%
;
max-height
:
400px
;
overflow-y
:
scroll
;
}
</
style
>
src/views/system/tenantPackage/tenantPackage.data.ts
View file @
df5e2f48
...
@@ -33,7 +33,12 @@ const crudSchemas = reactive<VxeCrudSchema>({
...
@@ -33,7 +33,12 @@ const crudSchemas = reactive<VxeCrudSchema>({
{
{
title
:
'菜单权限'
,
title
:
'菜单权限'
,
field
:
'menuIds'
,
field
:
'menuIds'
,
isTable
:
false
isTable
:
false
,
form
:
{
colProps
:
{
span
:
24
}
}
},
},
{
{
title
:
t
(
'form.remark'
),
title
:
t
(
'form.remark'
),
...
...
src/views/system/user/index.vue
View file @
df5e2f48
...
@@ -159,7 +159,7 @@
...
@@ -159,7 +159,7 @@
:data=
"detailData"
:data=
"detailData"
>
>
<
template
#
deptId=
"{ row }"
>
<
template
#
deptId=
"{ row }"
>
<
span>
{{
row
.
dept
?.
name
}}
</span
>
<
el-tag>
{{
dataFormater
(
row
.
deptId
)
}}
</el-tag
>
</
template
>
</
template
>
<
template
#
postIds=
"{ row }"
>
<
template
#
postIds=
"{ row }"
>
<template
v-if=
"row.postIds !== ''"
>
<template
v-if=
"row.postIds !== ''"
>
...
@@ -332,6 +332,28 @@ const getPostOptions = async () => {
...
@@ -332,6 +332,28 @@ const getPostOptions = async () => {
const
res
=
await
listSimplePostsApi
()
const
res
=
await
listSimplePostsApi
()
postOptions
.
value
.
push
(...
res
)
postOptions
.
value
.
push
(...
res
)
}
}
const
dataFormater
=
(
val
)
=>
{
return
deptFormater
(
deptOptions
.
value
,
val
)
}
//部门回显
const
deptFormater
=
(
ary
,
val
:
any
)
=>
{
var
o
=
''
if
(
ary
&&
val
)
{
for
(
const
v
of
ary
)
{
if
(
v
.
id
==
val
)
{
o
=
v
.
name
if
(
o
)
return
o
}
else
if
(
v
.
children
?.
length
)
{
o
=
deptFormater
(
v
.
children
,
val
)
if
(
o
)
return
o
}
}
return
o
}
else
{
return
val
}
}
// 设置标题
// 设置标题
const
setDialogTile
=
async
(
type
:
string
)
=>
{
const
setDialogTile
=
async
(
type
:
string
)
=>
{
dialogTitle
.
value
=
t
(
'action.'
+
type
)
dialogTitle
.
value
=
t
(
'action.'
+
type
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment