Browse Source

添加消息配置

yuanliang 1 year ago
parent
commit
f30b29df12

+ 2 - 0
src/router/constant.ts

@@ -32,4 +32,6 @@ export const asyncRoutes = {
   messageRecord: () => import('@/views/message/message-record/index') ,// 消息记录
   messageConfig: () => import('@/views/message/message-config/index') ,// 消息配置
   messageConfigApp: () => import('@/views/message/message-config/sms/sms-config-app') ,// 消息配置应用
+  wxTemplateConfig: () => import('@views/message/message-config/wechat/wechat-config-template') ,// 推送消息配置模板
+  wxTemplateMessage: () => import('@views/message/message-config/wechat/wechat-config-template-message') ,// 推送消息配置模板内容
 }

+ 251 - 0
src/views/message/message-config/email/email-config-edit.tsx

@@ -0,0 +1,251 @@
+import {defineComponent, onMounted, reactive, ref} from "vue";
+import {NButton, NForm, NFormItem, NFormItemGi, NGrid, NInput, NSelect, NSpace, useMessage} from "naive-ui";
+import {musicSheetApplicationExtendUpdate, smsConfigDetail, smsConfigSave, smsConfigUpdate, wxConfigInfoSave, wxConfigInfoUpdate} from "@views/music-library/api";
+import {sysApplicationPage} from "@views/menu-manage/api";
+
+export default defineComponent({
+  mpName: 'email-config-edit',
+  props: {
+    editMode: {
+      type: String,
+      required: true
+    },
+    rowData: {
+      type: Object,
+      required: false
+    },
+  },
+  emits: ['close', 'getList'],
+  setup(props, {slots, attrs, emit}) {
+    const message = useMessage()
+    const btnLoading = ref(false)
+    const forms = reactive({
+      name: null, //平台名称
+      sender: null, //三方服务厂商
+      smtpPort: null, //端口
+      account: null, //账号
+      password: null, //密码
+      from: null, //密码
+      fromName: null, //发送方名称
+      appKey: null, //应用端
+    })
+    const formsRef = ref()
+
+    const state = reactive({
+      rowData: null as any,
+      appData: [] as any,
+    })
+
+    onMounted(async () => {
+      state.rowData = props.rowData
+      if (props.editMode == 'edit' && props.rowData) {
+        forms.name = state.rowData.name
+        forms.sender = state.rowData.sender
+        forms.smtpPort = state.rowData.smtpPort
+        forms.account = state.rowData.account
+        forms.password = state.rowData.password
+        forms.from = state.rowData.from
+        forms.fromName = state.rowData.fromName
+        forms.appKey = state.rowData.appKey
+      }
+      // 应用
+      {
+        state.appData = []
+        const {data} = await sysApplicationPage({page: 1, rows: 999})
+        if (data && data.rows) {
+          data.rows.forEach((item: any) => {
+            state.appData.push({label: item.appName, value: item.appKey})
+          })
+        }
+      }
+
+
+    })
+
+    const onSubmit = async () => {
+      formsRef.value.validate(async (error: any) => {
+        if (error) return false
+        btnLoading.value = true
+        try {
+          let res;
+          if (props.editMode == 'add') {
+            res = await wxConfigInfoSave(
+                {
+                  ...forms,
+                }
+            ) as any;
+          } else {
+            res = await wxConfigInfoUpdate(
+                {
+                  ...forms,
+                  id: state.rowData.id
+                }
+            ) as any;
+          }
+          if (res && res.code === 200) {
+            emit('close')
+            emit('getList')
+          }
+        } catch (error) {
+        }
+        btnLoading.value = false
+      })
+    }
+
+    return () => {
+      return (
+          <div style="background: #fff; padding-top: 12px">
+            <NForm
+                ref={formsRef}
+                labelPlacement="top"
+                model={forms}
+                label-placement="left"
+                label-width="100"
+            >
+              <NGrid cols={2}>
+                <NFormItemGi
+                    label="平台名称"
+                    path="name"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入平台名称'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.name}
+                      placeholder="请输入平台名称"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="发送地址"
+                    path="sender"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入发送地址'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.sender}
+                      placeholder="请输入发送地址"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="端口"
+                    path="smtpPort"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入端口'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.smtpPort}
+                      placeholder="请输入端口"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="用户名"
+                    path="account"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入用户名'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.account}
+                      placeholder="请输入用户名"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="密码"
+                    path="password"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入密码'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.password}
+                      placeholder="请输入密码"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="发送方"
+                    path="from"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入发送方'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.from}
+                      placeholder="请输入发送方"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="发送方名称"
+                    path="fromName"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入发送方名称'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.fromName}
+                      placeholder="请输入发送方名称"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="接入应用"
+                    path="appKey"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入接入应用'
+                      }
+                    ]}
+                >
+                  <NSelect
+                      v-model:value={forms.appKey}
+                      placeholder="请选择接入应用"
+                      options={state.appData}
+                      clearable
+                  />
+                </NFormItemGi>
+              </NGrid>
+            </NForm>
+
+            <NSpace justify="end">
+              <NButton onClick={() => emit('close')}>取消</NButton>
+              <NButton type="primary" onClick={onSubmit}
+                       loading={btnLoading.value}
+                       disabled={btnLoading.value}
+              >
+                保存
+              </NButton>
+            </NSpace>
+          </div>
+      )
+    }
+  }
+})

+ 135 - 91
src/views/message/message-config/sms/email-config.tsx → src/views/message/message-config/email/email-config.tsx

