sms-config.tsx 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. import {defineComponent, onMounted, reactive, ref} from 'vue'
  2. import SaveForm from '@components/save-form'
  3. import {DataTableRowKey, NButton, NDataTable, NDatePicker, NFormItem, NInput, NModal, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
  4. import Pagination from '@components/pagination'
  5. import {getMapValueByKey, getSelectDataFromObj} from '@/utils/objectUtil'
  6. import {appKey, clientType, messageSenderFunctionModule, messageSenderMode} from '@/utils/constant'
  7. import {
  8. musicSheetApplicationExtendCategoryList,
  9. musicSheetApplicationExtendStatus,
  10. musicSheetRemove,
  11. musicSheetStatusList,
  12. smsConfigPage, smsConfigRemove,
  13. smsConfigStatus,
  14. sysMessageConfigPage
  15. } from '@views/music-library/api'
  16. import {subjectPage, sysApplicationPage} from '@views/system-manage/api'
  17. import {filterTimes, getTimes} from "@/utils/dateUtil";
  18. import MusicPreView from "@views/music-library/music-sheet/modal/musicPreView";
  19. import SmsConfigEdit from "@views/message/message-config/sms/modal/sms-config-edit";
  20. import deepClone from "@/utils/deep.clone";
  21. import {useRouter} from "vue-router";
  22. import TheTooltip from "@components/TheTooltip";
  23. import {getOwnerName} from "@views/music-library/musicUtil";
  24. export default defineComponent({
  25. name: 'sms-config',
  26. setup(props) {
  27. const router = useRouter()
  28. const dialog = useDialog()
  29. const message = useMessage()
  30. const state = reactive({
  31. loading: false,
  32. appId: null as any,
  33. pagination: {
  34. page: 1,
  35. rows: 10,
  36. pageTotal: 0
  37. },
  38. searchForm: {
  39. keyword: null, //关键字
  40. status: null // 状态
  41. },
  42. dataList: [],
  43. showEdit: false,
  44. editMode: 'add',
  45. editRowData: {} as any,
  46. })
  47. onMounted(async () => {
  48. getList()
  49. })
  50. const saveForm = ref()
  51. const onSearch = () => {
  52. saveForm.value?.submit()
  53. }
  54. const onBtnReset = () => {
  55. saveForm.value?.reset()
  56. }
  57. const onSubmit = () => {
  58. state.pagination.page = 1
  59. getList()
  60. }
  61. const checkedRowKeysRef = ref<DataTableRowKey[]>([])
  62. const handleCheck = (rowKeys: DataTableRowKey[]) => {
  63. checkedRowKeysRef.value = rowKeys
  64. }
  65. const getList = async () => {
  66. try {
  67. state.loading = true
  68. const {data} = await smsConfigPage({
  69. ...state.pagination,
  70. ...state.searchForm,
  71. })
  72. state.pagination.pageTotal = Number(data.total)
  73. state.dataList = data.rows || []
  74. // state.dataList = []
  75. } catch {
  76. }
  77. state.loading = false
  78. }
  79. const onChangeStatus = (row: any) => {
  80. const statusStr = row.status ? '停用' : '启用'
  81. dialog.warning({
  82. title: '提示',
  83. content: `是否${statusStr}?`,
  84. positiveText: '确定',
  85. negativeText: '取消',
  86. onPositiveClick: async () => {
  87. try {
  88. await smsConfigStatus({
  89. id: row.id,
  90. status: !row.status
  91. })
  92. getList()
  93. message.success(`${statusStr}成功`)
  94. } catch {
  95. }
  96. }
  97. })
  98. }
  99. const onRmove = (row: any): void => {
  100. dialog.warning({
  101. title: '提示',
  102. content: `删除"${row.name}",是否继续?`,
  103. positiveText: '确定',
  104. negativeText: '取消',
  105. onPositiveClick: async () => {
  106. try {
  107. await smsConfigRemove(row.id)
  108. getList()
  109. message.success('删除成功')
  110. } catch {
  111. }
  112. }
  113. })
  114. }
  115. const columns = (): any => {
  116. return [
  117. {
  118. title: '编号',
  119. key: 'id',
  120. },
  121. {
  122. title: '平台名称',
  123. key: 'name'
  124. },
  125. {
  126. title: '平台标识',
  127. key: 'sender'
  128. },
  129. {
  130. title: '接入地址',
  131. key: 'accessUrl'
  132. },
  133. {
  134. title: '接入账号',
  135. key: 'account'
  136. },
  137. {
  138. title: '接入密码',
  139. key: 'password'
  140. },
  141. {
  142. title: '拓展参数',
  143. key: 'extendData',
  144. render: (row: any) => {
  145. return <TheTooltip content={row.extendData}/>
  146. }
  147. },
  148. {
  149. title: '状态',
  150. key: 'status',
  151. render(row: any) {
  152. return (
  153. <NTag type={row.status ? 'primary' : 'default'}>{row.status ? '启用' : '停用'}</NTag>
  154. )
  155. }
  156. },
  157. {
  158. title: '操作',
  159. key: 'operation',
  160. fixed: 'right',
  161. render(row: any) {
  162. return (
  163. <NSpace>
  164. <NButton
  165. type="primary"
  166. size="small"
  167. text
  168. onClick={() => {
  169. router.push({
  170. path: '/message/messageConfigApp',
  171. query: row.id
  172. })
  173. }}
  174. >
  175. 应用详情
  176. </NButton>
  177. <NButton
  178. type="primary"
  179. size="small"
  180. text
  181. onClick={() => onChangeStatus(row)}
  182. >
  183. {row.status ? '停用' : '启用'}
  184. </NButton>
  185. <NButton
  186. type="primary"
  187. size="small"
  188. text
  189. onClick={() => {
  190. state.showEdit = true
  191. state.editRowData = deepClone(row)
  192. state.editMode = 'edit'
  193. }}
  194. >
  195. 修改
  196. </NButton>
  197. <NButton
  198. type="primary"
  199. size="small"
  200. text
  201. disabled={!!row.status}
  202. onClick={() => onRmove(row)}
  203. >
  204. 删除
  205. </NButton>
  206. </NSpace>
  207. )
  208. }
  209. }
  210. ]
  211. }
  212. return () => {
  213. return (
  214. <div class="system-menu-container">
  215. <SaveForm
  216. ref={saveForm}
  217. model={state.searchForm}
  218. onSubmit={onSubmit}
  219. saveKey="sms-config"
  220. onSetModel={(val: any) => (state.searchForm = val)}
  221. >
  222. <NFormItem label="关键字" path="keyword">
  223. <NInput
  224. placeholder="平台编号/名称"
  225. v-model:value={state.searchForm.keyword}
  226. clearable
  227. />
  228. </NFormItem>
  229. <NFormItem label="状态" path="status">
  230. <NSelect
  231. v-model:value={state.searchForm.status}
  232. clearable
  233. options={
  234. [
  235. {
  236. label: '启用',
  237. value: 1
  238. },
  239. {
  240. label: '停用',
  241. value: 0
  242. }
  243. ] as any
  244. }
  245. placeholder="全部状态"
  246. />
  247. </NFormItem>
  248. <NFormItem>
  249. <NSpace>
  250. <NButton type="primary" onClick={onSearch}>
  251. 搜索
  252. </NButton>
  253. <NButton type="default" onClick={onBtnReset}>
  254. 重置
  255. </NButton>
  256. </NSpace>
  257. </NFormItem>
  258. </SaveForm>
  259. <NSpace style={{paddingBottom: '12px'}}>
  260. <NButton
  261. type="primary"
  262. onClick={() => {
  263. state.showEdit = true
  264. state.editMode = 'add'
  265. }}
  266. >
  267. 新增短信平台
  268. </NButton>
  269. </NSpace>
  270. <div class={['section-container']}>
  271. <NDataTable
  272. loading={state.loading}
  273. columns={columns()}
  274. data={state.dataList}
  275. rowKey={(row: any) => row.id}
  276. scrollX={'1400'}
  277. ></NDataTable>
  278. <Pagination
  279. v-model:page={state.pagination.page}
  280. v-model:pageSize={state.pagination.rows}
  281. v-model:pageTotal={state.pagination.pageTotal}
  282. onList={getList}
  283. sync
  284. saveKey="sms-config"
  285. ></Pagination>
  286. </div>
  287. <NModal
  288. blockScroll={true}
  289. v-model:show={state.showEdit}
  290. preset="dialog"
  291. showIcon={false}
  292. title={(state.editMode == 'add' ? '新增' : '编辑') + '短信平台'}
  293. style={{width: 'auto'}}
  294. >
  295. <SmsConfigEdit
  296. editMode={state.editMode}
  297. rowData={state.editRowData}
  298. style={{width: '700px'}}
  299. onClose={() => (state.showEdit = false)}
  300. onGetList={() => {
  301. state.pagination.page = 1
  302. getList()
  303. }}
  304. />
  305. </NModal>
  306. </div>
  307. )
  308. }
  309. }
  310. })