yuanliang 1 year ago
parent
commit
adda6ef915

+ 11 - 4
src/utils/constant.ts

@@ -288,8 +288,15 @@ export const messageSenderMode = {
 } as any
 
 export const messageSenderFunctionModule = {
-  PUSH: '报名',
-  SMS: '会员',
-  EMAIL: '课程',
-  WECHAT: '作业',
+  DEFAULT: '默认',
+  SYSTEM: '系统',
+  TRAINING: '作业',
+  COURSE: '课程',
+} as any
+
+export const messageSendStatus= {
+  FAILED: '发送失败',
+  WAIT: '待发送',
+  SENDING: '发送中',
+  SUCCESSED: '发送完成',
 } as any

+ 10 - 10
src/views/message/message-record/index.tsx

@@ -13,7 +13,7 @@ export default defineComponent({
   name: 'message-template-index',
   setup() {
     const state = reactive({
-      tabName: 'KT' as 'KT' | 'GYT' | 'KLX' | 'GYM',
+      tabName: 'KT' as 'KT' | 'GYT' | 'KLX' | 'GYM' | 'CBS',
       appKeyList: [] as any,
       appNameList: [] as any,
       messageSendMode: 'SMS' as 'SMS' | 'PUSH' | 'EMAIL' | 'WECHAT'
@@ -32,14 +32,14 @@ export default defineComponent({
 
     onMounted(async () => {
       // 获取应用APP信息
-      const appKeys = Object.keys(appKey)
+      // const appKeys = Object.keys(appKey)
       const {data} = await sysApplicationPage({page: 1, rows: 99, parentId: 0})
       const tempList = data.rows || []
       tempList.forEach((next: any) => {
-        if (appKeys.includes(next.appKey)) {
-          state.appKeyList.push(next.appKey)
-          state.appNameList.push(next.appName)
-        }
+        // if (appKeys.includes(next.appKey)) {
+        state.appKeyList.push(next.appKey)
+        state.appNameList.push(next.appName)
+        // }
       })
       nextTick(() => tabsInstRef.value?.syncBarPosition())
     })
@@ -64,7 +64,7 @@ export default defineComponent({
                       >
                         <NTabPane
                             name={'SMS'}
-                            tab ={"短信"}
+                            tab={"短信"}
                         >
                           <SmsRecord
                               appKey={app}
@@ -72,7 +72,7 @@ export default defineComponent({
                         </NTabPane>
                         <NTabPane
                             name={'PUSH'}
-                            tab ={"推送"}
+                            tab={"推送"}
                         >
                           <PushRecord
                               appKey={app}
@@ -80,7 +80,7 @@ export default defineComponent({
                         </NTabPane>
                         <NTabPane
                             name={'WECHAT'}
-                            tab ={"公众号"}
+                            tab={"公众号"}
                         >
                           <WechatRecord
                               appKey={app}
@@ -88,7 +88,7 @@ export default defineComponent({
                         </NTabPane>
                         <NTabPane
                             name={'EMAIL'}
-                            tab ={"邮件"}
+                            tab={"邮件"}
                         >
                           <EmailRecord
                               appKey={app}

+ 76 - 15
src/views/message/message-record/sms-record.tsx

@@ -3,9 +3,10 @@ import SaveForm from '@components/save-form'
 import {DataTableRowKey, NButton, NDataTable, NDatePicker, NFormItem, NInput, NSelect, NSpace, useDialog, useMessage} from 'naive-ui'
 import Pagination from '@components/pagination'
 import {getMapValueByKey, getSelectDataFromObj} from '@/utils/objectUtil'
-import {clientType, messageSenderFunctionModule} from '@/utils/constant'
+import {clientType, messageSenderFunctionModule, messageSendStatus} from '@/utils/constant'
 import {getTimes} from "@/utils/dateUtil";
 import {sysMessagePage} from "@views/message/api";
+import TheTooltip from "@components/TheTooltip";
 
 export default defineComponent({
   name: 'sms-record',
@@ -30,8 +31,10 @@ export default defineComponent({
       searchForm: {
         title: null, //消息名称
         clientId: null, //客户端
-        model: null, // 功能模块
-        sendTime: null // 发送时间
+        group: null, // 功能模块
+        sendTime: null, // 发送时间
+        status: null, // 发送状态
+        receiver: null, // 接收人手机号
       },
       dataList: []
     })
@@ -67,9 +70,9 @@ export default defineComponent({
           ...state.pagination,
           title: state.searchForm.title,
           clientId: state.searchForm.clientId,
-          model: state.searchForm.model,
+          group: state.searchForm.group,
           appKey: props.appKey,
-          sendMode:'SMS',
+          sendMode: 'SMS',
           ...getTimes(state.searchForm.sendTime, ['sendTimeStart', 'sendTimeEnd']),
         })
         state.pagination.pageTotal = Number(data.total)
@@ -94,27 +97,56 @@ export default defineComponent({
           key: 'sender'
         },
         {
-          title: '姓名',
+          title: '发送对象',
+          key: 'clientId',
+          render: (row: any) => {
+            return (
+                <div>
+                  {getMapValueByKey(row.clientId, new Map(Object.entries(clientType)))}
+                </div>
+            )
+          }
+        },
+        {
+          title: '发送状态',
+          key: 'status',
+          render: (row: any) => {
+            return (
+                <div>
+                  {getMapValueByKey(row.status, new Map(Object.entries(messageSendStatus)))}
+                </div>
+            )
+          }
+        },
+        {
+          title: '接收人姓名',
           key: 'username'
         },
         {
-          title: '消息名称',
-          key: 'title'
+          title: '接收人手机号',
+          key: 'receiver'
         },
         {
-          title: '发送对象',
-          key: 'clientId',
+          title: '读取状态',
+          key: 'readStatus',
           render: (row: any) => {
             return (
                 <div>
-                  {getMapValueByKey(row.clientId, new Map(Object.entries(clientType)))}
+                  {row.readStatus ? '已读' : '未读'}
                 </div>
             )
           }
         },
         {
           title: '功能模块',
-          key: 'messageType'
+          key: 'group',
+          render: (row: any) => {
+            return (
+                <div>
+                  {getMapValueByKey(row.group, new Map(Object.entries(messageSenderFunctionModule)))}
+                </div>
+            )
+          }
         },
         {
           title: '触发条件',
@@ -122,7 +154,21 @@ export default defineComponent({
         },
         {
           title: '消息内容',
-          key: 'content'
+          key: 'content',
+          render: (row: any) => {
+            return (
+                <TheTooltip showContentWidth={400} content={row.content}/>
+            )
+          }
+        },
+        {
+          title: '错误信息',
+          key: 'errorMsg',
+          render: (row: any) => {
+            return (
+                <TheTooltip content={row.errorMsg}/>
+            )
+          }
         },
       ]
     }
@@ -144,6 +190,13 @@ export default defineComponent({
                     clearable
                 />
               </NFormItem>
+              <NFormItem label="接收人手机号" path="receiver">
+                <NInput
+                    placeholder="请输入接收人手机号"
+                    v-model:value={state.searchForm.receiver}
+                    clearable
+                />
+              </NFormItem>
               <NFormItem label="发送对象" path="clientId">
                 <NSelect
                     placeholder="全部发送对象"
@@ -152,11 +205,19 @@ export default defineComponent({
                     clearable
                 />
               </NFormItem>
-              <NFormItem label="功能模块" path="model">
+              <NFormItem label="发送状态" path="status">
+                <NSelect
+                    placeholder="全部发送对象"
+                    v-model:value={state.searchForm.status}
+                    options={getSelectDataFromObj(messageSendStatus)}
+                    clearable
+                />
+              </NFormItem>
+              <NFormItem label="功能模块" path="group">
                 <NSelect
                     filterable
                     placeholder="全部功能模块"
-                    v-model:value={state.searchForm.model}
+                    v-model:value={state.searchForm.group}
                     options={getSelectDataFromObj(messageSenderFunctionModule)}
                     clearable
                 ></NSelect>

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

@@ -32,10 +32,10 @@ export default defineComponent({
       const { data } = await sysApplicationPage({ page: 1, rows: 99, parentId: 0 })
       const tempList = data.rows || []
       tempList.forEach((next: any) => {
-        if (appKeys.includes(next.appKey)) {
+        // if (appKeys.includes(next.appKey)) {
           state.appKeyList.push(next.appKey)
           state.appNameList.push(next.appName)
-        }
+        // }
       })
       nextTick(() => tabsInstRef.value?.syncBarPosition())
     })

+ 51 - 3
src/views/message/message-template/message-template-list.tsx

@@ -1,11 +1,14 @@
 import {defineComponent, onMounted, reactive, ref} from 'vue'
 import SaveForm from '@components/save-form'
-import {DataTableRowKey, NButton, NDataTable, NFormItem, NInput, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
+import {DataTableRowKey, NButton, NDataTable, NFormItem, NInput, NModal, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
 import Pagination from '@components/pagination'
 import TheTooltip from '@components/TheTooltip'
 import {getMapValueByKey, getSelectDataFromObj} from '@/utils/objectUtil'
 import {clientType, messageSenderFunctionModule, messageSenderMode} from '@/utils/constant'
 import {sysMessageConfigPage, sysMessageConfigStatus} from "@views/message/api";
+import deepClone from "@/utils/deep.clone";
+import SmsConfigEdit from "@views/message/message-config/sms/modal/sms-config-edit";
+import MessageTemplateEdit from "@views/message/message-template/modal/message-template-edit";
 
 export default defineComponent({
   name: 'message-template-list',
@@ -35,6 +38,9 @@ export default defineComponent({
         sendFlag: null
       },
       dataList: [] as any[],
+      showEdit: false,
+      editMode: 'add',
+      editRowData: {} as any,
     })
 
     onMounted(async () => {
@@ -105,7 +111,7 @@ export default defineComponent({
           key: 'description'
         },
         {
-          title: '消息类型',
+          title: '消息发送类型',
           key: 'sendMode',
           render: (row: any) => {
             return (
@@ -127,10 +133,21 @@ export default defineComponent({
           }
         },
         {
-          title: '功能模块',
+          title: '消息类型',
           key: 'messageType'
         },
         {
+          title: '功能模块',
+          key: 'group',
+          render: (row: any) => {
+            return (
+                <div>
+                  {getMapValueByKey(row.group, new Map(Object.entries(messageSenderFunctionModule)))}
+                </div>
+            )
+          }
+        },
+        {
           title: '触发条件',
           key: 'triggerCondition'
         },
@@ -186,6 +203,18 @@ export default defineComponent({
                   >
                     {row.sendFlag ? '停用' : '启用'}
                   </NButton>
+                  <NButton
+                      type="primary"
+                      size="small"
+                      text
+                      onClick={() => {
+                        state.showEdit = true
+                        state.editRowData = deepClone(row)
+                        state.editMode = 'edit'
+                      }}
+                  >
+                    修改
+                  </NButton>
                 </NSpace>
             )
           }
@@ -284,6 +313,25 @@ export default defineComponent({
                   saveKey="message-template"
               ></Pagination>
             </div>
+            <NModal
+                blockScroll={true}
+                v-model:show={state.showEdit}
+                preset="dialog"
+                showIcon={false}
+                title={(state.editMode == 'add' ? '新增' : '编辑') + '短信平台'}
+                // style={{width: 'auto'}}
+                style={{width: '700px'}}
+            >
+              <MessageTemplateEdit
+                  editMode={state.editMode}
+                  rowData={state.editRowData}
+                  onClose={() => (state.showEdit = false)}
+                  onGetList={() => {
+                    state.pagination.page = 1
+                    getList()
+                  }}
+              />
+            </NModal>
           </div>
       )
     }

+ 222 - 0
src/views/message/message-template/modal/message-template-edit.tsx

@@ -0,0 +1,222 @@
+import {defineComponent, onMounted, reactive, ref} from "vue";
+import {NButton, NForm, NFormItemGi, NGrid, NInput, NSpace, useMessage} from "naive-ui";
+import {smsConfigSave, smsConfigUpdate} from "@views/message/api";
+
+export default defineComponent({
+  name: 'message-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({
+      name: null,
+      sender: null,
+      accessUrl: null,
+      account: null,
+      password: null,
+      extendData: null,
+      appId: null,
+    })
+    const formsRef = ref()
+
+    const state = reactive({
+      rowData: null as any,
+      musicSheetCategories: [] 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.accessUrl = state.rowData.accessUrl
+        forms.account = state.rowData.account
+        forms.password = state.rowData.password
+        forms.extendData = state.rowData.extendData
+        forms.appId = state.rowData.appId
+      }
+    })
+
+    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 smsConfigSave(
+                {
+                  ...forms,
+                }
+            ) as any;
+          } else {
+            res = await smsConfigUpdate(
+                {
+                  ...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="accessUrl"
+                    rule={[
+                      {
+                        required: true,
+                        message: '请输入接入地址'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.accessUrl}
+                      placeholder="请输入接入地址"
+                      clearable
+                  />
+                </NFormItemGi>
+                <NFormItemGi
+                    label="应用ID"
+                    path="appId"
+                    rule={[
+                      {
+                        required: false,
+                        message: '请输入应用ID'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.appId}
+                      placeholder="请输入应用ID"
+                      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>
+              </NGrid>
+              <NGrid cols={1}>
+                <NFormItemGi
+                    label="拓展参数"
+                    path="extendData"
+                    rule={[
+                      {
+                        required: false,
+                        message: '请输入拓展参数'
+                      }
+                    ]}
+                >
+                  <NInput
+                      v-model:value={forms.extendData}
+                      placeholder="请输入拓展参数"
+                      autosize={{minRows: 3}}
+                      type={'textarea'}
+                  />
+                </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>
+      )
+    }
+  }
+})