@@ -1,11 +1,24 @@
-import {NButton, NDataTable, NFormItem, NInput, NModal, NPageHeader, NSelect, NSpace, useDialog, useMessage} from 'naive-ui'
+import {NButton, NDataTable, NFormItem, NInput, NModal, NPageHeader, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
 import {defineComponent, onMounted, reactive, ref} from 'vue'
 import {useRoute, useRouter} from 'vue-router'
 import {useTabsViewStore} from '@/store/modules/tabsView'
 import SaveForm from "@components/save-form";
 import Pagination from "@components/pagination";
-import {appSendConfigPage, smsConfigDetail} from "@views/music-library/api";
+import {
+  appSendConfigPage,
+  emailConfigPage,
+  emailConfigRemove,
+  emailConfigStatus,
+  smsConfigDetail,
+  smsConfigRemove,
+  smsConfigStatus,
+  wxConfigInfoPage,
+  wxConfigInfoStatus
+} from "@views/music-library/api";
 import PushConfigEdit from "@views/message/message-config/sms/modal/push-config-edit";
+import deepClone from "@/utils/deep.clone";
+import WechatConfigEdit from "@views/message/message-config/sms/modal/wechat-config-edit";
+import EmailConfigEdit from "@views/message/message-config/email/email-config-edit";
 
 export default defineComponent({
   name: 'email-config',
@@ -27,7 +40,6 @@ export default defineComponent({
         status: null // 状态
       },
       name: null as any,
-      smsConfigId: null as any,
       dataList: [],
       showEdit: false,
       editMode: 'add',
@@ -42,15 +54,7 @@ export default defineComponent({
     }
 
     onMounted(async () => {
-      state.smsConfigId = route.query.id;
-      console.log('1111111111', state.smsConfigId)
-      if (state.smsConfigId) {
-        const {data} = await smsConfigDetail(state.smsConfigId)
-        if (data) {
-          state.name = data.name
-        }
-        getList()
-      }
+      getList()
     })
 
     const saveForm = ref()
@@ -67,12 +71,9 @@ export default defineComponent({
     }
 
     const getList = async () => {
-      if (!state.smsConfigId) {
-        return
-      }
       try {
         state.loading = true
-        const {data} = await appSendConfigPage({
+        const {data} = await emailConfigPage({
           ...state.pagination,
           ...state.searchForm,
         })
@@ -83,6 +84,44 @@ export default defineComponent({
       state.loading = false
     }
 
+    const onChangeStatus = (row: any) => {
+      const statusStr = row.status ? '停用' : '启用'
+      dialog.warning({
+        title: '提示',
+        content: `是否${statusStr}?`,
+        positiveText: '确定',
+        negativeText: '取消',
+        onPositiveClick: async () => {
+          try {
+            await emailConfigStatus({
+              id: row.id,
+              status: !row.status
+            })
+            getList()
+            message.success(`${statusStr}成功`)
+          } catch {
+          }
+        }
+      })
+    }
+
+    const onRmove = (row: any): void => {
+      dialog.warning({
+        title: '提示',
+        content: `删除"${row.name}",是否继续?`,
+        positiveText: '确定',
+        negativeText: '取消',
+        onPositiveClick: async () => {
+          try {
+            await emailConfigRemove(row.id)
+            getList()
+            message.success('删除成功')
+          } catch {
+          }
+        }
+      })
+    }
+
 
     const columns = (): any => {
       return [
@@ -95,102 +134,107 @@ export default defineComponent({
           key: 'name'
         },
         {
-          title: '应用',
-          key: 'name'
-        },
-        {
-          title: '客户端',
-          key: 'accessUrl'
+          title: '域名',
+          key: 'hostUrl'
         },
         {
-          title: '接入地址',
-          key: 'accessUrl'
+          title: '端口',
+          key: 'smtpPort'
         },
         {
-          title: '离线保留时长',
-          key: 'accessUrl'
+          title: '用户名',
+          key: 'account'
         },
         {
-          title: '推送环境',
-          key: 'accessUrl'
+          title: '密码',
+          key: 'password'
         },
         {
-          title: '接入key',
-          key: 'accessUrl'
+          title: '发送方',
+          key: 'from'
         },
         {
-          title: '接入秘匙',
-          key: 'accessUrl'
-        },
-        {
-          title: 'Android拓展参数',
-          key: 'accessUrl'
+          title: '发送名称',
+          key: 'fromName'
         },
         {
           title: '状态',
-          key: 'status'
+          key: 'status',
+          render(row: any) {
+            return (
+                <NTag type={row.status ? 'primary' : 'default'}>{row.status ? '启用' : '停用'}</NTag>
+            )
+          }
         },
-        // {
-        //   title: '操作',
-        //   key: 'operation',
-        //   fixed: 'right',
-        //   render(row: any) {
-        //     return (
-        //         <NSpace>
-        //           <NButton
-        //               type="primary"
-        //               size="small"
-        //               text
-        //               onClick={() => {
-        //
-        //
-        //               }}
-        //           >
-        //             {row.status ? '停用' : '启用'}
-        //           </NButton>
-        //           <NButton
-        //               type="primary"
-        //               size="small"
-        //               text
-        //               onClick={() => {
-        //                 state.showEdit = true
-        //                 state.editRowData = deepClone(row)
-        //                 state.editMode = 'edit'
-        //               }}
-        //           >
-        //             修改
-        //           </NButton>
-        //           <NButton
-        //               type="primary"
-        //               size="small"
-        //               text
-        //               disabled={!!row.status}
-        //               onClick={() => {
-        //
-        //               }}
-        //           >
-        //             删除
-        //           </NButton>
-        //         </NSpace>
-        //     )
-        //   }
-        // }
+        {
+          title: '操作',
+          key: 'operation',
+          fixed: 'right',
+          render(row: any) {
+            return (
+                <NSpace>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        router.push({
+                          path: '/message/wxTemplateConfig',
+                          query: row.id
+                        })
+                      }}
+                  >
+                    查看模板
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        onChangeStatus(row)
+                      }}
+                  >
+                    {row.status ? '停用' : '启用'}
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        state.showEdit = true
+                        state.editRowData = deepClone(row)
+                        state.editMode = 'edit'
+                      }}
+                  >
+                    修改
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      disabled={!!row.status}
+                      onClick={() => {
+                        onRmove(row)
+                      }}
+                  >
+                    删除
+                  </NButton>
+                </NSpace>
+            )
+          }
+        }
       ]
     }
 
     return () => (
         <div class="system-menu-container">
-          <NPageHeader
-              on-back={() => gotoBack()}
-              title={state.name}
-          ></NPageHeader>
           <div class={['section-container']}>
             <div class="system-menu-container">
               <SaveForm
                   ref={saveForm}
                   model={state.searchForm}
                   onSubmit={onSubmit}
-                  saveKey="push-config-app"
+                  saveKey="email-config"
                   onSetModel={(val: any) => (state.searchForm = val)}
               >
                 <NFormItem label="关键字" path="keyword">
@@ -239,7 +283,7 @@ export default defineComponent({
                       state.editMode = 'add'
                     }}
                 >
-                  新增应用
+                  新增邮件配置
                 </NButton>
               </NSpace>
 
@@ -258,7 +302,7 @@ export default defineComponent({
                     v-model:pageTotal={state.pagination.pageTotal}
                     onList={getList}
                     sync
-                    saveKey="push-config-app"
+                    saveKey="email-config"
                 ></Pagination>
               </div>
               <NModal
@@ -266,10 +310,10 @@ export default defineComponent({
                   v-model:show={state.showEdit}
                   preset="dialog"
                   showIcon={false}
-                  title={(state.editMode == 'add' ? '新增' : '编辑') + '短信平台'}
+                  title={(state.editMode == 'add' ? '新增' : '编辑') + '邮件配置'}
                   style={{width: 'auto'}}
               >
-                <PushConfigEdit
+                <EmailConfigEdit
                     editMode={state.editMode}
                     rowData={state.editRowData}
                     style={{width: '450'}}

+ 2 - 2
src/views/message/message-config/index.tsx

@@ -4,8 +4,8 @@ import {useRoute} from 'vue-router'
 import {getTabsCache, setTabsCaches} from '@/hooks/use-async'
 import SmsConfig from "@views/message/message-config/sms/sms-config";
 import PushConfig from "@views/message/message-config/sms/push-config";
-import WechatConfig from "@views/message/message-config/sms/wechat-config";
-import EmailConfig from "@views/message/message-config/sms/email-config";
+import WechatConfig from "@views/message/message-config/wechat/wechat-config";
+import EmailConfig from "@views/message/message-config/email/email-config";
 
 export default defineComponent({
   name: 'message-config-index',

+ 182 - 0
src/views/message/message-config/sms/modal/wechat-config-edit.tsx

@@ -0,0 +1,182 @@
+import {defineComponent, onMounted, reactive, ref} from "vue";
+import {NButton, NForm, NFormItem, NFormItemGi, NGrid, NInput, NSpace, useMessage} from "naive-ui";
+import {musicSheetApplicationExtendUpdate, smsConfigSave, smsConfigUpdate, wxConfigInfoSave, wxConfigInfoUpdate} from "@views/music-library/api";
+
+export default defineComponent({
+  mpName: 'wechat-config-edit',
+  props: {
+    editMode: {
+      type: String,
+      required: true
+    },
+    rowData: {
+      type: Object,
+      required: false
+    },
+  },
+  emits: ['close', 'getList'],
+  setup(props, {slots, attrs, emit}) {
+    const message = useMessage()
+    const btnLoading = ref(false)
+    const forms = reactive({
+      mpName: null, //公众号名称
+      appid: null, //公众号ID
+      secret: null, //接入密钥
+      token: null, //消息密钥
+      aeskey: null, //加密模式密钥
+    })
+    const formsRef = ref()
+
+    const state = reactive({
+      rowData: null as any,
+    })
+
+    onMounted(async () => {
+      state.rowData = props.rowData
+      if (props.editMode == 'edit' && props.rowData) {
+        forms.mpName = state.rowData.mpName
+        forms.appid = state.rowData.sender
+        forms.secret = state.rowData.secret
+        forms.token = state.rowData.token
+        forms.aeskey = state.rowData.aeskey
+      }
+    })
+
+    const onSubmit = async () => {
+      formsRef.value.validate(async (error: any) => {
+        if (error) return false
+        btnLoading.value = true
+        try {
+          let res;
+          if (props.editMode == 'add') {
+            res = await wxConfigInfoSave(
+                {
+                  ...forms,
+                }
+            ) as any;
+          } else {
+            res = await wxConfigInfoUpdate(
+                {
+                  ...forms,
+                  id: state.rowData.id
+                }
+            ) as any;
+          }
+          if (res && res.code === 200) {
+            emit('close')
+            emit('getList')
+          }
+        } catch (error) {
+        }
+        btnLoading.value = false
+      })
+    }
+
+    return () => {
+      return (
+          <div style="background: #fff; padding-top: 12px">
+            <NForm
+                ref={formsRef}
+                labelPlacement="top"
+                model={forms}
+                label-placement="left"
+                label-width="100"
+            >
+              <NGrid cols={2}>
+                <NFormItemGi
+                    label="公众号名称"
+                    path="mpName"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入公众号名称'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.mpName}
+                      placeholder="请输入公众号名称"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="公众号ID"
+                    path="appid"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入公众号ID'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.appid}
+                      placeholder="请输入公众号ID"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="接入密钥"
+                    path="secret"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入接入密钥'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.secret}
+                      placeholder="请输入接入密钥"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="消息密钥"
+                    path="token"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入消息密钥'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.token}
+                      placeholder="请输入消息密钥"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="加密模式密钥"
+                    path="aeskey"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入加密模式密钥'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.aeskey}
+                      placeholder="请输入加密模式密钥"
+                      clearable
+                  />
+                </NFormItemGi>
+              </NGrid>
+            </NForm>
+
+            <NSpace justify="end">
+              <NButton onClick={() => emit('close')}>取消</NButton>
+              <NButton type="primary" onClick={onSubmit}
+                       loading={btnLoading.value}
+                       disabled={btnLoading.value}
+              >
+                保存
+              </NButton>
+            </NSpace>
+          </div>
+      )
+    }
+  }
+})

+ 146 - 0
src/views/message/message-config/sms/modal/wechat-config-template-edit.tsx

@@ -0,0 +1,146 @@
+import {defineComponent, onMounted, reactive, ref} from "vue";
+import {NButton, NForm, NFormItem, NFormItemGi, NGrid, NInput, NSpace, useMessage} from "naive-ui";
+import {musicSheetApplicationExtendUpdate, smsConfigSave, smsConfigUpdate, wxConfigInfoSave, wxConfigInfoUpdate, wxTemplateConfigSave, wxTemplateConfigUpdate} from "@views/music-library/api";
+
+export default defineComponent({
+  mpName: 'wechat-config-template-edit',
+  props: {
+    editMode: {
+      type: String,
+      required: true
+    },
+    rowData: {
+      type: Object,
+      required: false
+    },
+  },
+  emits: ['close', 'getList'],
+  setup(props, {slots, attrs, emit}) {
+    const message = useMessage()
+    const btnLoading = ref(false)
+    const forms = reactive({
+      wxTemplateId: null, //微信模板id
+      url: null, //模板消息地址
+      description: null, //描述
+    })
+    const formsRef = ref()
+
+    const state = reactive({
+      rowData: null as any,
+    })
+
+    onMounted(async () => {
+      state.rowData = props.rowData
+      if (props.editMode == 'edit' && props.rowData) {
+        forms.wxTemplateId = state.rowData.wxTemplateId
+        forms.url = state.rowData.url
+        forms.description = state.rowData.description
+      }
+    })
+
+    const onSubmit = async () => {
+      formsRef.value.validate(async (error: any) => {
+        if (error) return false
+        btnLoading.value = true
+        try {
+          let res;
+          if (props.editMode == 'add') {
+            res = await wxTemplateConfigSave(
+                {
+                  ...forms,
+                }
+            ) as any;
+          } else {
+            res = await wxTemplateConfigUpdate(
+                {
+                  ...forms,
+                  id: state.rowData.id
+                }
+            ) as any;
+          }
+          if (res && res.code === 200) {
+            emit('close')
+            emit('getList')
+          }
+        } catch (error) {
+        }
+        btnLoading.value = false
+      })
+    }
+
+    return () => {
+      return (
+          <div style="background: #fff; padding-top: 12px">
+            <NForm
+                ref={formsRef}
+                labelPlacement="top"
+                model={forms}
+                label-placement="left"
+                label-width="100"
+            >
+              <NGrid cols={2}>
+                <NFormItemGi
+                    label="微信模板ID"
+                    path="mpName"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入微信模板ID'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.wxTemplateId}
+                      placeholder="请输入微信模板ID"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="模板消息地址"
+                    path="appid"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入模板消息地址'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.url}
+                      placeholder="请输入模板消息地址"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="描述"
+                    path="secret"
+                    rule={[
+                      {
+                        required: false,
+                        message: '请输入描述'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.description}
+                      placeholder="请输入描述"
+                      clearable
+                  />
+                </NFormItemGi>
+              </NGrid>
+            </NForm>
+
+            <NSpace justify="end">
+              <NButton onClick={() => emit('close')}>取消</NButton>
+              <NButton type="primary" onClick={onSubmit}
+                       loading={btnLoading.value}
+                       disabled={btnLoading.value}
+              >
+                保存
+              </NButton>
+            </NSpace>
+          </div>
+      )
+    }
+  }
+})

+ 11 - 21
src/views/message/message-config/sms/push-config.tsx

@@ -1,4 +1,4 @@
-import {NButton, NDataTable, NFormItem, NInput, NModal, NPageHeader, NSelect, NSpace, useDialog, useMessage} from 'naive-ui'
+import {NButton, NDataTable, NFormItem, NInput, NModal, NPageHeader, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
 import {defineComponent, onMounted, reactive, ref} from 'vue'
 import {useRoute, useRouter} from 'vue-router'
 import {useTabsViewStore} from '@/store/modules/tabsView'
@@ -42,15 +42,7 @@ export default defineComponent({
     }
 
     onMounted(async () => {
-      state.smsConfigId = route.query.id;
-      console.log('1111111111', state.smsConfigId)
-      if (state.smsConfigId) {
-        const {data} = await smsConfigDetail(state.smsConfigId)
-        if (data) {
-          state.name = data.name
-        }
-        getList()
-      }
+      getList()
     })
 
     const saveForm = ref()
@@ -67,11 +59,8 @@ export default defineComponent({
     }
 
     const getList = async () => {
-      if (!state.smsConfigId) {
-        return
-      }
+      state.loading = true
       try {
-        state.loading = true
         const {data} = await appSendConfigPage({
           ...state.pagination,
           ...state.searchForm,
@@ -128,7 +117,12 @@ export default defineComponent({
         },
         {
           title: '状态',
-          key: 'status'
+          key: 'status',
+          render(row: any) {
+            return (
+                <NTag type={row.status ? 'primary' : 'default'}>{row.status ? '启用' : '停用'}</NTag>
+            )
+          }
         },
         // {
         //   title: '操作',
@@ -180,10 +174,6 @@ export default defineComponent({
 
     return () => (
         <div class="system-menu-container">
-          <NPageHeader
-              on-back={() => gotoBack()}
-              title={state.name}
-          ></NPageHeader>
           <div class={['section-container']}>
             <div class="system-menu-container">
               <SaveForm
@@ -239,7 +229,7 @@ export default defineComponent({
                       state.editMode = 'add'
                     }}
                 >
-                  新增应用
+                  新增推送平台
                 </NButton>
               </NSpace>
 
@@ -266,7 +256,7 @@ export default defineComponent({
                   v-model:show={state.showEdit}
                   preset="dialog"
                   showIcon={false}
-                  title={(state.editMode == 'add' ? '新增' : '编辑') + '短信平台'}
+                  title={(state.editMode == 'add' ? '新增' : '编辑') + '推送平台'}
                   style={{width: 'auto'}}
               >
                 <PushConfigEdit

+ 344 - 0
src/views/message/message-config/wechat/wechat-config-template-message.tsx

@@ -0,0 +1,344 @@
+import {NButton, NDataTable, NFormItem, NInput, NModal, NPageHeader, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
+import {defineComponent, onMounted, reactive, ref} from 'vue'
+import {useRoute, useRouter} from 'vue-router'
+import {useTabsViewStore} from '@/store/modules/tabsView'
+import SaveForm from "@components/save-form";
+import Pagination from "@components/pagination";
+import {
+  appSendConfigPage,
+  smsConfigDetail,
+  smsConfigRemove,
+  smsConfigStatus,
+  wwxTemplateConfigStatus,
+  wxConfigInfoDetail,
+  wxConfigInfoPage,
+  wxConfigInfoStatus, wxTemplateConfigDetail,
+  wxTemplateConfigPage, wxTemplateConfigRemove, wxTemplateMessageDetail, wxTemplateMessagePage
+} from "@views/music-library/api";
+import PushConfigEdit from "@views/message/message-config/sms/modal/push-config-edit";
+import deepClone from "@/utils/deep.clone";
+import WechatConfigEdit from "@views/message/message-config/sms/modal/wechat-config-edit";
+import WechatConfigTemplateEdit from "@views/message/message-config/sms/modal/wechat-config-template-edit";
+
+export default defineComponent({
+  name: 'wechat-config-template',
+  setup(props, ctx) {
+    const route = useRoute()
+    const router = useRouter()
+    const dialog = useDialog()
+    const message = useMessage()
+    const state = reactive({
+      loading: false,
+      pagination: {
+        page: 1,
+        rows: 10,
+        pageTotal: 0
+      },
+      searchForm: {
+        keyword: null, //关键字
+        status: null // 状态
+      },
+      dataList: [],
+      showEdit: false,
+      editMode: 'add',
+      editRowData: {} as any,
+      appid: null as any,
+      wxTemplateConfigId: null as any,
+    })
+    const tabsViewStore = useTabsViewStore()
+    const gotoBack = () => {
+      tabsViewStore.closeCurrentTab(route)
+      router.push({
+        path: '/message/wxTemplateConfig',
+        query: state.appid
+      })
+    }
+
+    onMounted(async () => {
+      state.wxTemplateConfigId = route.query
+      if (!state.wxTemplateConfigId) {
+        return
+      }
+      {
+        const {data} = await wxTemplateConfigDetail(state.wxTemplateConfigId)
+        if (data) {
+          state.appid = data.appid
+        } else {
+          return
+        }
+      }
+      getList()
+    })
+
+    const saveForm = ref()
+    const onSearch = () => {
+      saveForm.value?.submit()
+    }
+    const onBtnReset = () => {
+      saveForm.value?.reset()
+    }
+
+    const onSubmit = () => {
+      state.pagination.page = 1
+      getList()
+    }
+
+    const getList = async () => {
+      if (!state.appid) {
+        return
+      }
+      try {
+        state.loading = true
+        const {data} = await wxTemplateMessagePage({
+          ...state.pagination,
+          ...state.searchForm,
+          appid: state.appid
+        })
+        state.pagination.pageTotal = Number(data.total)
+        state.dataList = data.rows || []
+      } catch {
+      }
+      state.loading = false
+    }
+
+    const onChangeStatus = (row: any) => {
+      const statusStr = row.status ? '停用' : '启用'
+      dialog.warning({
+        title: '提示',
+        content: `是否${statusStr}?`,
+        positiveText: '确定',
+        negativeText: '取消',
+        onPositiveClick: async () => {
+          try {
+            await wwxTemplateConfigStatus({
+              id: row.id,
+              status: !row.status
+            })
+            getList()
+            message.success(`${statusStr}成功`)
+          } catch {
+          }
+        }
+      })
+    }
+
+    const onRmove = (row: any): void => {
+      dialog.warning({
+        title: '提示',
+        content: `删除"${row.name}",是否继续?`,
+        positiveText: '确定',
+        negativeText: '取消',
+        onPositiveClick: async () => {
+          try {
+            await wxTemplateConfigRemove(row.id)
+            getList()
+            message.success('删除成功')
+          } catch {
+          }
+        }
+      })
+    }
+
+
+    const columns = (): any => {
+      return [
+        {
+          title: '编号',
+          key: 'id'
+        },
+        {
+          title: '应用标志',
+          key: 'command'
+        },
+        {
+          title: '指令',
+          key: 'wxTemplateId'
+        },
+        {
+          title: '标题',
+          key: 'url'
+        },
+        {
+          title: '内容',
+          key: 'description'
+        },
+        {
+          title: '版本',
+          key: 'description'
+        },
+        {
+          title: '类型WECHAT',
+          key: 'description'
+        },
+        {
+          title: 'APP',
+          key: 'description'
+        },
+        {
+          title: '描述',
+          key: 'description'
+        },
+        {
+          title: '状态',
+          key: 'status',
+          render(row: any) {
+            return (
+                <NTag type={row.status ? 'primary' : 'default'}>{row.status ? '启用' : '停用'}</NTag>
+            )
+          }
+        },
+        {
+          title: '操作',
+          key: 'operation',
+          fixed: 'right',
+          render(row: any) {
+            return (
+                <NSpace>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        onChangeStatus(row)
+                      }}
+                  >
+                    {row.status ? '停用' : '启用'}
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        state.showEdit = true
+                        state.editRowData = deepClone(row)
+                        state.editMode = 'edit'
+                      }}
+                  >
+                    修改
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      disabled={!!row.status}
+                      onClick={() => {
+                        onRmove(row)
+                      }}
+                  >
+                    删除
+                  </NButton>
+                </NSpace>
+            )
+          }
+        }
+      ]
+    }
+
+    return () => (
+        <div class="system-menu-container">
+          <NPageHeader
+              on-back={() => gotoBack()}
+              title={state.wxTemplateConfigId}
+          ></NPageHeader>
+          <div class={['section-container']}>
+            <div class="system-menu-container">
+              <SaveForm
+                  ref={saveForm}
+                  model={state.searchForm}
+                  onSubmit={onSubmit}
+                  saveKey="wechat-config-template"
+                  onSetModel={(val: any) => (state.searchForm = val)}
+              >
+                <NFormItem label="关键字" path="keyword">
+                  <NInput
+                      placeholder="平台编号/名称"
+                      v-model:value={state.searchForm.keyword}
+                      clearable
+                  />
+                </NFormItem>
+                <NFormItem label="状态" path="status">
+                  <NSelect
+                      v-model:value={state.searchForm.status}
+                      clearable
+                      options={
+                        [
+                          {
+                            label: '启用',
+                            value: 1
+                          },
+                          {
+                            label: '停用',
+                            value: 0
+                          }
+                        ] as any
+                      }
+                      placeholder="全部状态"
+                  />
+                </NFormItem>
+                <NFormItem>
+                  <NSpace>
+                    <NButton type="primary" onClick={onSearch}>
+                      搜索
+                    </NButton>
+                    <NButton type="default" onClick={onBtnReset}>
+                      重置
+                    </NButton>
+                  </NSpace>
+                </NFormItem>
+              </SaveForm>
+
+              <NSpace style={{paddingBottom: '12px'}}>
+                <NButton
+                    type="primary"
+                    onClick={() => {
+                      state.showEdit = true
+                      state.editMode = 'add'
+                    }}
+                >
+                  新增消息内容
+                </NButton>
+              </NSpace>
+
+              <div class={['section-container']}>
+                <NDataTable
+                    loading={state.loading}
+                    columns={columns()}
+                    data={state.dataList}
+                    rowKey={(row: any) => row.id}
+                    scrollX={'1400'}
+                ></NDataTable>
+
+                <Pagination
+                    v-model:page={state.pagination.page}
+                    v-model:pageSize={state.pagination.rows}
+                    v-model:pageTotal={state.pagination.pageTotal}
+                    onList={getList}
+                    sync
+                    saveKey="wechat-config-template"
+                ></Pagination>
+              </div>
+              <NModal
+                  blockScroll={true}
+                  v-model:show={state.showEdit}
+                  preset="dialog"
+                  showIcon={false}
+                  title={(state.editMode == 'add' ? '新增' : '编辑') + '模板'}
+                  style={{width: 'auto'}}
+              >
+                <WechatConfigTemplateEdit
+                    editMode={state.editMode}
+                    rowData={state.editRowData}
+                    style={{width: '450'}}
+                    onClose={() => (state.showEdit = false)}
+                    onGetList={() => {
+                      state.pagination.page = 1
+                      getList()
+                    }}
+                />
+              </NModal>
+            </div>
+          </div>
+        </div>
+    )
+  }
+})

+ 343 - 0
src/views/message/message-config/wechat/wechat-config-template.tsx

@@ -0,0 +1,343 @@
+import {NButton, NDataTable, NFormItem, NInput, NModal, NPageHeader, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
+import {defineComponent, onMounted, reactive, ref} from 'vue'
+import {useRoute, useRouter} from 'vue-router'
+import {useTabsViewStore} from '@/store/modules/tabsView'
+import SaveForm from "@components/save-form";
+import Pagination from "@components/pagination";
+import {
+  appSendConfigPage,
+  smsConfigDetail,
+  smsConfigRemove,
+  smsConfigStatus,
+  wwxTemplateConfigStatus,
+  wxConfigInfoDetail,
+  wxConfigInfoPage,
+  wxConfigInfoStatus,
+  wxTemplateConfigPage, wxTemplateConfigRemove
+} from "@views/music-library/api";
+import PushConfigEdit from "@views/message/message-config/sms/modal/push-config-edit";
+import deepClone from "@/utils/deep.clone";
+import WechatConfigEdit from "@views/message/message-config/sms/modal/wechat-config-edit";
+import WechatConfigTemplateEdit from "@views/message/message-config/sms/modal/wechat-config-template-edit";
+
+export default defineComponent({
+  name: 'wechat-config-template',
+  setup(props, ctx) {
+    const route = useRoute()
+    const router = useRouter()
+    const dialog = useDialog()
+    const message = useMessage()
+    const state = reactive({
+      loading: false,
+      pagination: {
+        page: 1,
+        rows: 10,
+        pageTotal: 0
+      },
+      searchForm: {
+        keyword: null, //关键字
+        status: null // 状态
+      },
+      mpName: null as any,
+      dataList: [],
+      showEdit: false,
+      editMode: 'add',
+      editRowData: {} as any,
+      wxConfigAppId: null as any,
+    })
+    const tabsViewStore = useTabsViewStore()
+    const gotoBack = () => {
+      tabsViewStore.closeCurrentTab(route)
+      router.push({
+        path: '/message/messageConfig'
+      })
+    }
+
+    onMounted(async () => {
+      console.log('----------',route.query)
+      state.wxConfigAppId = route.query;
+      if (!route.query) {
+        return
+      }
+      {
+        const {data} = await wxConfigInfoDetail(route.query)
+        if (data) {
+          state.mpName = data.mpName
+          state.wxConfigAppId = data.appid
+        } else {
+          return
+        }
+      }
+
+      getList()
+    })
+
+    const saveForm = ref()
+    const onSearch = () => {
+      saveForm.value?.submit()
+    }
+    const onBtnReset = () => {
+      saveForm.value?.reset()
+    }
+
+    const onSubmit = () => {
+      state.pagination.page = 1
+      getList()
+    }
+
+    const getList = async () => {
+      if (!state.wxConfigAppId) {
+        return
+      }
+      try {
+        state.loading = true
+        const {data} = await wxTemplateConfigPage({
+          ...state.pagination,
+          ...state.searchForm,
+          appid: state.wxConfigAppId
+        })
+        state.pagination.pageTotal = Number(data.total)
+        state.dataList = data.rows || []
+      } catch {
+      }
+      state.loading = false
+    }
+
+    const onChangeStatus = (row: any) => {
+      const statusStr = row.status ? '停用' : '启用'
+      dialog.warning({
+        title: '提示',
+        content: `是否${statusStr}?`,
+        positiveText: '确定',
+        negativeText: '取消',
+        onPositiveClick: async () => {
+          try {
+            await wwxTemplateConfigStatus({
+              id: row.id,
+              status: !row.status
+            })
+            getList()
+            message.success(`${statusStr}成功`)
+          } catch {
+          }
+        }
+      })
+    }
+
+    const onRmove = (row: any): void => {
+      dialog.warning({
+        title: '提示',
+        content: `删除"${row.name}",是否继续?`,
+        positiveText: '确定',
+        negativeText: '取消',
+        onPositiveClick: async () => {
+          try {
+            await wxTemplateConfigRemove(row.id)
+            getList()
+            message.success('删除成功')
+          } catch {
+          }
+        }
+      })
+    }
+
+
+    const columns = (): any => {
+      return [
+        {
+          title: '编号',
+          key: 'id'
+        },
+        {
+          title: '指令',
+          key: 'command'
+        },
+        {
+          title: '微信模板ID',
+          key: 'wxTemplateId'
+        },
+        {
+          title: '模板消息地址',
+          key: 'url'
+        },
+        {
+          title: '描述',
+          key: 'description'
+        },
+        {
+          title: '状态',
+          key: 'status',
+          render(row: any) {
+            return (
+                <NTag type={row.status ? 'primary' : 'default'}>{row.status ? '启用' : '停用'}</NTag>
+            )
+          }
+        },
+        {
+          title: '操作',
+          key: 'operation',
+          fixed: 'right',
+          render(row: any) {
+            return (
+                <NSpace>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        router.push({
+                          path: '/message/wxTemplateMessage',
+                          query: row.id
+                        })
+                      }}
+                  >
+                    消息内容配置
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        onChangeStatus(row)
+                      }}
+                  >
+                    {row.status ? '停用' : '启用'}
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        state.showEdit = true
+                        state.editRowData = deepClone(row)
+                        state.editMode = 'edit'
+                      }}
+                  >
+                    修改
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      disabled={!!row.status}
+                      onClick={() => {
+                        onRmove(row)
+                      }}
+                  >
+                    删除
+                  </NButton>
+                </NSpace>
+            )
+          }
+        }
+      ]
+    }
+
+    return () => (
+        <div class="system-menu-container">
+          <NPageHeader
+              on-back={() => gotoBack()}
+              title={state.mpName}
+          ></NPageHeader>
+          <div class={['section-container']}>
+            <div class="system-menu-container">
+              <SaveForm
+                  ref={saveForm}
+                  model={state.searchForm}
+                  onSubmit={onSubmit}
+                  saveKey="wechat-config-template"
+                  onSetModel={(val: any) => (state.searchForm = val)}
+              >
+                <NFormItem label="关键字" path="keyword">
+                  <NInput
+                      placeholder="平台编号/名称"
+                      v-model:value={state.searchForm.keyword}
+                      clearable
+                  />
+                </NFormItem>
+                <NFormItem label="状态" path="status">
+                  <NSelect
+                      v-model:value={state.searchForm.status}
+                      clearable
+                      options={
+                        [
+                          {
+                            label: '启用',
+                            value: 1
+                          },
+                          {
+                            label: '停用',
+                            value: 0
+                          }
+                        ] as any
+                      }
+                      placeholder="全部状态"
+                  />
+                </NFormItem>
+                <NFormItem>
+                  <NSpace>
+                    <NButton type="primary" onClick={onSearch}>
+                      搜索
+                    </NButton>
+                    <NButton type="default" onClick={onBtnReset}>
+                      重置
+                    </NButton>
+                  </NSpace>
+                </NFormItem>
+              </SaveForm>
+
+              <NSpace style={{paddingBottom: '12px'}}>
+                <NButton
+                    type="primary"
+                    onClick={() => {
+                      state.showEdit = true
+                      state.editMode = 'add'
+                    }}
+                >
+                  新增模板
+                </NButton>
+              </NSpace>
+
+              <div class={['section-container']}>
+                <NDataTable
+                    loading={state.loading}
+                    columns={columns()}
+                    data={state.dataList}
+                    rowKey={(row: any) => row.id}
+                    scrollX={'1400'}
+                ></NDataTable>
+
+                <Pagination
+                    v-model:page={state.pagination.page}
+                    v-model:pageSize={state.pagination.rows}
+                    v-model:pageTotal={state.pagination.pageTotal}
+                    onList={getList}
+                    sync
+                    saveKey="wechat-config-template"
+                ></Pagination>
+              </div>
+              <NModal
+                  blockScroll={true}
+                  v-model:show={state.showEdit}
+                  preset="dialog"
+                  showIcon={false}
+                  title={(state.editMode == 'add' ? '新增' : '编辑') + '模板'}
+                  style={{width: 'auto'}}
+              >
+                <WechatConfigTemplateEdit
+                    editMode={state.editMode}
+                    rowData={state.editRowData}
+                    style={{width: '450'}}
+                    onClose={() => (state.showEdit = false)}
+                    onGetList={() => {
+                      state.pagination.page = 1
+                      getList()
+                    }}
+                />
+              </NModal>
+            </div>
+          </div>
+        </div>
+    )
+  }
+})

+ 121 - 96
src/views/message/message-config/sms/wechat-config.tsx → src/views/message/message-config/wechat/wechat-config.tsx

@@ -1,11 +1,13 @@
-import {NButton, NDataTable, NFormItem, NInput, NModal, NPageHeader, NSelect, NSpace, useDialog, useMessage} from 'naive-ui'
+import {NButton, NDataTable, NFormItem, NInput, NModal, NPageHeader, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
 import {defineComponent, onMounted, reactive, ref} from 'vue'
 import {useRoute, useRouter} from 'vue-router'
 import {useTabsViewStore} from '@/store/modules/tabsView'
 import SaveForm from "@components/save-form";
 import Pagination from "@components/pagination";
-import {appSendConfigPage, smsConfigDetail} from "@views/music-library/api";
+import {appSendConfigPage, smsConfigDetail, smsConfigRemove, smsConfigStatus, wxConfigInfoPage, wxConfigInfoStatus} from "@views/music-library/api";
 import PushConfigEdit from "@views/message/message-config/sms/modal/push-config-edit";
+import deepClone from "@/utils/deep.clone";
+import WechatConfigEdit from "@views/message/message-config/sms/modal/wechat-config-edit";
 
 export default defineComponent({
   name: 'wechat-config',
@@ -27,7 +29,6 @@ export default defineComponent({
         status: null // 状态
       },
       name: null as any,
-      smsConfigId: null as any,
       dataList: [],
       showEdit: false,
       editMode: 'add',
@@ -42,15 +43,7 @@ export default defineComponent({
     }
 
     onMounted(async () => {
-      state.smsConfigId = route.query.id;
-      console.log('1111111111', state.smsConfigId)
-      if (state.smsConfigId) {
-        const {data} = await smsConfigDetail(state.smsConfigId)
-        if (data) {
-          state.name = data.name
-        }
-        getList()
-      }
+      getList()
     })
 
     const saveForm = ref()
@@ -67,12 +60,9 @@ export default defineComponent({
     }
 
     const getList = async () => {
-      if (!state.smsConfigId) {
-        return
-      }
       try {
         state.loading = true
-        const {data} = await appSendConfigPage({
+        const {data} = await wxConfigInfoPage({
           ...state.pagination,
           ...state.searchForm,
         })
@@ -83,6 +73,44 @@ export default defineComponent({
       state.loading = false
     }
 
+    const onChangeStatus = (row: any) => {
+      const statusStr = row.status ? '停用' : '启用'
+      dialog.warning({
+        title: '提示',
+        content: `是否${statusStr}?`,
+        positiveText: '确定',
+        negativeText: '取消',
+        onPositiveClick: async () => {
+          try {
+            await wxConfigInfoStatus({
+              id: row.id,
+              status: !row.status
+            })
+            getList()
+            message.success(`${statusStr}成功`)
+          } catch {
+          }
+        }
+      })
+    }
+
+    const onRmove = (row: any): void => {
+      dialog.warning({
+        title: '提示',
+        content: `删除"${row.name}",是否继续?`,
+        positiveText: '确定',
+        negativeText: '取消',
+        onPositiveClick: async () => {
+          try {
+            await smsConfigRemove(row.id)
+            getList()
+            message.success('删除成功')
+          } catch {
+          }
+        }
+      })
+    }
+
 
     const columns = (): any => {
       return [
@@ -91,106 +119,103 @@ export default defineComponent({
           key: 'id'
         },
         {
-          title: '平台名称',
-          key: 'name'
-        },
-        {
-          title: '应用',
-          key: 'name'
+          title: '公众号名称',
+          key: 'mpName'
         },
         {
-          title: '客户端',
-          key: 'accessUrl'
+          title: '公众号ID',
+          key: 'appid'
         },
         {
-          title: '接入地址',
-          key: 'accessUrl'
+          title: '接入密钥',
+          key: 'secret'
         },
         {
-          title: '离线保留时长',
-          key: 'accessUrl'
+          title: '消息密钥',
+          key: 'token'
         },
         {
-          title: '推送环境',
-          key: 'accessUrl'
-        },
-        {
-          title: '接入key',
-          key: 'accessUrl'
-        },
-        {
-          title: '接入秘匙',
-          key: 'accessUrl'
-        },
-        {
-          title: 'Android拓展参数',
-          key: 'accessUrl'
+          title: '加密模式密钥',
+          key: 'aeskey'
         },
         {
           title: '状态',
-          key: 'status'
+          key: 'status',
+          render(row: any) {
+            return (
+                <NTag type={row.status ? 'primary' : 'default'}>{row.status ? '启用' : '停用'}</NTag>
+            )
+          }
         },
-        // {
-        //   title: '操作',
-        //   key: 'operation',
-        //   fixed: 'right',
-        //   render(row: any) {
-        //     return (
-        //         <NSpace>
-        //           <NButton
-        //               type="primary"
-        //               size="small"
-        //               text
-        //               onClick={() => {
-        //
-        //
-        //               }}
-        //           >
-        //             {row.status ? '停用' : '启用'}
-        //           </NButton>
-        //           <NButton
-        //               type="primary"
-        //               size="small"
-        //               text
-        //               onClick={() => {
-        //                 state.showEdit = true
-        //                 state.editRowData = deepClone(row)
-        //                 state.editMode = 'edit'
-        //               }}
-        //           >
-        //             修改
-        //           </NButton>
-        //           <NButton
-        //               type="primary"
-        //               size="small"
-        //               text
-        //               disabled={!!row.status}
-        //               onClick={() => {
-        //
-        //               }}
-        //           >
-        //             删除
-        //           </NButton>
-        //         </NSpace>
-        //     )
-        //   }
-        // }
+        {
+          title: '操作',
+          key: 'operation',
+          fixed: 'right',
+          render(row: any) {
+            return (
+                <NSpace>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        router.push({
+                          path: '/message/wxTemplateConfig',
+                          query: row.id
+                        })
+                      }}
+                  >
+                    查看模板
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        onChangeStatus(row)
+                      }}
+                  >
+                    {row.status ? '停用' : '启用'}
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        state.showEdit = true
+                        state.editRowData = deepClone(row)
+                        state.editMode = 'edit'
+                      }}
+                  >
+                    修改
+                  </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      disabled={!!row.status}
+                      onClick={() => {
+                        onRmove(row)
+                      }}
+                  >
+                    删除
+                  </NButton>
+                </NSpace>
+            )
+          }
+        }
       ]
     }
 
     return () => (
         <div class="system-menu-container">
-          <NPageHeader
-              on-back={() => gotoBack()}
-              title={state.name}
-          ></NPageHeader>
           <div class={['section-container']}>
             <div class="system-menu-container">
               <SaveForm
                   ref={saveForm}
                   model={state.searchForm}
                   onSubmit={onSubmit}
-                  saveKey="push-config-app"
+                  saveKey="wechat-config"
                   onSetModel={(val: any) => (state.searchForm = val)}
               >
                 <NFormItem label="关键字" path="keyword">
@@ -239,7 +264,7 @@ export default defineComponent({
                       state.editMode = 'add'
                     }}
                 >
-                  新增应用
+                  新增公众号配置
                 </NButton>
               </NSpace>
 
@@ -258,7 +283,7 @@ export default defineComponent({
                     v-model:pageTotal={state.pagination.pageTotal}
                     onList={getList}
                     sync
-                    saveKey="push-config-app"
+                    saveKey="wechat-config"
                 ></Pagination>
               </div>
               <NModal
@@ -269,7 +294,7 @@ export default defineComponent({
                   title={(state.editMode == 'add' ? '新增' : '编辑') + '短信平台'}
                   style={{width: 'auto'}}
               >
-                <PushConfigEdit
+                <WechatConfigEdit
                     editMode={state.editMode}
                     rowData={state.editRowData}
                     style={{width: '450'}}

+ 182 - 0
src/views/music-library/api.ts

@@ -470,4 +470,186 @@ export const sysMessagePage = (params: object) => {
     method: 'post',
     data: params
   } as any)
+}
+
+/**
+ * @description: 微信配置信息分页
+ */
+export const wxConfigInfoPage = (params: object) => {
+  return request({
+    url: '/cbs-app/wxConfigInfo/page',
+    method: 'post',
+    data: params
+  } as any)
+}
+
+/**
+ * @description: 微信配置信息新增
+ */
+export const wxConfigInfoSave = (params: object) => {
+  return request({
+    url: '/cbs-app/wxConfigInfo/save',
+    method: 'post',
+    data: params
+  } as any)
+}
+
+/**
+ * @description: 微信配置信息修改
+ */
+export const wxConfigInfoUpdate = (params: object) => {
+  return request({
+    url: '/cbs-app/wxConfigInfo/update',
+    method: 'post',
+    data: params
+  } as any)
+}
+
+
+/**
+ * @description: 微信配置信息删除
+ */
+export const wxConfigInfoRemove = (id: object) => {
+  return request({
+    url: '/cbs-app/wxConfigInfo/remove?id=' + id,
+    method: 'post',
+  } as any)
+}
+
+/**
+ * @description: 微信配置信息删除启用/停用
+ */
+export const wxConfigInfoStatus = (params: object) => {
+  return request({
+    url: '/cbs-app/wxConfigInfo/status',
+    method: 'post',
+    data: params
+  } as any)
+}
+
+/**
+ * @description: 微信配置信息详情
+ */
+export const wxConfigInfoDetail = (id: object) => {
+  return request({
+    url: '/cbs-app/wxConfigInfo/detail/' + id,
+    method: 'get',
+  } as any)
+}
+
+/**
+ * @description: 微信模板配置新增
+ */
+export const wxTemplateConfigSave = (params: object) => {
+  return request({
+    url: '/cbs-app/wxTemplateConfig/save',
+    method: 'post',
+    data: params
+  } as any)
+}
+/**
+ * @description: 微信模板配置修改
+ */
+export const wxTemplateConfigUpdate = (params: object) => {
+  return request({
+    url: '/cbs-app/wxTemplateConfig/update',
+    method: 'post',
+    data: params
+  } as any)
+}
+
+/**
+ * @description: 微信模板配置分页
+ */
+export const wxTemplateConfigPage = (params: object) => {
+  return request({
+    url: '/cbs-app/wxTemplateConfig/page',
+    method: 'post',
+    data: params
+  } as any)
+}
+
+
+/**
+ * @description: 微信模板配置启用/停用
+ */
+export const wwxTemplateConfigStatus = (params: object) => {
+  return request({
+    url: '/cbs-app/wxTemplateConfig/status',
+    method: 'post',
+    data: params
+  } as any)
+}
+
+/**
+ * @description: 微信模板配置删除
+ */
+export const wxTemplateConfigRemove = (id: object) => {
+  return request({
+    url: '/cbs-app/wxTemplateConfig/remove?id=' + id,
+    method: 'post',
+  } as any)
+}
+
+/**
+ * @description: 微信模板配置详情
+ */
+export const wxTemplateConfigDetail = (id: object) => {
+  return request({
+    url: '/cbs-app/wxTemplateConfig/detail/' + id,
+    method: 'get',
+  } as any)
+}
+
+/**
+ * @description: 微信模板消息内容分页
+ */
+export const wxTemplateMessagePage = (params: object) => {
+  return request({
+    url: '/cbs-app/wxTemplateMessage/page',
+    method: 'post',
+    data: params
+  } as any)
+}
+
+/**
+ * @description: 微信模板消息内容详情
+ */
+export const wxTemplateMessageDetail = (id: object) => {
+  return request({
+    url: '/cbs-app/wxTemplateMessage/detail/' + id,
+    method: 'get',
+  } as any)
+}
+
+/**
+ * @description: 邮件配置表分页
+ */
+export const emailConfigPage = (params: object) => {
+  return request({
+    url: '/cbs-app/emailConfig/page',
+    method: 'post',
+    data: params
+  } as any)
+}
+
+/**
+ * @description: 邮件配置表删除
+ */
+export const emailConfigRemove = (id: object) => {
+  return request({
+    url: '/cbs-app/emailConfig/remove?id=' + id,
+    method: 'post',
+  } as any)
+}
+
+/**
+ * @description: 邮件配置表启用/停用
+ */
+export const emailConfigStatus = (params: object) => {
+  return request({
+    url: '/cbs-app/emailConfig/status',
+    method: 'post',
+    data: params
+  } as any)
 }