sms-record.tsx 7.8 KB

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