Browse Source

feat:新增模板列表

xianna.liang 7 months ago
parent
commit
4bfcd17611

+ 12 - 1
admin.ui.plus-master/src/api/admin/AlarmService/pushTemplateApi.ts

@@ -1,5 +1,5 @@
 import { ContentType, HttpClient, RequestParams, } from "/@/api/admin/http-client";
-import { pushTemplateModel, TemplateFilterDtoResult, TemplateFilterDto } from "/@/api/admin/AlarmService/pushTemplateDto";
+import { pushTemplateModel, TemplateFilterDtoResult, TemplateFilterDto,PageInputPushTemplateFilterModel } from "/@/api/admin/AlarmService/pushTemplateDto";
 import { AxiosResponse } from "axios/index";
 
 export class pushTemplateApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
@@ -44,4 +44,15 @@ export class pushTemplateApi<SecurityDataType = unknown> extends HttpClient<Secu
             body:data,
             ...params
         })
+
+    getPage = (data: PageInputPushTemplateFilterModel, params: RequestParams = {}) =>
+        this.request<TemplateFilterDtoResult, any>({
+            path: '/api/app/push/get-push-template',
+            method: 'POST',
+            body: data,
+            secure: true,
+            type: ContentType.Json,
+            format: 'json',
+            ...params
+        })
 }

+ 23 - 0
admin.ui.plus-master/src/api/admin/AlarmService/pushTemplateDto.ts

@@ -17,6 +17,14 @@ export  interface pushTemplateModel{
     templateContent?:string,
   }
 
