sms-record.tsx 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  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. ...state.searchForm,
  63. appKey: props.appKey,
  64. sendMode: 'SMS',
  65. ...getTimes(state.searchForm.sendTime, ['sendTimeStart', 'sendTimeEnd']),
  66. })
  67. state.pagination.pageTotal = Number(data.total)
  68. state.dataList = data.rows || []
  69. } catch {
  70. }
  71. state.loading = false
  72. }
  73. const columns = (): any => {
  74. return [
  75. {
  76. title: '标题',
  77. key: 'title'
  78. },
  79. {
  80. title: '消息内容',
  81. key: 'content',
  82. render: (row: any) => {
  83. return (
  84. <TheTooltip showContentWidth={400} content={row.content}/>
  85. )
  86. }
  87. },
  88. {
  89. title: '发送时间',
  90. key: 'sendTime'
  91. },
  92. {
  93. title: '发送对象',
  94. key: 'clientId',
  95. render: (row: any) => {
  96. return (
  97. <div>
  98. {getMapValueByKey(row.clientId, new Map(Object.entries(clientType)))}
  99. </div>
  100. )
  101. }
  102. },
  103. {
  104. title: '接收人姓名',
  105. key: 'username'
  106. },
  107. {
  108. title: '接收人手机号',
  109. key: 'receiver'
  110. },
  111. {
  112. title: '发送平台',
  113. key: 'senderName'
  114. },
  115. {
  116. title: '发送状态',
  117. key: 'status',
  118. render: (row: any) => {
  119. return (
  120. <div>
  121. {getMapValueByKey(row.status, new Map(Object.entries(messageSendStatus)))}
  122. </div>
  123. )
  124. }
  125. },
  126. {
  127. title: '读取状态',
  128. key: 'readStatus',
  129. render: (row: any) => {
  130. return (
  131. <div>
  132. {row.readStatus ? '已读' : '未读'}
  133. </div>
  134. )
  135. }
  136. },
  137. {
  138. title: '功能模块',
  139. key: 'group',
  140. render: (row: any) => {
  141. return (
  142. <div>
  143. {getMapValueByKey(row.group, new Map(Object.entries(messageSenderFunctionModule)))}
  144. </div>
  145. )
  146. }
  147. },
  148. {
  149. title: '触发条件',
  150. key: 'triggerCondition'
  151. },
  152. {
  153. title: '错误信息',
  154. key: 'errorMsg',
  155. render: (row: any) => {
  156. return (
  157. <TheTooltip content={row.errorMsg}/>
  158. )
  159. }
  160. },
  161. ]
  162. }
  163. return () => {
  164. return (
  165. <div class="system-menu-container">
  166. <SaveForm
  167. ref={saveForm}
  168. model={state.searchForm}
  169. onSubmit={onSubmit}
  170. saveKey="sms-record"
  171. onSetModel={(val: any) => (state.searchForm = val)}
  172. >
  173. <NFormItem label="标题" path="title">
  174. <NInput
  175. placeholder="请输入标题"
  176. v-model:value={state.searchForm.title}
  177. clearable
  178. />
  179. </NFormItem>
  180. <NFormItem label="接收人手机号" path="receiver">
  181. <NInput
  182. placeholder="请输入接收人手机号"
  183. v-model:value={state.searchForm.receiver}
  184. clearable
  185. />
  186. </NFormItem>
  187. <NFormItem label="发送对象" path="clientId">
  188. <NSelect
  189. placeholder="全部发送对象"
  190. v-model:value={state.searchForm.clientId}
  191. options={getSelectDataFromObj(clientType)}
  192. clearable
  193. />
  194. </NFormItem>
  195. <NFormItem label="发送状态" path="status">
  196. <NSelect
  197. placeholder="全部发送对象"
  198. v-model:value={state.searchForm.status}
  199. options={getSelectDataFromObj(messageSendStatus)}
  200. clearable
  201. />
  202. </NFormItem>
  203. <NFormItem label="功能模块" path="group">
  204. <NSelect
  205. filterable
  206. placeholder="全部功能模块"
  207. v-model:value={state.searchForm.group}
  208. options={getSelectDataFromObj(messageSenderFunctionModule)}
  209. clearable
  210. ></NSelect>
  211. </NFormItem>
  212. <NFormItem label="发送时间" path="sendTime">
  213. <NDatePicker
  214. v-model:value={state.searchForm.sendTime}
  215. type="daterange"
  216. clearable
  217. value-format="yyyy.MM.dd"
  218. startPlaceholder="开始时间"
  219. endPlaceholder="结束时间"
  220. />
  221. </NFormItem>
  222. <NFormItem>
  223. <NSpace>
  224. <NButton type="primary" onClick={onSearch}>
  225. 搜索
  226. </NButton>
  227. <NButton type="default" onClick={onBtnReset}>
  228. 重置
  229. </NButton>
  230. </NSpace>
  231. </NFormItem>
  232. </SaveForm>
  233. <div class={['section-container']}>
  234. <NDataTable
  235. loading={state.loading}
  236. columns={columns()}
  237. data={state.dataList}
  238. rowKey={(row: any) => row.id}
  239. scrollX={'1400'}
  240. ></NDataTable>
  241. <Pagination
  242. v-model:page={state.pagination.page}
  243. v-model:pageSize={state.pagination.rows}
  244. v-model:pageTotal={state.pagination.pageTotal}
  245. onList={getList}
  246. sync
  247. saveKey="sms-record"
  248. ></Pagination>
  249. </div>
  250. </div>
  251. )
  252. }
  253. }
  254. })