lsw 1 год назад
Родитель
Сommit
70a0802ec9

+ 40 - 55
admin-ui/src/views/work/banner/edit.vue

@@ -1,47 +1,20 @@
 <template>
   <div class="cmain">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="标题" prop="title">
-          <el-input v-model="form.title" placeholder="请输入标题" clearable/>
-        </el-form-item>
-        <el-form-item label="封面图" prop="pic">
-          <el-input v-model="form.pic" type="textarea" placeholder="请输入内容" />
-        </el-form-item>
-        <el-form-item label="所属类型" prop="types">
-          <el-input v-model="form.types" placeholder="请输入所属类型" clearable/>
-        </el-form-item>
-        <el-form-item label="链接标题" prop="contentTitle">
-          <el-input v-model="form.contentTitle" placeholder="请输入链接标题" clearable/>
-        </el-form-item>
-        <el-form-item label="状态" prop="state">
-          <el-input v-model="form.state" placeholder="请输入状态" clearable/>
-        </el-form-item>
-        <el-form-item label="显示顺序" prop="orderNum">
-          <el-input v-model="form.orderNum" placeholder="请输入显示顺序" clearable/>
-        </el-form-item>
-        <el-form-item label="创建者" prop="createBy">
-          <el-input v-model="form.createBy" placeholder="请输入创建者" clearable/>
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createTime">
-          <el-date-picker clearable
-            v-model="form.createTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="更新者" prop="updateBy">
-          <el-input v-model="form.updateBy" placeholder="请输入更新者" clearable/>
-        </el-form-item>
-        <el-form-item label="更新时间" prop="updateTime">
-          <el-date-picker clearable
-            v-model="form.updateTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择更新时间">
-          </el-date-picker>
-        </el-form-item>
-      </el-form>
+    <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+      <el-form-item label="轮播图片" prop="pic"><cropper v-model="form.pic" :fixed_number="[5, 2.3]"></cropper></el-form-item>
+      <el-form-item label="跳转链接" prop="contentTitle">
+        <el-input placeholder="请选择跳转链接,留空则点击图片不跳转" v-model="form.contentTitle" :disabled="true">
+          <el-button slot="append" icon="el-icon-search" @click="add()"></el-button>
+        </el-input>
+      </el-form-item>
+      <el-form-item label="显示顺序" prop="orderNum"><el-input type="number" :min="0" v-model="form.orderNum" placeholder="请输入显示顺序" /></el-form-item>
+      <el-form-item label="状态" prop="state">
+        <el-select v-model="form.state" placeholder="请选择">
+          <el-option label="正常" :value="0"></el-option>
+          <el-option label="停用" :value="1"></el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
     <div class="mfooter">
       <el-button type="primary" @click="submitForm">确 定</el-button>
       <el-button @click="$layer.close(layerid)">取 消</el-button>
@@ -50,11 +23,16 @@
 </template>
 
 <script>
