wechat-config-edit.tsx 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. import {defineComponent, onMounted, reactive, ref} from "vue";
  2. import {NButton, NForm, NFormItemGi, NGrid, NInput, NSelect, NSpace, useMessage} from "naive-ui";
  3. import {wxConfigInfoSave, wxConfigInfoUpdate} from "@views/message/api";
  4. export default defineComponent({
  5. mpName: 'wechat-config-edit',
  6. props: {
  7. editMode: {
  8. type: String,
  9. required: true
  10. },
  11. rowData: {
  12. type: Object,
  13. required: false
  14. },
  15. appData: {
  16. type: Array as any,
  17. required: true
  18. }
  19. },
  20. emits: ['close', 'getList'],
  21. setup(props, {slots, attrs, emit}) {
  22. const message = useMessage()
  23. const btnLoading = ref(false)
  24. const forms = reactive({
  25. mpName: null, //公众号名称
  26. appid: null, //公众号ID
  27. secret: null, //接入密钥
  28. token: null, //消息密钥
  29. aeskey: null, //加密模式密钥
  30. appKey: null, //应用
  31. content: null, //关注公众号提示信息
  32. })
  33. const formsRef = ref()
  34. const state = reactive({
  35. rowData: null as any,
  36. })
  37. onMounted(async () => {
  38. state.rowData = props.rowData
  39. if (props.editMode == 'edit' && props.rowData) {
  40. forms.mpName = state.rowData.mpName
  41. forms.appid = state.rowData.appid
  42. forms.secret = state.rowData.secret
  43. forms.token = state.rowData.token
  44. forms.aeskey = state.rowData.aeskey
  45. forms.appKey = state.rowData.appKey
  46. forms.content = state.rowData.content
  47. }
  48. })
  49. const onSubmit = async () => {
  50. formsRef.value.validate(async (error: any) => {
  51. if (error) return false
  52. btnLoading.value = true
  53. try {
  54. let res;
  55. if (props.editMode == 'add') {
  56. res = await wxConfigInfoSave(
  57. {
  58. ...forms,
  59. }
  60. ) as any;
  61. } else {
  62. res = await wxConfigInfoUpdate(
  63. {
  64. ...forms,
  65. id: state.rowData.id
  66. }
  67. ) as any;
  68. }
  69. if (res && res.code === 200) {
  70. emit('close')
  71. emit('getList')
  72. }
  73. } catch (error) {
  74. }
  75. btnLoading.value = false
  76. })
  77. }
  78. return () => {
  79. return (
  80. <div style="background: #fff; padding-top: 12px">
  81. <NForm
  82. ref={formsRef}
  83. labelPlacement="top"
  84. model={forms}
  85. label-placement="left"
  86. label-width="100"
  87. >
  88. <NGrid cols={2}>
  89. <NFormItemGi
  90. label="公众号名称"
  91. path="mpName"
  92. rule={[
  93. {
  94. required: true,
  95. message: '请输入公众号名称'
  96. }
  97. ]}
  98. >
  99. <NInput
  100. v-model:value={forms.mpName}
  101. placeholder="请输入公众号名称"
  102. clearable
  103. />
  104. </NFormItemGi>
  105. <NFormItemGi
  106. label="公众号ID"
  107. path="appid"
  108. rule={[
  109. {
  110. required: true,
  111. message: '请输入公众号ID'
  112. }
  113. ]}
  114. >
  115. <NInput
  116. v-model:value={forms.appid}
  117. placeholder="请输入公众号ID"
  118. clearable
  119. />
  120. </NFormItemGi>
  121. <NFormItemGi
  122. label="接入密钥"
  123. path="secret"
  124. rule={[
  125. {
  126. required: true,
  127. message: '请输入接入密钥'
  128. }
  129. ]}
  130. >
  131. <NInput
  132. v-model:value={forms.secret}
  133. placeholder="请输入接入密钥"
  134. clearable
  135. />
  136. </NFormItemGi>
  137. <NFormItemGi
  138. label="消息密钥"
  139. path="token"
  140. rule={[
  141. {
  142. required: true,
  143. message: '请输入消息密钥'
  144. }
  145. ]}
  146. >
  147. <NInput
  148. v-model:value={forms.token}
  149. placeholder="请输入消息密钥"
  150. clearable
  151. />
  152. </NFormItemGi>
  153. <NFormItemGi
  154. label="加密模式密钥"
  155. path="aeskey"
  156. rule={[
  157. {
  158. required: true,
  159. message: '请输入加密模式密钥'
  160. }
  161. ]}
  162. >
  163. <NInput
  164. v-model:value={forms.aeskey}
  165. placeholder="请输入加密模式密钥"
  166. clearable
  167. />
  168. </NFormItemGi>
  169. <NFormItemGi
  170. label="应用"
  171. path="appKey"
  172. rule={[
  173. {
  174. required: true,
  175. message: '请选择应用'
  176. }
  177. ]}
  178. >
  179. <NSelect
  180. placeholder="请选择应用"
  181. v-model:value={forms.appKey}
  182. options={props.appData}
  183. clearable
  184. />
  185. </NFormItemGi>
  186. </NGrid>
  187. <NGrid cols={1}>
  188. <NFormItemGi
  189. label="关注公众号提示信息"
  190. path="content"
  191. rule={[
  192. {
  193. required: true,
  194. message: '关注公众号提示信息'
  195. }
  196. ]}
  197. >
  198. <NInput
  199. type={'textarea'}
  200. v-model:value={forms.content}
  201. placeholder="关注公众号提示信息"
  202. autosize={{minRows:3}}
  203. clearable
  204. />
  205. </NFormItemGi>
  206. </NGrid>
  207. </NForm>
  208. <NSpace justify="end">
  209. <NButton onClick={() => emit('close')}>取消</NButton>
  210. <NButton type="primary" onClick={onSubmit}
  211. loading={btnLoading.value}
  212. disabled={btnLoading.value}
  213. >
  214. 保存
  215. </NButton>
  216. </NSpace>
  217. </div>
  218. )
  219. }
  220. }
  221. })