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
Commit
ca4bdb46
authored
Mar 25, 2023
by
咱哥丶
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
重构VUE3【站内信消息记录】:1、表格增加自适应高度(简单实现)2、我的站内信每条记录分为查阅(未读状态)和详情(已读状态)
parent
202031d4
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
533 additions
and
240 deletions
+533
-240
src/views/system/notify/message/detail.vue
+64
-0
src/views/system/notify/message/index.vue
+200
-50
src/views/system/notify/message/message.data.ts
+0
-101
src/views/system/notify/my/detail.vue
+46
-0
src/views/system/notify/my/index.vue
+223
-31
src/views/system/notify/my/my.data.ts
+0
-58
No files found.
src/views/system/notify/message/detail.vue
0 → 100644
View file @
ca4bdb46
<
template
>
<Dialog
title=
"详情"
v-model=
"modelVisible"
:scroll=
"true"
:max-height=
"500"
width=
"800"
>
<el-descriptions
border
:column=
"1"
>
<el-descriptions-item
label=
"编号"
min-width=
"120"
>
{{
detailData
.
id
}}
</el-descriptions-item>
<el-descriptions-item
label=
"用户类型"
>
<dict-tag
:type=
"DICT_TYPE.USER_TYPE"
:value=
"detailData.userType"
/>
</el-descriptions-item>
<el-descriptions-item
label=
"用户编号"
>
{{
detailData
.
userId
}}
</el-descriptions-item>
<el-descriptions-item
label=
"模版编号"
>
{{
detailData
.
templateId
}}
</el-descriptions-item>
<el-descriptions-item
label=
"模板编码"
>
{{
detailData
.
templateCode
}}
</el-descriptions-item>
<el-descriptions-item
label=
"发送人名称"
>
{{
detailData
.
templateNickname
}}
</el-descriptions-item>
<el-descriptions-item
label=
"模版内容"
>
{{
detailData
.
templateContent
}}
</el-descriptions-item>
<el-descriptions-item
label=
"模版参数"
>
{{
detailData
.
templateParams
}}
</el-descriptions-item>
<el-descriptions-item
label=
"模版类型"
>
<dict-tag
:type=
"DICT_TYPE.SYSTEM_NOTIFY_TEMPLATE_TYPE"
:value=
"detailData.templateType"
/>
</el-descriptions-item>
<el-descriptions-item
label=
"是否已读"
>
<dict-tag
:type=
"DICT_TYPE.INFRA_BOOLEAN_STRING"
:value=
"detailData.readStatus"
/>
</el-descriptions-item>
<el-descriptions-item
label=
"阅读时间"
>
{{
formatDate
(
detailData
.
readTime
,
'YYYY-MM-DD HH:mm:ss'
)
}}
</el-descriptions-item>
<el-descriptions-item
label=
"创建时间"
>
{{
formatDate
(
detailData
.
createTime
,
'YYYY-MM-DD HH:mm:ss'
)
}}
</el-descriptions-item>
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
NotifyMessageApi
from
'@/api/system/notify/message'
const
modelVisible
=
ref
(
false
)
// 弹窗的是否展示
const
detailLoading
=
ref
(
false
)
// 表单的加载中
const
detailData
=
ref
()
// 详情数据
/** 打开弹窗 */
const
openModal
=
async
(
data
:
NotifyMessageApi
.
NotifyMessageVO
)
=>
{
modelVisible
.
value
=
true
// 设置数据
detailLoading
.
value
=
true
try
{
detailData
.
value
=
data
}
finally
{
detailLoading
.
value
=
false
}
}
defineExpose
({
openModal
})
// 提供 openModal 方法,用于打开弹窗
</
script
>
src/views/system/notify/message/index.vue
View file @
ca4bdb46
<
template
>
<ContentWrap>
<content-wrap>
<!-- 搜索工作栏 -->
<el-form
class=
"-mb-15px"
:model=
"queryParams"
ref=
"queryFormRef"
:inline=
"true"
label-width=
"68px"
>
<el-form-item
label=
"用户编号"
prop=
"userId"
>
<el-input
v-model=
"queryParams.userId"
placeholder=
"请输入用户编号"
clearable
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item
label=
"用户类型"
prop=
"userType"
>
<el-select
v-model=
"queryParams.userType"
placeholder=
"请选择用户类型"
clearable
class=
"!w-240px"
>
<el-option
v-for=
"dict in getDictOptions(DICT_TYPE.USER_TYPE)"
:key=
"parseInt(dict.value)"
:label=
"dict.label"
:value=
"parseInt(dict.value)"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"模板编码"
prop=
"templateCode"
>
<el-input
v-model=
"queryParams.templateCode"
placeholder=
"请输入模板编码"
clearable
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item
label=
"模版类型"
prop=
"templateType"
>
<el-select
v-model=
"queryParams.templateType"
placeholder=
"请选择模版类型"
clearable
class=
"!w-240px"
>
<el-option
v-for=
"dict in getDictOptions(DICT_TYPE.SYSTEM_NOTIFY_TEMPLATE_TYPE)"
:key=
"parseInt(dict.value)"
:label=
"dict.label"
:value=
"parseInt(dict.value)"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"创建时间"
prop=
"createTime"
>
<el-date-picker
v-model=
"queryParams.createTime"
value-format=
"YYYY-MM-DD HH:mm:ss"
type=
"daterange"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:default-time=
"[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button
@
click=
"handleQuery"
><Icon
icon=
"ep:search"
class=
"mr-5px"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
重置
</el-button>
</el-form-item>
</el-form>
</content-wrap>
<!-- 列表 -->
<XTable
@
register=
"registerTable"
>
<template
#
actionbtns_default=
"
{ row }">
<!-- 操作:详情 -->
<XTextButton
preIcon=
"ep:view"
:title=
"t('action.detail')"
v-hasPermi=
"['system:notify-message:query']"
@
click=
"handleDetail(row.id)"
<content-wrap>
<el-table
ref=
"tableRef"
v-loading=
"loading"
:data=
"list"
:height=
"tableHeight"
>
<el-table-column
label=
"编号"
align=
"center"
prop=
"id"
/>
<el-table-column
label=
"用户类型"
align=
"center"
prop=
"userType"
>
<template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.USER_TYPE"
:value=
"scope.row.userType"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"用户编号"
align=
"center"
prop=
"userId"
width=
"80"
/>
<el-table-column
label=
"模版编号"
align=
"center"
prop=
"templateId"
width=
"80"
/>
<el-table-column
label=
"模板编码"
align=
"center"
prop=
"templateCode"
width=
"80"
/>
<el-table-column
label=
"发送人名称"
align=
"center"
prop=
"templateNickname"
width=
"180"
/>
<el-table-column
label=
"模版内容"
align=
"center"
prop=
"templateContent"
width=
"200"
show-overflow-tooltip
/>
<el-table-column
label=
"模版参数"
align=
"center"
prop=
"templateParams"
width=
"180"
show-overflow-tooltip
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
templateParams
}}
</
template
>
</el-table-column>
<el-table-column
label=
"模版类型"
align=
"center"
prop=
"templateType"
width=
"120"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.SYSTEM_NOTIFY_TEMPLATE_TYPE"
:value=
"scope.row.templateType"
/>
</
template
>
</XTable>
</ContentWrap>
<!-- 弹窗 -->
<XModal
id=
"messageModel"
:loading=
"modelLoading"
v-model=
"modelVisible"
:title=
"modelTitle"
>
<!-- 表单:详情 -->
<Descriptions
v-if=
"actionType === 'detail'"
:schema=
"allSchemas.detailSchema"
:data=
"detailData"
</el-table-column>
<el-table-column
label=
"是否已读"
align=
"center"
prop=
"readStatus"
width=
"100"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.INFRA_BOOLEAN_STRING"
:value=
"scope.row.readStatus"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"阅读时间"
align=
"center"
prop=
"readTime"
width=
"180"
:formatter=
"dateFormatter"
/>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"180"
:formatter=
"dateFormatter"
/>
<
template
#
footer
>
<!-- 按钮:关闭 -->
<XButton
:loading=
"actionLoading"
:title=
"t('dialog.close')"
@
click=
"modelVisible = false"
/>
<el-table-column
label=
"操作"
align=
"center"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"primary"
@
click=
"openModal(scope.row)"
v-hasPermi=
"['system:notify-message:query']"
>
详情
</el-button>
</
template
>
</XModal>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total=
"total"
v-model:page=
"queryParams.pageNo"
v-model:limit=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</content-wrap>
<!-- 表单弹窗:详情 -->
<notify-message-detail
ref=
"modalRef"
/>
</template>
<
script
setup
lang=
"ts"
name=
"NotifyMessage"
>
// 业务相关的 import
import
{
allSchemas
}
from
'./message.data
'
import
{
DICT_TYPE
,
getDictOptions
}
from
'@/utils/dict'
import
{
dateFormatter
}
from
'@/utils/formatTime
'
import
*
as
NotifyMessageApi
from
'@/api/system/notify/message'
import
NotifyMessageDetail
from
'./detail.vue'
const
{
t
}
=
useI18n
()
// 国际化
// 列表相关的变量
const
[
registerTable
]
=
useXTable
({
allSchemas
:
allSchemas
,
topActionSlots
:
false
,
getListApi
:
NotifyMessageApi
.
getNotifyMessagePageApi
const
loading
=
ref
(
true
)
// 列表的加载中
const
total
=
ref
(
0
)
// 列表的总页数
const
list
=
ref
([])
// 列表的数据
const
queryParams
=
reactive
({
pageNo
:
1
,
pageSize
:
10
,
userType
:
undefined
,
userId
:
undefined
,
templateCode
:
undefined
,
templateType
:
undefined
,
createTime
:
[]
})
const
queryFormRef
=
ref
()
// 搜索的表单
const
tableRef
=
ref
()
const
tableHeight
=
ref
()
// table高度
// 弹窗相关的变量
const
modelVisible
=
ref
(
false
)
// 是否显示弹出层
const
modelTitle
=
ref
(
'edit'
)
// 弹出层标题
const
modelLoading
=
ref
(
false
)
// 弹出层loading
const
actionType
=
ref
(
''
)
// 操作按钮的类型
const
actionLoading
=
ref
(
false
)
// 按钮 Loading
const
detailData
=
ref
()
// 详情 Ref
/** 查询参数列表 */
const
getList
=
async
()
=>
{
loading
.
value
=
true
try
{
const
data
=
await
NotifyMessageApi
.
getNotifyMessagePageApi
(
queryParams
)
list
.
value
=
data
.
list
total
.
value
=
data
.
total
}
finally
{
loading
.
value
=
false
}
}
// 设置标题
const
setDialogTile
=
(
type
:
string
)
=>
{
modelLoading
.
value
=
true
modelTitle
.
value
=
t
(
'action.'
+
type
)
actionType
.
value
=
type
modelVisible
.
value
=
true
/** 搜索按钮操作 */
const
handleQuery
=
()
=>
{
queryParams
.
pageNo
=
1
getList
()
}
// 详情操作
const
handleDetail
=
async
(
rowId
:
number
)
=>
{
setDialogTile
(
'detail'
)
const
res
=
await
NotifyMessageApi
.
getNotifyMessageApi
(
rowId
)
detailData
.
value
=
res
modelLoading
.
value
=
false
/** 重置按钮操作 */
const
resetQuery
=
()
=>
{
queryFormRef
.
value
.
resetFields
()
handleQuery
()
}
/** 详情操作 */
const
modalRef
=
ref
()
const
openModal
=
(
data
:
NotifyMessageApi
.
NotifyMessageVO
)
=>
{
modalRef
.
value
.
openModal
(
data
)
}
/** 初始化 **/
onMounted
(()
=>
{
getList
()
// TODO 感觉表格自适应高度体验很好的,目前简单实现 需要进一步优化,如根据筛选条件展开或收缩改变盒子高度时
tableHeight
.
value
=
window
.
innerHeight
-
tableRef
.
value
.
$el
.
offsetTop
-
85
-
155
// 监听浏览器高度变化
window
.
onresize
=
()
=>
{
tableHeight
.
value
=
window
.
innerHeight
-
tableRef
.
value
.
$el
.
offsetTop
-
85
-
155
}
})
</
script
>
src/views/system/notify/message/message.data.ts
deleted
100644 → 0
View file @
202031d4
import
type
{
VxeCrudSchema
}
from
'@/hooks/web/useVxeCrudSchemas'
// CrudSchema
const
crudSchemas
=
reactive
<
VxeCrudSchema
>
({
primaryKey
:
'id'
,
// 默认的主键ID
primaryTitle
:
'编号'
,
// 默认显示的值
primaryType
:
'id'
,
// 默认为seq,序号模式
action
:
true
,
actionWidth
:
'200'
,
// 3个按钮默认200,如有删减对应增减即可
columns
:
[
{
title
:
'用户编号'
,
field
:
'userId'
,
isSearch
:
true
},
{
title
:
'用户类型'
,
field
:
'userType'
,
dictType
:
DICT_TYPE
.
USER_TYPE
,
dictClass
:
'string'
,
isSearch
:
true
,
table
:
{
width
:
80
}
},
{
title
:
'模版编号'
,
field
:
'templateId'
},
{
title
:
'模板编码'
,
field
:
'templateCode'
,
isSearch
:
true
,
table
:
{
width
:
80
}
},
{
title
:
'发送人名称'
,
field
:
'templateNickname'
,
table
:
{
width
:
120
}
},
{
title
:
'模版内容'
,
field
:
'templateContent'
,
table
:
{
width
:
200
}
},
{
title
:
'模版类型'
,
field
:
'templateType'
,
dictType
:
DICT_TYPE
.
SYSTEM_NOTIFY_TEMPLATE_TYPE
,
dictClass
:
'number'
,
isSearch
:
true
,
table
:
{
width
:
80
}
},
{
title
:
'模版参数'
,
field
:
'templateParams'
,
isTable
:
false
},
{
title
:
'是否已读'
,
field
:
'readStatus'
,
dictType
:
DICT_TYPE
.
INFRA_BOOLEAN_STRING
,
dictClass
:
'boolean'
,
table
:
{
width
:
80
}
},
{
title
:
'阅读时间'
,
field
:
'readTime'
,
formatter
:
'formatDate'
,
table
:
{
width
:
180
}
},
{
title
:
'创建时间'
,
field
:
'createTime'
,
isForm
:
false
,
formatter
:
'formatDate'
,
search
:
{
show
:
true
,
itemRender
:
{
name
:
'XDataTimePicker'
}
},
table
:
{
width
:
180
}
}
]
})
export
const
{
allSchemas
}
=
useVxeCrudSchemas
(
crudSchemas
)
src/views/system/notify/my/detail.vue
0 → 100644
View file @
ca4bdb46
<
template
>
<Dialog
title=
"消息详情"
v-model=
"modelVisible"
:scroll=
"true"
:max-height=
"500"
width=
"800"
>
<el-descriptions
border
:column=
"1"
>
<el-descriptions-item
label=
"发送人"
>
{{
detailData
.
templateNickname
}}
</el-descriptions-item>
<el-descriptions-item
label=
"发送时间"
>
{{
formatDate
(
detailData
.
createTime
,
'YYYY-MM-DD HH:mm:ss'
)
}}
</el-descriptions-item>
<el-descriptions-item
label=
"消息类型"
>
<dict-tag
:type=
"DICT_TYPE.SYSTEM_NOTIFY_TEMPLATE_TYPE"
:value=
"detailData.templateType"
/>
</el-descriptions-item>
<el-descriptions-item
label=
"是否已读"
>
<dict-tag
:type=
"DICT_TYPE.INFRA_BOOLEAN_STRING"
:value=
"detailData.readStatus"
/>
</el-descriptions-item>
<el-descriptions-item
label=
"阅读时间"
v-if=
"detailData.readStatus"
>
{{
formatDate
(
detailData
.
readTime
,
'YYYY-MM-DD HH:mm:ss'
)
}}
</el-descriptions-item>
<el-descriptions-item
label=
"内容"
>
{{
detailData
.
templateContent
}}
</el-descriptions-item>
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
NotifyMessageApi
from
'@/api/system/notify/message'
const
modelVisible
=
ref
(
false
)
// 弹窗的是否展示
const
detailLoading
=
ref
(
false
)
// 表单的加载中
const
detailData
=
ref
()
// 详情数据
/** 打开弹窗 */
const
openModal
=
async
(
data
:
NotifyMessageApi
.
NotifyMessageVO
)
=>
{
modelVisible
.
value
=
true
// 设置数据
detailLoading
.
value
=
true
try
{
detailData
.
value
=
data
}
finally
{
detailLoading
.
value
=
false
}
}
defineExpose
({
openModal
})
// 提供 openModal 方法,用于打开弹窗
</
script
>
src/views/system/notify/my/index.vue
View file @
ca4bdb46
<
template
>
<ContentWrap>
<content-wrap>
<!-- 搜索工作栏 -->
<el-form
class=
"-mb-15px"
:model=
"queryParams"
ref=
"queryFormRef"
:inline=
"true"
label-width=
"68px"
>
<el-form-item
label=
"是否已读"
prop=
"readStatus"
>
<el-select
v-model=
"queryParams.readStatus"
placeholder=
"请选择状态"
clearable
class=
"!w-240px"
>
<el-option
v-for=
"dict in getDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"发送时间"
prop=
"createTime"
>
<el-date-picker
v-model=
"queryParams.createTime"
value-format=
"YYYY-MM-DD HH:mm:ss"
type=
"daterange"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:default-time=
"[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button
@
click=
"handleQuery"
><Icon
icon=
"ep:search"
class=
"mr-5px"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
重置
</el-button>
<el-button
@
click=
"handleUpdateList"
><Icon
icon=
"ep:reading"
class=
"mr-5px"
/>
标记已读
</el-button
>
<el-button
@
click=
"handleUpdateAll"
><Icon
icon=
"ep:reading"
class=
"mr-5px"
/>
全部已读
</el-button
>
</el-form-item>
</el-form>
<!--
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-button
@
click=
"handleUpdateList"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
标记已读
</el-button
>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
@
click=
"handleUpdateAll"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
全部已读
</el-button
>
</el-col>
</el-row>
-->
</content-wrap>
<content-wrap>
<!-- 列表 -->
<XTable
@
register=
"registerTable"
>
<template
#
toolbar_buttons
>
<!-- 操作:标记已读 -->
<XButton
type=
"primary"
preIcon=
"ep:zoom-in"
title=
"标记已读"
@
click=
"handleUpdateList"
/>
<!-- 操作:全部已读 -->
<XButton
type=
"primary"
preIcon=
"ep:zoom-in"
title=
"全部已读"
@
click=
"handleUpdateAll"
/>
<el-table
ref=
"tableRef"
v-loading=
"loading"
:data=
"list"
:height=
"tableHeight"
:row-key=
"getRowKeys"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
:selectable=
"selectable"
:reserve-selection=
"true"
/>
<!--
<el-table-column
label=
"编号"
align=
"center"
prop=
"id"
/>
-->
<el-table-column
label=
"发送人"
align=
"center"
prop=
"templateNickname"
width=
"180"
/>
<el-table-column
label=
"发送时间"
align=
"center"
prop=
"createTime"
width=
"200"
:formatter=
"dateFormatter"
/>
<el-table-column
label=
"类型"
align=
"center"
prop=
"templateType"
width=
"180"
>
<template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.SYSTEM_NOTIFY_TEMPLATE_TYPE"
:value=
"scope.row.templateType"
/>
</
template
>
<
template
#
actionbtns_default=
"{ row }"
>
<!-- 操作:已读 -->
<XTextButton
preIcon=
"ep:view"
title=
"已读"
v-hasPermi=
"['system:notify-message:query']"
v-if=
"!row.readStatus"
@
click=
"handleUpdate([row.id])"
</el-table-column>
<el-table-column
label=
"消息内容"
align=
"center"
prop=
"templateContent"
show-overflow-tooltip
/>
<el-table-column
label=
"是否已读"
align=
"center"
prop=
"readStatus"
width=
"160"
>
<
template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.INFRA_BOOLEAN_STRING"
:value=
"scope.row.readStatus"
/>
</
template
>
</XTable>
</ContentWrap>
</el-table-column>
<el-table-column
label=
"阅读时间"
align=
"center"
prop=
"readTime"
width=
"200"
:formatter=
"dateFormatter"
/>
<el-table-column
label=
"操作"
align=
"center"
width=
"160"
>
<
template
#
default=
"scope"
>
<el-button
link
:type=
"scope.row.readStatus ? 'primary' : 'warning'"
@
click=
"openModal(scope.row)"
>
{{
scope
.
row
.
readStatus
?
'详情'
:
'查阅'
}}
</el-button>
</
template
>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total=
"total"
v-model:page=
"queryParams.pageNo"
v-model:limit=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</content-wrap>
<!-- 表单弹窗:详情 -->
<my-notify-message-detail
ref=
"modalRef"
/>
</template>
<
script
setup
lang=
"ts"
name=
"MyNotifyMessage"
>
// 业务相关的 import
import
{
allSchemas
}
from
'./my.data
'
import
{
DICT_TYPE
,
getDictOptions
}
from
'@/utils/dict'
import
{
dateFormatter
}
from
'@/utils/formatTime
'
import
*
as
NotifyMessageApi
from
'@/api/system/notify/message'
import
MyNotifyMessageDetail
from
'./detail.vue'
const
message
=
useMessage
()
// 消息
// 列表相关的变量
const
[
registerTable
,
{
reload
,
getCheckboxRecords
}]
=
useXTable
({
allSchemas
:
allSchemas
,
getListApi
:
NotifyMessageApi
.
getMyNotifyMessagePage
const
loading
=
ref
(
true
)
// 列表的加载中
const
total
=
ref
(
0
)
// 列表的总页数
const
list
=
ref
([])
// 列表的数据
const
queryParams
=
reactive
({
pageNo
:
1
,
pageSize
:
10
,
readStatus
:
undefined
,
createTime
:
[]
})
const
queryFormRef
=
ref
()
// 搜索的表单
const
tableRef
=
ref
()
const
tableHeight
=
ref
()
// table高度
const
selectedNum
=
ref
(
0
)
//表格select选中的条数
const
selectedIds
=
ref
([]
as
any
[])
//表格select复选框选中的id
const
multipleSelection
=
ref
([])
const
handleUpdateList
=
async
()
=>
{
const
list
=
getCheckboxRecords
()
as
any
as
any
[]
if
(
list
.
length
===
0
)
{
return
/** 查询参数列表 */
const
getList
=
async
()
=>
{
loading
.
value
=
true
try
{
const
data
=
await
NotifyMessageApi
.
getMyNotifyMessagePage
(
queryParams
)
list
.
value
=
data
.
list
total
.
value
=
data
.
total
}
finally
{
loading
.
value
=
false
}
}
/** 详情操作 */
const
modalRef
=
ref
()
const
openModal
=
(
data
:
NotifyMessageApi
.
NotifyMessageVO
)
=>
{
if
(
!
data
.
readStatus
)
{
handleUpdate
(
data
.
id
)
}
await
handleUpdate
(
list
.
map
((
v
)
=>
v
.
id
)
)
modalRef
.
value
.
openModal
(
data
)
}
// 标记指定 id 已读
const
handleUpdate
=
async
(
ids
)
=>
{
await
NotifyMessageApi
.
updateNotifyMessageRead
(
ids
)
message
.
success
(
'标记已读成功!'
)
reload
()
//
message.success('标记已读成功!')
handleQuery
()
}
// 标记全部已读
const
handleUpdateAll
=
async
()
=>
{
await
NotifyMessageApi
.
updateAllNotifyMessageRead
()
message
.
success
(
'全部已读成功!'
)
reload
()
handleQuery
()
}
// 标记勾选 ids 已读
const
handleUpdateList
=
async
()
=>
{
if
(
selectedIds
.
value
.
length
===
0
)
{
return
}
await
NotifyMessageApi
.
updateNotifyMessageRead
(
selectedIds
.
value
)
message
.
success
(
'批量已读成功!'
)
tableRef
.
value
.
clearSelection
()
handleQuery
()
}
/** 搜索按钮操作 */
const
handleQuery
=
()
=>
{
queryParams
.
pageNo
=
1
getList
()
}
/** 重置按钮操作 */
const
resetQuery
=
()
=>
{
queryFormRef
.
value
.
resetFields
()
tableRef
.
value
.
clearSelection
()
handleQuery
()
}
/** 初始化 **/
onMounted
(()
=>
{
getList
()
// TODO 感觉表格自适应高度体验好些,目前简单实现 需要进一步优化
tableHeight
.
value
=
window
.
innerHeight
-
tableRef
.
value
.
$el
.
offsetTop
-
85
-
155
// 监听浏览器高度变化
window
.
onresize
=
()
=>
{
tableHeight
.
value
=
window
.
innerHeight
-
tableRef
.
value
.
$el
.
offsetTop
-
85
-
155
}
})
// 禁用某行复选框
const
selectable
=
(
row
)
=>
{
return
!
row
.
readStatus
}
//选中的list
const
getRowKeys
=
(
row
)
=>
{
return
row
.
id
}
//当表格选择项发生变化时会触发该事件
const
handleSelectionChange
=
(
val
)
=>
{
// 解决来回切换页面,也无法清除上次选中情况
multipleSelection
.
value
=
val
selectedNum
.
value
=
multipleSelection
.
value
.
length
selectedIds
.
value
=
[]
if
(
val
)
{
undefined
val
.
forEach
((
row
)
=>
{
undefined
if
(
row
)
{
undefined
selectedIds
.
value
.
push
(
row
.
id
)
}
})
}
}
</
script
>
src/views/system/notify/my/my.data.ts
deleted
100644 → 0
View file @
202031d4
import
type
{
VxeCrudSchema
}
from
'@/hooks/web/useVxeCrudSchemas'
// CrudSchema
const
crudSchemas
=
reactive
<
VxeCrudSchema
>
({
primaryKey
:
'id'
,
primaryTitle
:
' '
,
primaryType
:
'checkbox'
,
action
:
true
,
actionWidth
:
'200'
,
// 3个按钮默认200,如有删减对应增减即可
columns
:
[
{
title
:
'发送人名称'
,
field
:
'templateNickname'
,
table
:
{
width
:
120
}
},
{
title
:
'发送时间'
,
field
:
'createTime'
,
isForm
:
false
,
formatter
:
'formatDate'
,
search
:
{
show
:
true
,
itemRender
:
{
name
:
'XDataTimePicker'
}
},
table
:
{
width
:
180
}
},
{
title
:
'类型'
,
field
:
'templateType'
,
dictType
:
DICT_TYPE
.
SYSTEM_NOTIFY_TEMPLATE_TYPE
,
dictClass
:
'number'
,
table
:
{
width
:
80
}
},
{
title
:
'内容'
,
field
:
'templateContent'
},
{
title
:
'是否已读'
,
field
:
'readStatus'
,
dictType
:
DICT_TYPE
.
INFRA_BOOLEAN_STRING
,
dictClass
:
'boolean'
,
table
:
{
width
:
80
},
isSearch
:
true
}
]
})
export
const
{
allSchemas
}
=
useVxeCrudSchemas
(
crudSchemas
)
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