sms-record.tsx 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. import { defineComponent, onMounted, reactive, ref } from 'vue'
  2. import SaveForm from '@components/save-form'
  3. import {
  4. DataTableRowKey,
  5. NButton,
  6. NDataTable,
  7. NDatePicker,
  8. NFormItem,
  9. NInput,
  10. NSelect,
  11. NSpace,
  12. useDialog,
  13. useMessage
  14. } from 'naive-ui'
  15. import Pagination from '@components/pagination'
  16. import { getMapValueByKey, getSelectDataFromObj } from '@/utils/objectUtil'
  17. import { clientType, messageSenderFunctionModule, messageSendStatus } from '@/utils/constant'
  18. import { getTimes } from '@/utils/dateUtil'
  19. import { sysMessagePage } from '@views/message/api'
  20. import TheTooltip from '@components/TheTooltip'
  21. export default defineComponent({
  22. name: 'sms-record',
  23. props: {
  24. appKey: {
  25. type: String,
  26. required: true
  27. }
  28. },
  29. setup(props) {
  30. const dialog = useDialog()
  31. const message = useMessage()
  32. const state = reactive({
  33. loading: false,
  34. appId: null as any,
  35. pagination: {
  36. page: 1,
  37. rows: 10,
  38. pageTotal: 0
  39. },
  40. searchForm: {
  41. title: null, //消息名称
  42. clientId: null, //客户端
  43. group: null, // 功能模块
  44. sendTime: null, // 发送时间
  45. status: null, // 发送状态
  46. receiver: null // 接收人手机号
  47. },
  48. dataList: []
  49. })
  50. onMounted(async () => {
  51. getList()
  52. })
  53. const saveForm = ref()
  54. const onSearch = () => {
  55. saveForm.value?.submit()
  56. }
  57. const onBtnReset = () => {
  58. saveForm.value?.reset()
  59. }
  60. const onSubmit = () => {
  61. state.pagination.page = 1
  62. getList()
  63. }
  64. const checkedRowKeysRef = ref<DataTableRowKey[]>([])
  65. const handleCheck = (rowKeys: DataTableRowKey[]) => {
  66. checkedRowKeysRef.value = rowKeys
  67. }
  68. const getList = async () => {
  69. try {
  70. state.loading = true
  71. const { data } = await sysMessagePage({
  72. ...state.pagination,
  73. ...state.searchForm,
  74. appKey: props.appKey,
  75. sendMode: 'SMS',
  76. ...getTimes(state.searchForm.sendTime, ['sendTimeStart', 'sendTimeEnd'])
  77. })
  78. state.pagination.pageTotal = Number(data.total)
  79. state.dataList = data.rows || []
  80. } catch {}
  81. state.loading = false
  82. }
  83. const columns = (): any => {
  84. return [
  85. {
  86. title: '标题',
  87. key: 'title'
  88. },
  89. {
  90. title: '消息内容',
  91. key: 'content',
  92. render: (row: any) => {
  93. return <TheTooltip showContentWidth={400} content={row.content} />
  94. }
  95. },
  96. {
  97. title: '发送时间',
  98. key: 'sendTime'
  99. },
  100. {
  101. title: '发送对象',
  102. key: 'clientId',
  103. render: (row: any) => {
  104. return <div>{getMapValueByKey(row.clientId, new Map(Object.entries(clientType)))}</div>
  105. }
  106. },
  107. {
  108. title: '接收人姓名',
  109. key: 'username'
  110. },
  111. {
  112. title: '接收人手机号',
  113. key: 'receiver'
  114. },
  115. {
  116. title: '发送平台',
  117. key: 'senderName'
  118. },
  119. {
  120. title: '发送状态',
  121. key: 'status',
  122. render: (row: any) => {
  123. return (
  124. <div>{getMapValueByKey(row.status, new Map(Object.entries(messageSendStatus)))}</div>
  125. )
  126. }
  127. },
  128. {
  129. title: '读取状态',
  130. key: 'readStatus',
  131. render: (row: any) => {
  132. return <div>{row.readStatus ? '已读' : '未读'}</div>
  133. }
  134. },
  135. {
  136. title: '功能模块',
  137. key: 'group',
  138. render: (row: any) => {
  139. return (
  140. <div>
  141. {getMapValueByKey(row.group, new Map(Object.entries(messageSenderFunctionModule)))}
  142. </div>
  143. )
  144. }
  145. },
  146. {
  147. title: '触发条件',
  148. key: 'triggerCondition'
  149. },
  150. {
  151. title: '错误信息',
  152. key: 'errorMsg',
  153. render: (row: any) => {
  154. return <TheTooltip content={row.errorMsg} />
  155. }
  156. }
  157. ]
  158. }
  159. return () => {
  160. return (
  161. <div class="system-menu-container">
  162. <SaveForm
  163. ref={saveForm}
  164. model={state.searchForm}
  165. onSubmit={onSubmit}
  166. saveKey="sms-record"
  167. onSetModel={(val: any) => (state.searchForm = val)}
  168. >
  169. <NFormItem label="标题" path="title">
  170. <NInput placeholder="请输入标题" v-model:value={state.searchForm.title} clearable />
  171. </NFormItem>
  172. <NFormItem label="接收人手机号" path="receiver">
  173. <NInput
  174. placeholder="请输入接收人手机号"
  175. v-model:value={state.searchForm.receiver}
  176. clearable
  177. />
  178. </NFormItem>
  179. <NFormItem label="发送对象" path="clientId">
  180. <NSelect
  181. placeholder="全部发送对象"
  182. v-model:value={state.searchForm.clientId}
  183. options={getSelectDataFromObj(clientType)}
  184. clearable
  185. />
  186. </NFormItem>
  187. <NFormItem label="发送状态" path="status">
  188. <NSelect
  189. placeholder="全部发送对象"
  190. v-model:value={state.searchForm.status}
  191. options={getSelectDataFromObj(messageSendStatus)}
  192. clearable
  193. />
  194. </NFormItem>
  195. <NFormItem label="功能模块" path="group">
  196. <NSelect
  197. filterable
  198. placeholder="全部功能模块"
  199. v-model:value={state.searchForm.group}
  200. options={getSelectDataFromObj(messageSenderFunctionModule)}
  201. clearable
  202. ></NSelect>
  203. </NFormItem>
  204. <NFormItem label="发送时间" path="sendTime">
  205. <NDatePicker
  206. v-model:value={state.searchForm.sendTime}
  207. type="daterange"
  208. clearable
  209. value-format="yyyy.MM.dd"
  210. startPlaceholder="开始时间"
  211. endPlaceholder="结束时间"
  212. />
  213. </NFormItem>
  214. <NFormItem>
  215. <NSpace>
  216. <NButton type="primary" onClick={onSearch}>
  217. 搜索
  218. </NButton>
  219. <NButton type="default" onClick={onBtnReset}>
  220. 重置
  221. </NButton>
  222. </NSpace>
  223. </NFormItem>
  224. </SaveForm>
  225. <div class={['section-container']}>
  226. <NDataTable
  227. loading={state.loading}
  228. columns={columns()}
  229. data={state.dataList}
  230. rowKey={(row: any) => row.id}
  231. scrollX={'1400'}
  232. ></NDataTable>
  233. <Pagination
  234. v-model:page={state.pagination.page}
  235. v-model:pageSize={state.pagination.rows}
  236. v-model:pageTotal={state.pagination.pageTotal}
  237. onList={getList}
  238. sync
  239. saveKey="sms-record"
  240. ></Pagination>
  241. </div>
  242. </div>
  243. )
  244. }
  245. }
  246. })