|
@@ -0,0 +1,242 @@
|
|
|
|
+<template>
|
|
|
|
+ <div style="height: 100%; padding: 20px;">
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-input placeholder="请输入店铺名称" v-model="shopName"></el-input>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-date-picker v-model="date" type="date" value-format="yyyy-MM-dd" placeholder="选择日期"></el-date-picker>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-button @click="getList">搜索</el-button>
|
|
|
|
+ <el-button @click="reset">重置</el-button>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="6">
|
|
|
|
+ <el-button type="primary" @click="addWarning">新增预警</el-button>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-table :data="tableData" height="400" style="margin-top:30px; ">
|
|
|
|
+ <el-table-column prop="id" label="店铺ID"></el-table-column>
|
|
|
|
+ <el-table-column prop="name" label="店铺名称"></el-table-column>
|
|
|
|
+ <el-table-column prop="contact" label="店铺负责人"></el-table-column>
|
|
|
|
+ <el-table-column prop="phone" label="联系电话"></el-table-column>
|
|
|
|
+ <el-table-column prop="mail" label="收件邮箱"></el-table-column>
|
|
|
|
+ <el-table-column prop="threshold" label="预警阈值"></el-table-column>
|
|
|
|
+ <el-table-column prop="updateTime" label="更新时间"></el-table-column>
|
|
|
|
+ <el-table-column label="操作" width="250">
|
|
|
|
+ <template slot-scope="scope">
|
|
|
|
+ <el-button size="mini" @click="viewDetail(scope.row)">详情</el-button>
|
|
|
|
+ <el-button size="mini" type="primary" @click="edit(scope.row)">修改</el-button>
|
|
|
|
+ <el-button size="mini" type="danger" @click="del(scope.row)">删除</el-button>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ </el-table>
|
|
|
|
+ <el-pagination @current-change="handleCurrentChange" style="margin-top: 20px;" :page-size="pageSize"
|
|
|
|
+ :current-page="currentPage" :total="total"></el-pagination>
|
|
|
|
+ <el-dialog title="预警信息" :visible.sync="dialogVisible">
|
|
|
|
+ <el-form label-width="120px" :model="form" :rules="rules" ref="form">
|
|
|
|
+ <el-form-item label="选择预警店铺" prop="id" required>
|
|
|
|
+ <el-select v-model="form.id">
|
|
|
|
+ <template v-for="(item, index) in tableData">
|
|
|
|
+ <el-option :label="item.name" :value="item.id"></el-option>
|
|
|
|
+ </template>
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="设置预警值" prop="threshold" required>
|
|
|
|
+ <el-input v-model="form.threshold" placeholder="请输入初始预警值"></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="设置预警区间" prop="alertId" required>
|
|
|
|
+ <el-select v-model="form.alertId">
|
|
|
|
+ <template v-for="(item, index) in interValList">
|
|
|
|
+ <el-option :label="item.desc" :value="item.alertId" />
|
|
|
|
+ </template>
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="收件邮箱" prop="mail" required>
|
|
|
|
+ <el-input v-model="form.mail" placeholder="请输入收件预警信息邮箱"></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
|
+ <el-button @click="dialogVisible = false">取消设置</el-button>
|
|
|
|
+ <el-button type="primary" @click="saveSettings">保存设置</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </el-dialog>
|
|
|
|
+ <!-- 详情查看弹窗 -->
|
|
|
|
+ <el-dialog title="店铺详情" :visible.sync="detailDialogVisible">
|
|
|
|
+ <el-form label-width="120px">
|
|
|
|
+ <el-form-item label="店铺ID">
|
|
|
|
+ <span>{{ detailData.id }}</span>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="店铺名称">
|
|
|
|
+ <span>{{ detailData.name }}</span>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="店铺负责人">
|
|
|
|
+ <span>{{ detailData.contact }}</span>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="联系电话">
|
|
|
|
+ <span>{{ detailData.phone }}</span>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="收件邮箱">
|
|
|
|
+ <span>{{ detailData.mail }}</span>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="预警阈值">
|
|
|
|
+ <span>{{ detailData.threshold }}</span>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="更新时间">
|
|
|
|
+ <span>{{ detailData.updateTime }}</span>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
|
+ <el-button @click="detailDialogVisible = false">关闭</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </el-dialog>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+import { getStoreAlertsList, addStoreAlerts, updateStoreAlerts, clearStoreAlerts, getInterval } from '@/api/waring';
|
|
|
|
+export default {
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ shopName: '',
|
|
|
|
+ date: '',
|
|
|
|
+ tableData: [],
|
|
|
|
+ pageSize: 10,
|
|
|
|
+ total: 0,
|
|
|
|
+ currentPage: 1,
|
|
|
|
+ dialogVisible: false,
|
|
|
|
+ form: {},
|
|
|
|
+ rules: {
|
|
|
|
+ id: [
|
|
|
|
+ { required: true, message: '请选择预警店铺', trigger: 'change' }
|
|
|
|
+ ],
|
|
|
|
+ threshold: [
|
|
|
|
+ { required: true, message: '请输入初始预警值', trigger: 'blur' },
|
|
|
|
+ { validator: this.validateThreshold, trigger: 'blur' }
|
|
|
|
+ ],
|
|
|
|
+ warningInterval: [
|
|
|
|
+ { required: true, message: '请选择预警区间', trigger: 'change' }
|
|
|
|
+ ],
|
|
|
|
+ email: [
|
|
|
|
+ { required: true, message: '请输入收件预警信息邮箱', trigger: 'blur' },
|
|
|
|
+ { validator: this.validateEmail, trigger: 'blur' }
|
|
|
|
+ ]
|
|
|
|
+ },
|
|
|
|
+ detailDialogVisible: false, // 详情弹窗显示状态
|
|
|
|
+ detailData: {}, // 存储详情信息
|
|
|
|
+ interValList: [],
|
|
|
|
+ actions:'',
|
|
|
|
+ };
|
|
|
|
+ },
|
|
|
|
+ mounted() {
|
|
|
|
+ // 初始化表格数据
|
|
|
|
+ this.getList();
|
|
|
|
+ this.getIntervalsList();
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ getIntervalsList() {
|
|
|
|
+ getInterval().then(res => {
|
|
|
|
+ console.log(res);
|
|
|
|
+ this.interValList = res.data;
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ async getList() {
|
|
|
|
+ // 模拟搜索逻辑,实际中应向后台发送请求并更新tableData
|
|
|
|
+ console.log(`搜索条件:店铺名称 ${this.shopName},日期 ${this.date}`);
|
|
|
|
+ const query = {
|
|
|
|
+ page: this.currentPage,
|
|
|
|
+ size: this.pageSize,
|
|
|
|
+ name: this.shopName,
|
|
|
|
+ nextReminderDay:this.date
|
|
|
|
+ }
|
|
|
|
+ const { total, records } = await getStoreAlertsList(query);
|
|
|
|
+ console.log(records);
|
|
|
|
+ // 这里简单模拟更新数据,实际需要根据后端返回结果更新
|
|
|
|
+ this.tableData = records;
|
|
|
|
+ this.total = Number(total);
|
|
|
|
+ },
|
|
|
|
+ reset() {
|
|
|
|
+ // 重置输入框和查询条件
|
|
|
|
+ this.shopName = '';
|
|
|
|
+ this.date = '';
|
|
|
|
+ // 重置表格数据,可根据实际情况恢复默认数据
|
|
|
|
+ this.getList();
|
|
|
|
+ },
|
|
|
|
+ addWarning() {
|
|
|
|
+ // 模拟新增预警逻辑,实际中应弹出表单让用户输入信息并发送到后端
|
|
|
|
+ console.log('点击了新增预警');
|
|
|
|
+ this.form = {};
|
|
|
|
+ this.dialogVisible = true;
|
|
|
|
+ },
|
|
|
|
+ saveSettings() {
|
|
|
|
+ this.$refs.form.validate((valid) => {
|
|
|
|
+ if (valid) {
|
|
|
|
+ if(this.actions=='edit'){
|
|
|
|
+ updateStoreAlerts(this.form.id,this.form).then(res=>{
|
|
|
|
+ this.getList();
|
|
|
|
+ this.dialogVisible = false;
|
|
|
|
+ })
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ addStoreAlerts(this.form).then(res => {
|
|
|
|
+ console.log('保存成功');
|
|
|
|
+ this.getList();
|
|
|
|
+ this.dialogVisible = false;
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ viewDetail(row) {
|
|
|
|
+ // 点击详情按钮,将当前行数据赋值给详情数据对象,并显示详情弹窗
|
|
|
|
+ this.detailData = row;
|
|
|
|
+ this.detailDialogVisible = true;
|
|
|
|
+ },
|
|
|
|
+ edit(row) {
|
|
|
|
+ // 点击修改按钮,将当前行数据赋值给表单对象,并显示弹窗
|
|
|
|
+ this.form = {
|
|
|
|
+ id: row.id,
|
|
|
|
+ threshold: row.threshold,
|
|
|
|
+ warningInterval: row.warningInterval,
|
|
|
|
+ mail: row.mail,
|
|
|
|
+ alertId:row.alertId,
|
|
|
|
+ };
|
|
|
|
+ this.actions = 'edit'
|
|
|
|
+ this.dialogVisible = true;
|
|
|
|
+ },
|
|
|
|
+ del(row) {
|
|
|
|
+ //弹窗确认
|
|
|
|
+ this.$modal.confirm('是否确认删除' + row.name + '"吗?').then( ()=>{
|
|
|
|
+ clearStoreAlerts(row.id).then(res => {
|
|
|
|
+ this.$modal.msgSuccess("删除成功");
|
|
|
|
+ this.getList();
|
|
|
|
+ });
|
|
|
|
+ }).catch(function (e) {
|
|
|
|
+ console.log(e)
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+ handleCurrentChange(page) {
|
|
|
|
+ // 分页切换逻辑,向后台请求对应页码数据
|
|
|
|
+ console.log(`切换到第 ${page} 页`);
|
|
|
|
+ this.currentPage = page;
|
|
|
|
+ this.getList();
|
|
|
|
+ // 这里可根据页码向后台请求数据并更新tableData
|
|
|
|
+ },
|
|
|
|
+ validateThreshold(rule, value, callback) {
|
|
|
|
+ if (isNaN(parseFloat(value)) || parseFloat(value) <= 0) {
|
|
|
|
+ callback(new Error('预警值必须是大于0的数字'));
|
|
|
|
+ } else {
|
|
|
|
+ callback();
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ validateEmail(rule, value, callback) {
|
|
|
|
+ const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
|
|
|
+ if (!emailReg.test(value)) {
|
|
|
|
+ callback(new Error('请输入有效的邮箱地址'));
|
|
|
|
+ } else {
|
|
|
|
+ callback();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+</script>
|