+import selectUrl from './select_url';
 export default {
   data() {
     return {
-      form: {},
+      form: {contentTitle: '', contentId: '', orderNum: 0, state: 0 },
       rules: {
+        pic: [{ required: true, message: '请上传图片', trigger: 'blur' }],
+        contentTitle: [{ required: true, message: '请选择跳转链接', trigger: 'blur' }],
+        orderNum: [{ required: true, message: '请输入显示顺序', trigger: 'blur' }],
+        state: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
       }
     };
   },
@@ -71,27 +49,34 @@ export default {
   },
   mounted() {
     if (this.param.id) {
-      this.ajax({ url: '/work/banner/detail/' + this.param.id }).then(response => {
+      this.ajax({ url: '/work/banner/detail/' + this.param.id }).then((response) => {
         this.form = response.data;
       });
     }
   },
   methods: {
+    //添加跳转链接
+    add() {
+      this.iframe({ obj: selectUrl, param: { types: this.form.types }, title: '添加跳转链接', width: '60%', height: '65%' });
+    },
+    change(e) {
+      this.form.contentTitle = '';
+    },
     submitForm() {
-      this.$refs["form"].validate(valid => {
+      this.$refs['form'].validate((valid) => {
         if (valid) {
           if (this.form.id) {
-              this.ajax({method: 'post',url: '/work/banner/edit', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("修改成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-              });
+            this.ajax({ method: 'post', url: '/work/banner/edit', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('修改成功');
+              this.$layer.close(this.layerid);
+              this.$parent.getList();
+            });
           } else {
-              this.ajax({method: 'post',url: '/work/banner/add', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("新增成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-               });
+            this.ajax({ method: 'post', url: '/work/banner/add', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('新增成功');
+              this.$layer.close(this.layerid);
+              this.$parent.getList();
+            });
           }
         }
       });

+ 45 - 67
admin-ui/src/views/work/banner/index.vue

@@ -1,78 +1,56 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch" label-width="auto">
-      <el-form-item label="标题" prop="title">
-        <el-input v-model="queryParams.title" placeholder="请输入标题"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="所属类型" prop="types">
-        <el-input v-model="queryParams.types" placeholder="请输入所属类型"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="链接标题" prop="contentTitle">
-        <el-input v-model="queryParams.contentTitle" placeholder="请输入链接标题"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="状态" prop="state">
-        <el-input v-model="queryParams.state" placeholder="请输入状态"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="显示顺序" prop="orderNum">
-        <el-input v-model="queryParams.orderNum" placeholder="请输入显示顺序"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
     <el-row :gutter="10" class="mb8">
-        <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:banner:add']">新增</el-button>
-        <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit',ids)" v-hasPermi="['work:banner:edit']">修改</el-button>
-        <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:banner:remove']">删除{{ids.length>0?'('+ids.length+')':''}}</el-button>
-        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:banner:add']">新增</el-button>
+      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit', ids)" v-hasPermi="['work:banner:edit']">修改</el-button>
+      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:banner:remove']">删除{{ ids.length > 0 ? '(' + ids.length + ')' : '' }}</el-button>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
-
-    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
+    <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 243px)">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="id" align="center" prop="id" />
-      <el-table-column label="标题" align="center" prop="title" />
-      <el-table-column label="封面图" align="center" prop="pic" />
-      <el-table-column label="所属类型" align="center" prop="types" />
-      <el-table-column label="跳转链接" align="center" prop="contentId" />
-      <el-table-column label="链接标题" align="center" prop="contentTitle" />
-      <el-table-column label="状态" align="center" prop="state" />
-      <el-table-column label="显示顺序" align="center" prop="orderNum" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="图片" align="center" prop="pic">
+        <template slot-scope="scope">
+          <el-image class="p_img" style="height: 50px;background-color: aliceblue;" :fit="'contain'" :src="baseUrl + scope.row.pic" :preview-src-list="[baseUrl + scope.row.pic]"></el-image>
+        </template>
+      </el-table-column>
+      <el-table-column label="跳转文章链接" align="center" prop="contentTitle" v-if="queryParams.types == '新闻'" />
+      <el-table-column label="显示顺序" align="center" prop="orderNum" width="130" />
+      <el-table-column label="状态" align="center" prop="state" width="130">
+        <template slot-scope="scope">
+          <el-tag type="success" v-if="scope.row.state == 0">正常</el-tag>
+          <el-tag type="danger" v-if="scope.row.state == 1">停用</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建时间" prop="createTime" align="center" width="220" />
+      <el-table-column label="操作" align="center" width="200">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit',scope.row)" v-hasPermi="['work:banner:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:banner:edit']">修改</el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:banner:remove']">删除</el-button>
         </template>
       </el-table-column>
       <template slot="empty">
-          <el-empty></el-empty>
+        <el-empty></el-empty>
       </template>
     </el-table>
-    <pagination v-if="response.total>0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
   </div>
 </template>
 
 <script>
-import edit from './edit'
+import edit from './edit';
 export default {
-  name: "Banner",
+  name: 'Banner',
   data() {
     return {
       ids: [],
-      showSearch:true,
+      showSearch: true,
       response: {},
+      columnList: [],
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        title: null,
-        pic: null,
-        types: null,
-        contentId: null,
-        contentTitle: null,
-        state: null,
-        orderNum: null,
-        orderByColumn: 'id',
-        isAsc: 'desc'
+        orderByColumn: 'order_num',
+        isAsc: 'asc'
       }
     };
   },
@@ -81,8 +59,8 @@ export default {
   },
   methods: {
     getList() {
-      this.ajax({ url: '/work/banner/list', data: this.queryParams }).then(response => {
-            this.response = response;
+      this.ajax({ url: '/work/banner/list', data: this.queryParams }).then((response) => {
+        this.response = response;
       });
     },
     handleQuery() {
@@ -90,28 +68,28 @@ export default {
       this.getList();
     },
     resetQuery() {
-      this.resetForm("queryForm");
+      this.resetForm('queryForm');
       this.handleQuery();
     },
     selects(rows) {
-      this.ids = rows.map(item => item.id)
+      this.ids = rows.map((item) => item.id);
     },
     op(tag, row) {
-          if (tag == 'add') {
-            this.iframe({ obj: edit, param: {}, title:'新增',width: '45%', height: '55%'});
-          }
-          if (tag == 'edit') {
-              const id = row.id || this.ids[0];
-              this.iframe({ obj: edit, param: {id: id}, title:'编辑',width: '50%', height: '50%'});
-          }
+      if (tag == 'add') {
+        this.iframe({ obj: edit, param: {}, title: '新增', width: '35%', height: '45%' });
+      }
+      if (tag == 'edit') {
+        const id = row.id || this.ids[0];
+        this.iframe({ obj: edit, param: { id: id}, title: '编辑', width: '35%', height: '45%' });
+      }
     },
     del(row) {
-        this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
-        this.get({ url: '/work/banner/remove/' + (row.id || this.ids) }).then(response => {
-                this.$modal.msgSuccess('删除成功');
-                this.getList();
-            });
+      this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
+        this.get({ url: '/work/banner/remove/' + (row.id || this.ids) }).then((response) => {
+          this.$modal.msgSuccess('删除成功');
+          this.getList();
         });
+      });
     }
   }
 };

+ 107 - 0
admin-ui/src/views/work/banner/select_url.vue

@@ -0,0 +1,107 @@
+<template>
+  <div class="cmain">
+    <el-form :model="queryParams" ref="queryForm" @submit.native.prevent :inline="true" label-width="auto">
+      <el-form-item label="标题" prop="title">
+        <el-input v-model="queryParams.title" placeholder="请输入标题" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    <el-table :data="response.rows" border :key="key" @row-click="select">
+      <el-table-column width="55" align="center">
+        <template slot-scope="scope">
+          <el-checkbox :checked="scope.row.check"></el-checkbox>
+        </template>
+      </el-table-column>
+      <el-table-column label="标题" prop="title" />
+      <el-table-column label="创建时间" align="center" prop="createTime" width="200" />
+      <template slot="empty">
+        <el-empty></el-empty>
+      </template>
+    </el-table>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+    <div class="mfooter">
+      <el-button type="primary" @click="setSelect()" :disabled="!form.contentId">确 定</el-button>
+      <el-button @click="$layer.close(layerid)">取 消</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'selectUrl',
+  data() {
+    return {
+      columnList: [],
+      response: {},
+      form: {},
+      key: true, //解决el-table 表体数据发生变化时,未重新渲染问题
+      queryParams: {
+        pageNum: 1,
+        pageSize: 8,
+        state: 0,
+        title: null
+      }
+    };
+  },
+  props: {
+    param: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    layerid: {
+      type: String
+    }
+  },
+  watch: {
+    'queryParams.columnId'(val) {
+      this.getList();
+    }
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.get({ url: '/work/notice/list', data: this.queryParams }).then((response) => {
+        this.response = response;
+      });
+    },
+    //选择栏目
+    handleChange(value) {
+      this.queryParams.columnId = value[value.length - 1]; //栏目id
+    },
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    resetQuery() {
+      this.resetForm('queryForm');
+      this.handleQuery();
+    },
+    select(row) {
+      this.response.rows.forEach((item) => {
+        item.check = false;
+      });
+      row.check = true;
+      this.key = !this.key;
+      this.form.contentId = row.id;
+      this.form.contentTitle = row.title;
+    },
+    setSelect() {
+      this.$parent.form.contentTitle = this.form.contentTitle;
+      this.$parent.form.contentId = this.form.contentId;
+      this.$layer.close(this.layerid);
+    }
+  }
+};
+</script>
+<style lang="scss">
+.el-table tr {
+  cursor: pointer;
+}
+</style>

+ 44 - 46
admin-ui/src/views/work/notice/edit.vue

@@ -1,25 +1,31 @@
 <template>
   <div class="cmain">
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-form-item label="标题" prop="title">
-          <el-input v-model="form.title" placeholder="请输入标题" clearable :disabled="param.readonly" maxlength="20" show-word-limit />
-        </el-form-item>
-        <el-form-item label="是否置顶" prop="top">
-          <el-radio-group v-model="form.top" :disabled="param.readonly">
-            <el-radio :label="1">是</el-radio>
-            <el-radio :label="0">否</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="状态" prop="state">
-          <el-radio-group v-model="form.state" :disabled="param.readonly">
-            <el-radio :label="1">启用</el-radio>
-            <el-radio :label="0">停用</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="内容" prop="contents">
-          <editor v-model="form.contents" placeholder="请输入内容" :readonly="param.readonly"></editor>
-        </el-form-item>
-      </el-form>
+    <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+      <el-form-item label="通知标题" prop="title">
+        <el-input v-model="form.title" placeholder="请输入标题" clearable maxlength="30" show-word-limit />
+      </el-form-item>
+      <el-form-item label="通知内容" prop="contents">
+        <editor v-model="form.contents" placeholder="请输入内容"></editor>
+      </el-form-item>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="通知状态" prop="state">
+            <el-select v-model="form.state" placeholder="请选择">
+              <el-option label="正常" :value="0"></el-option>
+              <el-option label="停用" :value="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="通知置顶" prop="top">
+            <el-select v-model="form.top" placeholder="请选择">
+              <el-option label="否" :value="0"></el-option>
+              <el-option label="是" :value="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
     <div class="mfooter">
       <el-button type="primary" @click="submitForm">确 定</el-button>
       <el-button @click="$layer.close(layerid)">取 消</el-button>
@@ -31,20 +37,12 @@
 export default {
   data() {
     return {
-      form: {},
+      form: { state: 0, top: 0 },
       rules: {
-        title: [
-          { required: true, message: "标题不能为空", trigger: "blur" }
-        ],
-        contents: [
-          { required: true, message: "内容不能为空", trigger: "blur" }
-        ],
-        top: [
-          { required: true, message: "是否置顶不能为空", trigger: "blur" }
-        ],
-        state: [
-          { required: true, message: "状态不能为空", trigger: "blur" }
-        ],
+        title: [{ required: true, message: '标题不能为空', trigger: 'blur' }],
+        contents: [{ required: true, message: '内容不能为空', trigger: 'blur' }],
+        top: [{ required: true, message: '是否置顶不能为空', trigger: 'blur' }],
+        state: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
       }
     };
   },
@@ -57,31 +55,31 @@ export default {
     },
     layerid: {
       type: String
-    },
+    }
   },
   mounted() {
     if (this.param.id) {
-      this.ajax({ url: '/work/notice/detail/' + this.param.id }).then(response => {
+      this.ajax({ url: '/work/notice/detail/' + this.param.id }).then((response) => {
         this.form = response.data;
       });
     }
   },
   methods: {
     submitForm() {
-      this.$refs["form"].validate(valid => {
+      this.$refs['form'].validate((valid) => {
         if (valid) {
           if (this.form.id) {
-              this.ajax({method: 'post',url: '/work/notice/edit', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("修改成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-              });
+            this.ajax({ method: 'post', url: '/work/notice/edit', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('修改成功');
+              this.$layer.close(this.layerid);
+              this.$parent.getList();
+            });
           } else {
-              this.ajax({method: 'post',url: '/work/notice/add', data: this.form }).then(response => {
-                  this.$modal.msgSuccess("新增成功");
-                  this.$layer.close(this.layerid);
-                  this.$parent.getList();
-               });
+            this.ajax({ method: 'post', url: '/work/notice/add', data: this.form }).then((response) => {
+              this.$modal.msgSuccess('新增成功');
+              this.$layer.close(this.layerid);
+              this.$parent.getList();
+            });
           }
         }
       });

+ 42 - 98
admin-ui/src/views/work/notice/index.vue

@@ -2,133 +2,82 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" @submit.native.prevent v-show="showSearch">
       <el-form-item label="标题" prop="title">
-        <el-input v-model="queryParams.title" placeholder="请输入标题"  @keyup.enter.native="handleQuery" clearable class="inp"/>
-      </el-form-item>
-      <el-form-item label="是否置顶" prop="top">
-        <el-select v-model="queryParams.top" placeholder="请选择">
-          <el-option
-            v-for="item in topOpt"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value">
-          </el-option>
-        </el-select>
+        <el-input v-model="queryParams.title" placeholder="请输入标题" @keyup.enter.native="handleQuery" clearable/>
       </el-form-item>
       <el-form-item label="状态" prop="state">
-        <el-select v-model="queryParams.state" placeholder="请选择">
-          <el-option
-            v-for="item in stateOpt"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value">
-          </el-option>
+        <el-select v-model="queryParams.state" placeholder="状态" class="se" clearable>
+          <el-option value="0" label="启用"></el-option>
+          <el-option value="1" label="禁用"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="创建时间" prop="dateRange">
-        <el-date-picker
-          v-model="queryParams.dateRange"
-          type="daterange"
-          range-separator="至"
-          value-format="yyyy-MM-dd"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          @change="changeDate"
-        >
-        </el-date-picker>
-      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
     <el-row :gutter="10" class="mb8">
-        <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:notice:add']">新增</el-button>
-        <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit',ids)" v-hasPermi="['work:notice:edit']">修改</el-button>
-        <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:notice:remove']">删除{{ids.length>0?'('+ids.length+')':''}}</el-button>
-        <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <el-button type="primary" icon="el-icon-plus" :disabled="ids.length > 0" @click="op('add')" v-hasPermi="['work:notice:add']">新增</el-button>
+      <el-button type="success" icon="el-icon-edit" :disabled="ids.length != 1" @click="op('edit', ids)" v-hasPermi="['work:notice:edit']">修改</el-button>
+      <el-button type="danger" icon="el-icon-delete" :disabled="ids.length == 0" @click="del" v-hasPermi="['work:notice:remove']">删除{{ ids.length > 0 ? '(' + ids.length + ')' : '' }}</el-button>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table :data="response.rows" border @selection-change="selects" height="calc(100vh - 270px)">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="标题" align="center" prop="title" />
-      <el-table-column label="是否置顶" align="center" prop="top" >
+      <el-table-column label="通知标题" align="left" prop="title" />
+      <el-table-column label="是否置顶" align="center" prop="top" width="140">
         <template slot-scope="scope">
-          <el-tag v-if="scope.row.top">是</el-tag>
-          <el-tag v-else type="danger">否</el-tag>
+          <el-tag type="success" v-if="scope.row.top == 1">是</el-tag>
+          <el-tag type="info" v-else>否</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="状态" align="center" prop="state" >
+      <el-table-column label="通知状态" align="center" prop="state" width="140">
         <template slot-scope="scope">
-          <el-tag v-if="scope.row.state">启用</el-tag>
-          <el-tag v-else type="danger">停用</el-tag>
+          <el-tag type="success" v-if="scope.row.state == 0">启用</el-tag>
+          <el-tag type="danger" v-if="scope.row.state == 1">停用</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="创建人" align="center" prop="createBy" />
-      <el-table-column label="创建时间" align="center" prop="createTime" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="创建时间" align="center" prop="createTime" width="200" />
+      <el-table-column label="操作" align="center" width="220">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-view" @click="op('detail', scope.row)" v-hasPermi="['work:notice:list']">查看</el-button>
-          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit',scope.row)" v-hasPermi="['work:notice:edit']">修改</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="op('edit', scope.row)" v-hasPermi="['work:notice:edit']">修改</el-button>
           <el-button size="mini" type="text" icon="el-icon-delete" @click="del(scope.row)" v-hasPermi="['work:notice:remove']">删除</el-button>
         </template>
       </el-table-column>
       <template slot="empty">
-          <el-empty></el-empty>
+        <el-empty></el-empty>
       </template>
     </el-table>
-    <pagination v-if="response.total>0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
+    <pagination v-if="response.total > 0" :total="response.total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
   </div>
 </template>
 
 <script>
-import edit from './edit.vue'
+import edit from './edit.vue';
 export default {
-  name: "Notice",
+  name: 'Notice',
   data() {
     return {
       ids: [],
-      showSearch:true,
+      showSearch: true,
       response: {},
-      topOpt: [{
-        value: '0',
-        label: '未置顶'
-      }, {
-        value: '1',
-        label: '已置顶'
-      }],
-      stateOpt: [{
-        value: '0',
-        label: '停用'
-      }, {
-        value: '1',
-        label: '启用'
-      }],
       queryParams: {
         pageNum: 1,
         pageSize: 10,
         title: null,
-        contents: null,
-        top: null,
         state: null,
         orderByColumn: 'id',
-        isAsc: 'desc',
-        dateRange:[],
-        beginTime:null,
-        endTime:null,
-      },
+        isAsc: 'desc'
+      }
     };
   },
   created() {
     this.getList();
   },
   methods: {
-    changeDate(data){
-      this.queryParams.beginTime = data[0]
-      this.queryParams.endTime = data[1]
-    },
     getList() {
-      this.ajax({ url: '/work/notice/list', data: this.queryParams }).then(response => {
-            this.response = response;
+      this.ajax({ url: '/work/notice/list', data: this.queryParams }).then((response) => {
+        this.response = response;
       });
     },
     handleQuery() {
@@ -136,34 +85,29 @@ export default {
       this.getList();
     },
     resetQuery() {
-      this.queryParams.beginTime = null
-      this.queryParams.endTime = null
-      this.resetForm("queryForm");
+      this.resetForm('queryForm');
       this.handleQuery();
     },
     selects(rows) {
-      this.ids = rows.map(item => item.id)
+      this.ids = rows.map((item) => item.id);
     },
     op(tag, row) {
-          if (tag == 'add') {
-            this.iframe({ obj: edit, param: {}, title:'新增',width: '45%', height: '55%'});
-          }
-          if (tag == 'edit') {
-              const id = row.id || this.ids[0];
-              this.iframe({ obj: edit, param: {id: id}, title:'编辑',width: '50%', height: '50%'});
-          }
-          if (tag == 'detail') {
-            const id = row.id || this.ids[0];
-            this.iframe({ obj: edit, param: {id: id,readonly:true}, title:'详情',width: '50%', height: '50%'});
-          }
+      if (tag == 'add') {
+        this.iframe({ obj: edit, param: {}, title: '新增', width: '58%', height: '75%' });
+        return;
+      }
+      const id = row.id || this.ids[0];
+      if (tag == 'edit') {
+        this.iframe({ obj: edit, param: { id: id }, title: '编辑', width: '58%', height: '75%' });
+      }
     },
     del(row) {
-        this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
-        this.get({ url: '/work/notice/remove/' + (row.id || this.ids) }).then(response => {
-                this.$modal.msgSuccess('删除成功');
-                this.getList();
-            });
+      this.$confirm('是否确认删除选中数据?', '警告', { type: 'warning' }).then(() => {
+        this.get({ url: '/work/notice/remove/' + (row.id || this.ids) }).then((response) => {
+          this.$modal.msgSuccess('删除成功');
+          this.getList();
         });
+      });
     }
   }
 };

+ 2 - 23
ruoyi-admin/src/main/java/com/ruoyi/web/work/api/Api_NoticeController.java

@@ -1,21 +1,10 @@
 package com.ruoyi.web.work.api;
 
-import com.ruoyi.common.annotation.Anonymous;
-import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.web.work.domain.Notice;
 import com.ruoyi.web.work.service.INoticeService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Arrays;
-import java.util.List;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * 通知公告
@@ -24,17 +13,7 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/app/notice")
-@Api( tags = "通知公告 小程序")
 public class Api_NoticeController extends BaseController {
     @Autowired
     private INoticeService noticeService;
-
-
-    @GetMapping
-    @ApiOperation( value = "获取通知")
-    @Anonymous
-    public AjaxResult queryList(){
-        List<Notice> noticeList = noticeService.queryList();
-        return AjaxResult.success(noticeList);
-    }
 }

+ 13 - 32
ruoyi-admin/src/main/java/com/ruoyi/web/work/controller/NoticeController.java

@@ -1,25 +1,20 @@
 package com.ruoyi.web.work.controller;
 
-import java.util.Arrays;
-import java.util.List;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.web.work.domain.Notice;
 import com.ruoyi.web.work.service.INoticeService;
-import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * 通知公告
@@ -50,29 +45,15 @@ public class NoticeController extends BaseController {
     @PreAuthorize("@ss.hasPermi('work:notice:add')")
     @Log(title = "通知公告", businessType = BusinessType.INSERT)
     @PostMapping("/add")
-    public AjaxResult add(@RequestBody Notice notice){
-        List<Notice> noticeList = noticeService.selectList(new Notice().setTitle(notice.getTitle()));
-        if(notice.getTitle().length() > 20){
-            return AjaxResult.error("标题长度大于20");
-        }
-        if (!noticeList.isEmpty()){
-            return AjaxResult.error("该标题已存在!");
-        }
-        return toAjax(noticeService.save(notice));
+    public AjaxResult add(@Validated @RequestBody Notice notice){
+        return noticeService.add(notice);
     }
 
     @PreAuthorize("@ss.hasPermi('work:notice:edit')")
     @Log(title = "通知公告", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
-    public AjaxResult edit(@RequestBody Notice notice){
-        if(notice.getTitle().length() > 20){
-            return AjaxResult.error("标题长度大于20");
-        }
-        List<Notice> noticeList = noticeService.selectisEmpty(new Notice().setTitle(notice.getTitle()));
-        noticeList.remove(noticeService.getById(notice.getId()));
-        if (!noticeList.isEmpty()){
-            return AjaxResult.error("该标题已存在!");
-        }
+    public AjaxResult edit(@Validated @RequestBody Notice notice){
+        notice.setContents(notice.getContents().replace("/dev-api", "").replace("/prod-api", ""));
         return toAjax(noticeService.updateById(notice));
     }
 

+ 13 - 16
ruoyi-admin/src/main/java/com/ruoyi/web/work/domain/Notice.java

@@ -1,15 +1,18 @@
 package com.ruoyi.web.work.domain;
 
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModel;
-import lombok.Data;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.Date;
+
 /**
  * @author 高伟森
  * @date 2024-04-18
@@ -17,21 +20,25 @@ import lombok.experimental.Accessors;
 @Data
 @TableName(value = "tb_notice")
 @Accessors(chain = true)
-@ApiModel( value = "通知公告 实体对象")
 public class Notice{
     private static final long serialVersionUID = 1L;
 
     private Long id;
 
+    @NotBlank(message = "通知标题不能为空")
+    @Size(max = 30, message = "通知标题长度不能超过30个字符")
     @ApiModelProperty(value = "标题")
     private String title;
 
+    @NotBlank(message = "通知内容不能为空")
     @ApiModelProperty(value = "内容")
     private String contents;
 
+    @NotNull(message = "是否置顶不能为空")
     @ApiModelProperty(value = "是否置顶")
     private Integer top;
 
+    @NotNull(message = "状态不能为空")
     @ApiModelProperty(value = "状态:0=正常,1=停用")
     private Integer state;
 
@@ -48,14 +55,4 @@ public class Notice{
     @TableField(fill = FieldFill.UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
-
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @TableField(exist = false)
-    private String beginTime;
-
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @TableField(exist = false)
-    private String endTime;
-
-
 }

+ 9 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/work/mapper/NoticeMapper.java

@@ -1,8 +1,11 @@
 package com.ruoyi.web.work.mapper;
 
-import java.util.List;
-import com.ruoyi.web.work.domain.Notice;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.web.work.domain.Notice;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * @author 高伟森
@@ -10,6 +13,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface NoticeMapper extends BaseMapper<Notice> {
     List<Notice> selectList(Notice notice);
-    List<Notice> selectisEmpty(Notice notice);
+
     List<Notice> queryList();
+
+    @Select("SELECT * FROM tb_notice WHERE title = #{title}")
+    Notice selectByTitle(@Param("title") String title);
 }

+ 5 - 4
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/INoticeService.java

@@ -1,8 +1,10 @@
 package com.ruoyi.web.work.service;
 
-import java.util.List;
-import com.ruoyi.web.work.domain.Notice;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.web.work.domain.Notice;
+
+import java.util.List;
 
 /**
  * @author 高伟森
@@ -10,6 +12,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface INoticeService extends IService<Notice>{
     List<Notice> selectList(Notice notice);
-    List<Notice> selectisEmpty(Notice notice);
-    List<Notice> queryList();
+    AjaxResult add(Notice notice);
 }

+ 17 - 12
ruoyi-admin/src/main/java/com/ruoyi/web/work/service/impl/NoticeServiceImpl.java

@@ -1,12 +1,14 @@
 package com.ruoyi.web.work.service.impl;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.ruoyi.web.work.mapper.NoticeMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.web.work.domain.Notice;
+import com.ruoyi.web.work.mapper.NoticeMapper;
 import com.ruoyi.web.work.service.INoticeService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * @author 高伟森
@@ -23,12 +25,15 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> impleme
     }
 
     @Override
-    public List<Notice> selectisEmpty(Notice notice) {
-        return noticeMapper.selectisEmpty(notice);
-    }
-
-    @Override
-    public List<Notice> queryList() {
-        return noticeMapper.queryList();
+    public AjaxResult add(Notice notice) {
+        Notice bean = noticeMapper.selectByTitle(notice.getTitle());
+        notice.setContents(notice.getContents().replace("/dev-api", "").replace("/prod-api", ""));
+        if (bean != null) {
+            return AjaxResult.error("该标题已存在");
+        }
+        if (!save(notice)) {
+            return AjaxResult.error("新增通知失败");
+        }
+        return AjaxResult.success();
     }
 }

+ 0 - 21
ruoyi-admin/src/main/resources/mapper/work/NoticeMapper.xml

@@ -8,28 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select * from tb_notice
         <where>
             <if test="title != null  and title != ''"> and title like concat('%', #{title}, '%')</if>
-            <if test="contents != null  and contents != ''"> and contents like concat('%', #{contents}, '%')</if>
-            <if test="top != null "> and top = #{top}</if>
             <if test="state != null "> and state = #{state}</if>
-            <if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
-                and (create_time between #{beginTime} and #{endTime})
-            </if>
         </where>
     </select>
-
-    <select id="selectisEmpty" resultType="com.ruoyi.web.work.domain.Notice">
-        select * from tb_notice
-        <where>
-            <if test="title != null  and title != ''"> and title =  #{title}</if>
-        </where>
-    </select>
-
-    <select id="queryList" resultType="com.ruoyi.web.work.domain.Notice">
-        select * from tb_notice
-        <where>
-            and state = 1
-        </where>
-        ORDER BY top DESC,create_time DESC
-    </select>
-
 </mapper>