push-config-edit.tsx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. import {defineComponent, onMounted, reactive, ref} from "vue";
  2. import {NButton, NForm, NFormItemGi, NGrid, NInput, NInputNumber, NSelect, NSpace, useMessage} from "naive-ui";
  3. import {getSelectDataFromObj} from "@/utils/objectUtil";
  4. import {clientType, deviceType} from "@/utils/constant";
  5. import {appSendConfigSave, appSendConfigUpdate} from "@views/message/api";
  6. export default defineComponent({
  7. name: 'push-config-edit',
  8. props: {
  9. editMode: {
  10. type: String,
  11. required: true
  12. },
  13. rowData: {
  14. type: Object,
  15. required: false
  16. },
  17. appData: {
  18. type: [] as any,
  19. required: true
  20. },
  21. },
  22. emits: ['close', 'getList'],
  23. setup(props, {slots, attrs, emit}) {
  24. const message = useMessage()
  25. const btnLoading = ref(false)
  26. const forms = reactive<any>({
  27. name: null, // 平台名称
  28. sender: null, // 平台标识
  29. appKey: null, // 应用端
  30. accessUrl: null, // 接入地址
  31. clientId: null, // 客户端
  32. apnsProduction: null as any, // 推送环境
  33. account: null, // 接入账号
  34. password: null, // 接入密码
  35. timeToLive: null as any, // 离线保存时长
  36. extendData: null, // 扩展参数
  37. thirdPartyChannel: null, // 三方渠道参数
  38. deviceType: null, // 设备类型
  39. })
  40. const formsRef = ref()
  41. const state = reactive({
  42. rowData: null as any,
  43. musicSheetCategories: [] as any,
  44. appData: [] as any,
  45. })
  46. onMounted(async () => {
  47. state.rowData = props.rowData
  48. if (props.editMode == 'edit' && props.rowData) {
  49. forms.name = state.rowData.name
  50. forms.sender = state.rowData.sender
  51. forms.appKey = state.rowData.appKey
  52. forms.clientId = state.rowData.clientId
  53. forms.apnsProduction = state.rowData.apnsProduction
  54. forms.account = state.rowData.account
  55. forms.password = state.rowData.password
  56. forms.timeToLive = Number.parseFloat(state.rowData.timeToLive)/3600
  57. forms.accessUrl = state.rowData.accessUrl
  58. forms.extendData = state.rowData.extendData
  59. forms.thirdPartyChannel = state.rowData.thirdPartyChannel
  60. forms.deviceType = state.rowData.deviceType
  61. }
  62. // 客户端
  63. // state.appData = []
  64. // const {data} = await sysApplicationPage({page: 1, rows: 999})
  65. // if (data && data.rows) {
  66. // data.rows.forEach((item: any) => {
  67. // state.appData.push({label: item.appName, value: item.id + ''})
  68. // })
  69. // }
  70. })
  71. const onSubmit = async () => {
  72. formsRef.value.validate(async (error: any) => {
  73. if (error) return false
  74. btnLoading.value = true
  75. try {
  76. let res;
  77. if (props.editMode == 'add') {
  78. res = await appSendConfigSave(
  79. {
  80. ...forms,
  81. timeToLive: Number.parseFloat(forms.timeToLive) * 3600
  82. }
  83. ) as any;
  84. } else {
  85. res = await appSendConfigUpdate(
  86. {
  87. ...forms,
  88. id: state.rowData.id,
  89. timeToLive: Number.parseFloat(forms.timeToLive) * 3600
  90. }
  91. ) as any;
  92. }
  93. if (res && res.code === 200) {
  94. emit('close')
  95. emit('getList')
  96. }
  97. } catch (error) {
  98. }
  99. btnLoading.value = false
  100. })
  101. }
  102. return () => {
  103. return (
  104. <div style="background: #fff; padding-top: 12px">
  105. <NForm
  106. ref={formsRef}
  107. labelPlacement="top"
  108. model={forms}
  109. label-placement="left"
  110. label-width="100"
  111. >
  112. <NGrid cols={2}>
  113. <NFormItemGi
  114. label="平台名称"
  115. path="name"
  116. rule={[
  117. {
  118. required: true,
  119. message: '请输入平台名称'
  120. }
  121. ]}
  122. >
  123. <NInput
  124. v-model:value={forms.name}
  125. placeholder="请输入平台名称"
  126. clearable
  127. />
  128. </NFormItemGi>
  129. <NFormItemGi
  130. label="平台标识"
  131. path="sender"
  132. rule={[
  133. {
  134. required: true,
  135. message: '请输入平台标识'
  136. }
  137. ]}
  138. >
  139. <NInput
  140. v-model:value={forms.sender}
  141. placeholder="请输入平台标识"
  142. clearable
  143. />
  144. </NFormItemGi>
  145. <NFormItemGi
  146. label="接入应用"
  147. path="appKey"
  148. rule={[
  149. {
  150. required: true,
  151. message: '请输入接入应用'
  152. }
  153. ]}
  154. >
  155. <NSelect
  156. v-model:value={forms.appKey}
  157. placeholder="请输入接入应用"
  158. options={props.appData}
  159. clearable
  160. />
  161. </NFormItemGi>
  162. <NFormItemGi
  163. label="客户端"
  164. path="clientId"
  165. rule={[
  166. {
  167. required: true,
  168. message: '请选择客户端'
  169. }
  170. ]}
  171. >
  172. <NSelect
  173. v-model:value={forms.clientId}
  174. options={getSelectDataFromObj(clientType)}
  175. placeholder="请选择客户端"
  176. clearable
  177. />
  178. </NFormItemGi>
  179. <NFormItemGi
  180. label="接入地址"
  181. path="accessUrl"
  182. rule={[
  183. {
  184. required: true,
  185. message: '请输入接入地址'
  186. }
  187. ]}
  188. >
  189. <NInput
  190. v-model:value={forms.accessUrl}
  191. placeholder="请输入接入地址"
  192. clearable
  193. />
  194. </NFormItemGi>
  195. <NFormItemGi
  196. label="推送环境"
  197. path="apnsProduction"
  198. rule={[
  199. {
  200. required: true,
  201. message: '请输入推送环境',
  202. type: 'boolean'
  203. }
  204. ]}
  205. >
  206. <NSelect
  207. v-model:value={forms.apnsProduction}
  208. placeholder="请输入推送环境"
  209. options={[
  210. {
  211. label: '线上',
  212. value: true
  213. }, {
  214. label: '开发',
  215. value: false
  216. }
  217. ] as any}
  218. clearable
  219. />
  220. </NFormItemGi>
  221. <NFormItemGi
  222. label="接入key"
  223. path="account"
  224. rule={[
  225. {
  226. required: true,
  227. message: '请输入接入key'
  228. }
  229. ]}
  230. >
  231. <NInput
  232. v-model:value={forms.account}
  233. placeholder="请输入接入key"
  234. clearable
  235. />
  236. </NFormItemGi>
  237. <NFormItemGi
  238. label="接入密钥"
  239. path="password"
  240. rule={[
  241. {
  242. required: true,
  243. message: '请输入接入密钥'
  244. }
  245. ]}
  246. >
  247. <NInput
  248. v-model:value={forms.password}
  249. placeholder="请输入接入密码"
  250. clearable
  251. />
  252. </NFormItemGi>
  253. <NFormItemGi
  254. label="离线保留时长(小时)"
  255. path="timeToLive"
  256. rule={[
  257. {
  258. required: true,
  259. message: '请输入离线保留时长(小时)'
  260. }
  261. ]}
  262. >
  263. <NInputNumber
  264. v-model:value={forms.timeToLive}
  265. placeholder="请输入离线保留时长(小时)"
  266. min={0}
  267. />
  268. </NFormItemGi>
  269. <NFormItemGi
  270. label="设备类型"
  271. path="deviceType"
  272. rule={[
  273. {
  274. required: false,
  275. message: '请选择设备类型'
  276. }
  277. ]}
  278. >
  279. <NSelect
  280. placeholder="请选择设备类型"
  281. v-model:value={forms.deviceType}
  282. options={getSelectDataFromObj(deviceType)}
  283. clearable
  284. />
  285. </NFormItemGi>
  286. </NGrid>
  287. <NGrid cols={1}>
  288. <NFormItemGi
  289. label="拓展参数"
  290. path="extendData"
  291. rule={[
  292. {
  293. required: false,
  294. message: '请输入拓展参数'
  295. }
  296. ]}
  297. >
  298. <NInput
  299. v-model:value={forms.extendData}
  300. placeholder="请输入拓展参数"
  301. autosize={{minRows: 3}}
  302. type={'textarea'}
  303. />
  304. </NFormItemGi>
  305. </NGrid>
  306. <NGrid cols={1}>
  307. <NFormItemGi
  308. label="三方渠道参数"
  309. path="thirdPartyChannel"
  310. rule={[
  311. {
  312. required: false,
  313. message: '请输入三方渠道参数'
  314. }
  315. ]}
  316. >
  317. <NInput
  318. v-model:value={forms.thirdPartyChannel}
  319. placeholder="请输入三方渠道参数"
  320. autosize={{minRows: 3}}
  321. type={'textarea'}
  322. />
  323. </NFormItemGi>
  324. </NGrid>
  325. </NForm>
  326. <NSpace justify="end">
  327. <NButton onClick={() => emit('close')}>取消</NButton>
  328. <NButton type="primary" onClick={onSubmit}
  329. loading={btnLoading.value}
  330. disabled={btnLoading.value}
  331. >
  332. 保存
  333. </NButton>
  334. </NSpace>
  335. </div>
  336. )
  337. }
  338. }
  339. })