+/**
+ * 列表查询信息
+ */
+export interface pushTemplateModel_SearchFilter {
+  /**规则名称*/
+  templateName?: string,
+}
+
 /** 查询信息输入 */
 export interface TemplateFilterDto {
    /**
@@ -55,4 +63,19 @@ export interface TemplateFilterDtoResult {
   data?: TemplateFilterDtoOutput
 }
   
+/** 分页信息输入 */
+export interface PageInputPushTemplateFilterModel {
+  /**
+   * 当前页标
+   * @format int32
+   */
+  currentPage?: number
+  /**
+   * 每页大小
+   * @format int32
+   */
+  pageSize?: number
+  dynamicFilter?: DynamicFilterInfo
+  filter?: pushTemplateModel_SearchFilter
+}
 

+ 1 - 1
admin.ui.plus-master/src/views/admin/product/qrBook/index.vue

@@ -6,7 +6,7 @@
                 <el-card class="mt8" shadow="hover">
                     <el-form :model="qrBookData.Filter" @submit.stop.prevent>
                         <el-form-item prop="name" style="width: 100%;">
-                            <el-col :xs="15" :sm="6" :md="5" :lg="5" class="mb20">
+                            <el-col :xs="24" :sm="12" :md="8" :lg="8" class="mb20">
                                 <el-form-item label="上传人">
                                     <el-input v-model="qrBookData.Filter.Author" placeholder="单行输入"
                                         clearable></el-input>

+ 3 - 1
admin.ui.plus-master/src/views/admin/statement/alarmRules/components/add-alarmRules.vue

@@ -306,7 +306,8 @@ watch([() => [...Data.selectValue1], () => [...Data.selectValue2], () => [...Dat
 const toSave = async () => {
   const res = await new alarmRulesApi().addForm(Data.Filter)
   console.log(Data.Filter)
-  console.log(res)
+  // console.log(res)
+  Data.isShowDialog = false
   reset()
 }
 
@@ -347,6 +348,7 @@ const openDialog = () => {
   Data.isShowDialog = true
 }
 
+
 defineExpose({
   openDialog,
 })

+ 101 - 60
admin.ui.plus-master/src/views/admin/statement/alarmRules/components/pushTemplate.vue

@@ -1,87 +1,116 @@
 <template>
   <div class="layout-pd">
-    <el-row style="height: auto;">
-      <!--操作-->
-      <el-col :xs="24">
-        <el-card class="my-fill mt8" shadow="never" :body-style="{ paddingBottom: '0' }" style="height: 88vh">
-          <div style="width: 100%;display: flex;justify-content: left;align-items: center;">
-            <h1 style="margin-bottom: 10px;font-size: 30px;">推送模板:</h1>
-          </div>
-          <hr style="margin: 10px;" />
-          <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
-            <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
-              <el-form-item label="模板名称:" style="width: 100%;">
-                <el-input v-model="Data.templateName" style="width: 100%;" placeholder="请输入" />
-              </el-form-item>
-            </el-form>
-          </div>
-          <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
-            <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
-              <el-form-item label="模板类型:" style="width: 100%;">
-                <el-select v-model="Data.templateType" placeholder="请选择">
-                  <el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id" />
-                </el-select>
-              </el-form-item>
-            </el-form>
-          </div>
-          <!-- 能不能通过调节距离的方式进行高度调节??? -->
-          <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
-            <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
-              <el-form-item style="width: 100%;">
-              </el-form-item>
-              <el-form-item style="width: 100%;">
-              </el-form-item>
-            </el-form>
-          </div>
-          <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
-            <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
-              <el-form-item label="模&#8195;&#8195;板:" style="width: 100%;">
-                <el-input type="textarea" rows="12" v-model="Data.templateContent" style="width: 100%;"
-                  placeholder="请输入" />
-              </el-form-item>
-            </el-form>
-          </div>
-          <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
-            <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
-              <el-row justify="end" style="margin-top: 30px;">
-                <el-button type="primary" @click="toSave">保存</el-button>
-              </el-row>
-            </el-form>
-          </div>
-        </el-card>
-      </el-col>
-    </el-row>
+    <el-dialog v-model="isShowDialog" style="width: 60%;">
+
+      <el-row style="height: auto;">
+        <!--操作-->
+        <el-col :xs="24">
+          <el-card class="my-fill mt8" shadow="never" :body-style="{ paddingBottom: '0' }" >
+            <div style="width: 100%;display: flex;justify-content: left;align-items: center;">
+              <h1 style="margin-bottom: 10px;font-size: 30px;">推送模板:</h1>
+            </div>
+            <hr style="margin: 10px;" />
+            <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
+              <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
+                <el-form-item label="模板名称:" style="width: 100%;">
+                  <el-input v-model="Data.templateName" style="width: 100%;" placeholder="请输入" />
+                </el-form-item>
+              </el-form>
+            </div>
+            <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
+              <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
+                <el-form-item label="模板类型:" style="width: 100%;">
+                  <el-select v-model="Data.templateType" placeholder="请选择">
+                    <el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id" />
+                  </el-select>
+                </el-form-item>
+              </el-form>
+            </div>
+            <!-- 能不能通过调节距离的方式进行高度调节??? -->
+            <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
+              <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
+                <el-form-item style="width: 100%;">
+                </el-form-item>
+                <el-form-item style="width: 100%;">
+                </el-form-item>
+              </el-form>
+            </div>
+            <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
+              <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
+                <el-form-item label="模&#8195;&#8195;板:" style="width: 100%;">
+                  <el-input type="textarea" rows="12" v-model="Data.templateContent" style="width: 100%;"
+                    placeholder="请输入" />
+                </el-form-item>
+              </el-form>
+            </div>
+            <div style="width: 100%;display: flex;justify-content: center;align-items: center;">
+              <el-form :inline="true" @submit.stop.prevent style="width: 60%;">
+                <el-row justify="end" style="margin-top: 30px;">
+                  <el-button type="primary" @click="toSave">保存</el-button>
+                </el-row>
+                <el-row justify="end">
+                  <label class="tooltip" v-if="isShowTooltip">模板名称不能为空</label>
+                </el-row>
+              </el-form>
+            </div>
+          </el-card>
+        </el-col>
+      </el-row>
+
+    </el-dialog>
   </div>
 
 </template>
 
 <script setup lang="ts" name="">
-import { reactive } from 'vue';
+import { reactive, ref } from 'vue';
 import { pushTemplateModel } from "/@/api/admin/AlarmService/pushTemplateDto";
 import { pushTemplateApi } from "/@/api/admin/AlarmService/pushTemplateApi";
 
 const Data = reactive({
-  id:0,
+  id: 0,
   templateName: '',
   templateType: '',
   templateContent: ''
 } as pushTemplateModel)
 
 const typeList = [
-  {name:"微信公众号",id:"wx"},
-  {name:"邮件",id:"email"}
+  { name: "微信公众号", id: "wx" },
+  { name: "邮件", id: "email" }
 ]
 
-const toSave = async() => {
-  Data.id = Number(new Date()),
+// 提交数据
+const toSave = async () => {
+  if (Data.templateName == '') {
+    isShowTooltip.value = true
+    return
+  }
+  Data.id = Number(new Date())
   console.log(Data)
   const res = await new pushTemplateApi().addForm(Data)
   console.log(res)
-  Data.templateName= '',
-  Data.templateType= '',
-  Data.templateContent= ''
+  Data.templateName = ''
+  Data.templateType = ''
+  Data.templateContent = ''
+  isShowTooltip.value = false
+  isShowDialog.value = false
+
+}
+
+const isShowDialog = ref(false)
+const isShowTooltip = ref(false)
+/**
+ * 根据参数 打开表单
+ * @param val
+ */
+const openDialog = () => {
+  isShowDialog.value = true
 }
 
+defineExpose({
+  openDialog,
+})
+
 </script>
 
 <style scoped lang="scss">
@@ -102,4 +131,16 @@ const toSave = async() => {
   height: 100%;
   padding: 0;
 }
+
+/* 输入框标签固定四个字符宽度 */
+::v-deep .el-form-item__label {
+  // 字体大小14,4个字符,12px右间距
+  width: 100px;
+  justify-content: start;
+}
+
+.tooltip {
+  font-size: 12px;
+  color: red;
+}
 </style>

+ 180 - 0
admin.ui.plus-master/src/views/admin/statement/alarmRules/template.vue

@@ -0,0 +1,180 @@
+<!-- 规则列表 -- 表格 -->
+<template>
+    <div class="layout-pd">
+        <el-row>
+            <!--操作-->
+            <el-col :xs="24">
+                <el-card class="mt8" shadow="hover">
+                    <el-form :model="Data.Filter" @submit.stop.prevent>
+                        <el-form-item prop="name" style="width: 100%">
+                            <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="4" class="mb20">
+                                <el-form-item label="模板名称">
+                                    <el-input v-model="Data.time1" placeholder="请输入模板名称" clearable></el-input>
+                                </el-form-item>
+                            </el-col>
+                        </el-form-item>
+                    </el-form>
+
+                    <hr>
+
+                    <!-- 按钮 -->
+                    <el-row justify="space-between" class="submit-button">
+                        <el-row>
+                            <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
+                            <el-button type="primary" icon="ele-RefreshRight" @click="onReset"> 重置 </el-button>
+                        </el-row>
+                        <el-row>
+                            <el-button type="primary" icon="ele-RefreshRight" @click="addTemplate"> 添加 </el-button>
+                        </el-row>
+                    </el-row>
+                </el-card>
+            </el-col>
+            <!--表格-->
+            <el-col :xs="24">
+                <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
+                    <el-table ref="multipleTableRef" v-loading="Data.loading" stripe :data="Data.tableModel"
+                        row-key="id" style="width: 100%">
+                        <el-table-column v-for="column in Data.dynamicColumns" :key="column.prop" :prop="column.prop"
+                            :label="column.label" />
+                    </el-table>
+                    <div class="my-flex my-flex-end" style="margin-top: 20px">
+                        <el-pagination v-model:currentPage="Data.pageInput.currentPage"
+                            v-model:page-size="Data.pageInput.pageSize" :total="Data.total"
+                            :page-sizes="[5, 10, 20, 50, 100]" small background @size-change="onSizeChange"
+                            @current-change="onCurrentChange" layout="total, sizes, prev, pager, next, jumper" />
+                    </div>
+                </el-card>
+            </el-col>
+        </el-row>
+        <EditDialog ref="editDialogRef" />
+
+    </div>
+
+</template>
+
+<script setup lang="ts" name="">
+import { defineAsyncComponent, onMounted, reactive, ref, watch } from "vue";
+import { pushTemplateModel_SearchFilter, pushTemplateModel, PageInputPushTemplateFilterModel } from "/@/api/admin/AlarmService/pushTemplateDto";
+import { pushTemplateApi } from "/@/api/admin/AlarmService/pushTemplateApi";
+
+/**页面对象 */
+const Data = reactive({
+    time1: '',
+    /** 选择框列表 */
+    statusList: [] as any,
+    supplierList: [] as any,
+    /**加载显示 */
+    loading: false,
+    /**条件查询模块 */
+    Filter: {
+        /** 模板名称 */
+        templateName: ""
+    } as pushTemplateModel_SearchFilter,
+    /**表格信息 */
+    tableModel: [] as pushTemplateModel,
+    tableData: [] as any,
+    /**动态表头 */
+    dynamicColumns: [
+        { prop: 'templateName', label: '模板名称' },
+        { prop: 'templateType', label: '模板类型' },
+        { prop: 'templateContent', label: '模板内容' },
+
+    ],
+    /**分页总数 */
+    total: 0,
+    /**分页标识 */
+    pageInput: {
+        currentPage: 1,
+        pageSize: 10,
+    } as PageInputPushTemplateFilterModel,
+})
+
+/**引入组件*/
+const EditDialog = defineAsyncComponent(() => import('./components/pushTemplate.vue'))
+const editDialogRef = ref()
+
+onMounted(() => {
+    init()
+})
+
+// 条件查询
+const init = async () => {
+    Data.loading = true
+    const res: any = await new pushTemplateApi().getPage({ ...Data.pageInput, filter: Data.Filter })
+    console.log(res)
+    Data.tableModel = res?.data ?? []
+    // Data.total = 100   // 接口中没有总的数据量
+    Data.loading = false
+    dataChange()
+}
+
+const onQuery = () => {
+    init()
+    console.log("查询")
+}
+
+/**重置查询条件 */
+const resetQuery = () => {
+    Data.Filter.templateName = ''
+}
+/**重置 */
+const onReset = () => {
+    resetQuery()
+    init()
+}
+
+/** 
+ * 添加模板
+*/
+const addTemplate = (() => {
+    editDialogRef.value.openDialog()
+    init()
+})
+
+/**
+* 页条变化
+* @param val
+*/
+const onSizeChange = (val: number) => {
+    Data.pageInput.pageSize = val
+    init()
+}
+
+/**
+ * 页数 变化
+ * @param val
+ */
+const onCurrentChange = (val: number) => {
+    Data.pageInput.currentPage = val
+    init()
+}
+
+/** 数据转换 */
+const dataChange = (() => {
+    // Data.tableData = []
+    // // 推送方式
+    // let index = 0
+    Data.tableModel.forEach((item: any) => {
+        console.log(item)
+
+
+        if (item.templateType == 'wx') {
+            item.templateType = "微信"
+        } else if (item.templateType == 'email') {
+            item.templateType = "电子邮箱"
+        }
+
+        // if(item.templateName != null){
+        //     Data.tableData.push(item)
+        // }
+
+    })
+})
+
+
+
+</script>
+
+<style scoped lang="scss">
+@import '/@/theme/tableStyle.scss';
+</style>

+ 3 - 4
admin.ui.plus-master/src/views/admin/statement/sendMessage/index.vue

@@ -41,7 +41,6 @@
   import {onMounted, reactive, watch} from "vue";
 
   import { sendMessageApi } from "/@/api/admin/AlarmService/sendMessageApi";
-import { Filter } from "@element-plus/icons";
 
   
   /**页面对象 */
@@ -84,12 +83,12 @@ import { Filter } from "@element-plus/icons";
 
 // 条件查询
 const init = async () => {
-  // Data.loading = true
+  Data.loading = true
   const res: any = await new sendMessageApi().getData({ ...Data.pageInput, filter: Data.Filter })
   console.log(res)
-  // Data.tableModel = res?.data ?? []
+  Data.tableModel = res?.data ?? []
   // Data.total = res?.data?.length ?? 0
-  // Data.loading = false
+  Data.loading = false
 }