From a8a933cdca2aab3c0b835428697a104a26328375 Mon Sep 17 00:00:00 2001 From: xiezhijun <15270898033@163.com> Date: Sat, 31 Jul 2021 17:35:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=A3=80=E7=B4=A2=E8=AF=AD?= =?UTF-8?q?=E5=8F=A5=E4=BF=AE=E6=94=B9=EF=BC=8C=E6=96=B0=E5=A2=9E=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=97=B6=E5=8A=A0=E4=B8=8A=E5=85=B3=E9=94=AE=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/domain/SysRecipesTemplate.java | 4 ++ .../custom/SysRecipesTemplateMapper.xml | 26 +++++++-- .../src/components/TemplateDialog/index.vue | 56 ++++++++++++++++++- .../RecommendView/TemplateView/index.vue | 40 ++++++++++--- .../views/custom/recipesTemplate/index.vue | 51 +++++++++++++++-- 5 files changed, 160 insertions(+), 17 deletions(-) diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesTemplate.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesTemplate.java index 852575c92..22bdae692 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesTemplate.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysRecipesTemplate.java @@ -1,6 +1,7 @@ package com.stdiet.custom.domain; import com.fasterxml.jackson.annotation.JsonFormat; +import com.stdiet.common.annotation.Excel; import lombok.Data; import java.util.Date; @@ -21,6 +22,9 @@ public class SysRecipesTemplate { Long planId; + /** 关键词,使用 , 隔开 */ + private String keyWord; + String remark; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesTemplateMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesTemplateMapper.xml index 98d612f0d..052247487 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesTemplateMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesTemplateMapper.xml @@ -10,6 +10,7 @@ <result property="planId" column="plan_id"/> <result property="nutritionistId" column="nutritionist_id"/> <result property="nutriAssisId" column="nutri_assis_id"/> + <result property="keyWord" column="key_word" /> <result property="remark" column="remark"/> <result property="createTime" column="create_time"/> <result property="createBy" column="create_by"/> @@ -23,7 +24,7 @@ </resultMap> <select id="selectRecipesTemplateListByCondition" parameterType="SysRecipesTemplate" resultMap="SysRecipesTemplateResult"> - select srt.id, srt.name, srt.nutritionist_id, srt.nutri_assis_id, srt.remark, srt.update_time, + select srt.id, srt.name, srt.nutritionist_id, srt.nutri_assis_id, srt.key_word, srt.remark, srt.update_time, srt.create_time, srt.update_by, srt.create_by, srt.plan_id, srp.recipes_id, srp.review_status, su_nutritionist.nick_name as nutritionist, su_nutritionist_assis.nick_name as nutritionist_assis from sys_recipes_template srt @@ -31,19 +32,31 @@ left join sys_user su_nutritionist on su_nutritionist.user_id = srt.nutritionist_id and su_nutritionist.del_flag = 0 left join sys_user su_nutritionist_assis on su_nutritionist_assis.user_id = srt.nutri_assis_id and su_nutritionist_assis.del_flag = 0 where srt.del_flag = 0 - <if test="keys != null">and + <if test="keys != null and keys.length > 0">and <foreach collection="keys" item="key" separator="and" open="(" close=")"> - srt.name like concat('%', #{key}, '%') or srt.remark like concat('%', #{key}, '%') + ( + srt.name like concat('%', #{key}, '%') or srt.remark like concat('%', #{key}, '%') + or FIND_IN_SET(#{key}, srt.key_word) + ) </foreach> </if> <if test="nutriAssisId != null ">and srt.nutri_assis_id = #{nutriAssisId}</if> <if test="nutritionistId != null ">and srt.nutritionist_id = #{nutritionistId}</if> <if test="reviewStatus != null ">and srp.review_status = #{reviewStatus}</if> - order by srt.id desc + order by + <if test="keys != null and keys.length > 0"> + FIND_IN_SET(srt.id, ( + SELECT group_concat(t.id Separator ',') from sys_recipes_template t WHERE + <foreach collection="keys" item="key" separator="and" open="(" close=")"> + FIND_IN_SET(#{key}, srt.key_word) + </foreach> + )) desc, + </if> + srt.id desc </select> <select id="getRecipesTemplateById" parameterType="Long" resultType="SysRecipesTemplate"> - select srt.id, srt.name, srt.nutritionist_id as nutritionistId, srt.nutri_assis_id as nutriAssisId, srt.remark, srt.update_time as updateTime, + select srt.id, srt.name, srt.nutritionist_id as nutritionistId, srt.nutri_assis_id as nutriAssisId, srt.key_word, srt.remark, srt.update_time as updateTime, srt.create_time as createTime, srt.update_by as updateBy, srt.create_by as createBy, srt.plan_id as planId, su_nutritionist.nick_name as nutritionist, su_nutritionist_assis.nick_name as nutriAssis from sys_recipes_template srt @@ -59,6 +72,7 @@ <if test="planId != null">plan_id,</if> <if test="nutriAssisId != null">nutri_assis_id,</if> <if test="nutritionistId != null">nutritionist_id,</if> + <if test="keyWord != null">key_word,</if> <if test="createTime != null">create_time,</if> <if test="createBy != null">create_by,</if> <if test="updateTime != null">update_time,</if> @@ -70,6 +84,7 @@ <if test="planId != null">#{planId},</if> <if test="nutriAssisId != null">#{nutriAssisId},</if> <if test="nutritionistId != null">#{nutritionistId},</if> + <if test="keyWord != null">#{keyWord},</if> <if test="createTime != null">#{createTime},</if> <if test="createBy != null">#{createBy},</if> <if test="updateTime != null">#{updateTime},</if> @@ -84,6 +99,7 @@ <if test="name != null">name = #{name},</if> <if test="nutriAssisId != null">nutri_assis_id = #{nutriAssisId},</if> <if test="nutritionistId != null">nutritionist_id = #{nutritionistId},</if> + <if test="keyWord != null">key_word = #{keyWord},</if> <if test="createTime != null">create_time = #{createTime},</if> <if test="createBy != null">create_by = #{createBy},</if> <if test="updateTime != null">update_time = #{updateTime},</if> diff --git a/stdiet-ui/src/components/TemplateDialog/index.vue b/stdiet-ui/src/components/TemplateDialog/index.vue index 3b53f2f57..8c700337a 100644 --- a/stdiet-ui/src/components/TemplateDialog/index.vue +++ b/stdiet-ui/src/components/TemplateDialog/index.vue @@ -29,6 +29,27 @@ ></el-option> </el-select> </el-form-item> + <el-form-item label="关键词" prop="keyWordArray" label-width="100px"> + <el-select + v-model="form.keyWordArray" + multiple + filterable + clearable + allow-create + default-first-option + placeholder="请创建模板关键词,用于模板检索,按回车创建" + style="width:100%" + > + <el-option + v-for="dict in keyOptions" + :key="dict.dictValue" + :label="dict.dictLabel" + :value="dict.dictValue" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="备注" prop="remark" label-width="100px"> <el-input v-model="form.remark" @@ -58,6 +79,8 @@ export default { nutriAssisId: null, nutritionistId: null, remark: null, + keyWordArray: null, + keyWord: null }, // 表单校验 rules: { @@ -70,6 +93,16 @@ export default { ], }, visible: false, + keyOptions:[ + { + dictLabel: "1-7", + dictValue: "1-7" + }, + { + dictLabel: "高血压", + dictValue: "高血压" + } + ] }; }, computed: { @@ -87,6 +120,7 @@ export default { this.reset(); if (data) { this.title = "修改模板"; + data.keyWordArray = (data.keyWord != null && data.keyWord != "") ? data.keyWord.split(",") : null; this.form = data; } else { this.title = "创建模板"; @@ -94,7 +128,9 @@ export default { }, submitForm() { this.$refs["form"].validate((valid) => { - if (valid) { + if (valid && this.checkFormat(this.form.keyWordArray)) { + this.form.keyWord = (this.form.keyWordArray != null && this.form.keyWordArray.length > 0) ? this.form.keyWordArray.join(",") : null; + this.form.keyWord = this.form.keyWord.replace(",",","); this.$emit("onConfirm", this.form); this.visible = false; } @@ -108,12 +144,30 @@ export default { nutriAssisId: null, nutritionistId: null, remark: null, + keyWordArray: null, + keyWord: null }; this.resetForm("form"); }, cancel() { this.visible = false; }, + checkFormat(keyWordArray){ + let flag = true; + let msg = ""; + if(keyWordArray != null && keyWordArray.length > 0){ + keyWordArray.forEach((item,index) => { + if(item.indexOf(",") != -1 || item.indexOf(",") != -1 || item.indexOf(" ") != -1){ + msg = "关键词中不能含有逗号和空格"; + flag = false; + } + }); + } + if(!flag){ + this.msgError(msg); + } + return flag; + } }, }; </script> diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecommendView/TemplateView/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecommendView/TemplateView/index.vue index d8cdee2f9..7eaf859ec 100644 --- a/stdiet-ui/src/views/custom/recipesBuild/RecommendView/TemplateView/index.vue +++ b/stdiet-ui/src/views/custom/recipesBuild/RecommendView/TemplateView/index.vue @@ -8,11 +8,22 @@ <!-- 筛选 --> <el-form :model="queryParams" ref="queryForm" :inline="true"> <el-form-item label="搜索内容" prop="name"> - <el-input - v-model="queryParams.name" - placeholder="请输入模板名称或备注" - @keyup.enter.native="handleQuery" - /> + <el-select + v-model="queryParams.keys" + multiple + filterable + allow-create + clearable + default-first-option + @keyup.enter.native="handleQuery" + placeholder="请输入或选择关键字"> + <!--<el-option + v-for="item in options" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option>--> + </el-select> </el-form-item> <el-form-item label="营养师" prop="nutritionistId"> <el-select @@ -67,7 +78,16 @@ <el-table-column label="模板名称" align="center" prop="name" /> <el-table-column label="营养师" align="center" prop="nutritionist" /> <el-table-column label="营养师助理" align="center" prop="nutriAssis" /> - <el-table-column label="备注" prop="remark" align="center" /> + <el-table-column label="关键词" align="center" prop="keyWord"> + <template slot-scope="scope"> + <AutoHideMessage :data="scope.row.keyWord" :maxLength="20"></AutoHideMessage> + </template> + </el-table-column> + <el-table-column label="备注" prop="remark" align="center" > + <template slot-scope="scope"> + <AutoHideMessage :data="scope.row.remark" :maxLength="20"></AutoHideMessage> + </template> + </el-table-column> </el-table> <pagination @@ -83,6 +103,7 @@ <script> import { listRecipesTemplate } from "@/api/custom/recipesTemplate"; import { mapState } from "vuex"; +import AutoHideMessage from "@/components/AutoHideMessage"; export default { name: "TemplateView", data() { @@ -97,9 +118,13 @@ export default { pageNum: 1, pageSize: 10, reviewStatus: 2, + keys: null }, }; }, + components:{ + AutoHideMessage + }, props: ["view"], computed: { ...mapState({ @@ -119,6 +144,7 @@ export default { /** 重置按钮操作 */ resetQuery() { this.resetForm("queryForm"); + this.queryParams.keys = null; this.handleQuery(); }, handleOnBackClick() { @@ -132,7 +158,7 @@ export default { getList() { this.loading = true; const params = JSON.parse(JSON.stringify(this.queryParams)); - params.keys = (params.name || "").split(" "); + //params.keys = (params.name || "").split(" "); listRecipesTemplate(params).then((res) => { if (res.code === 200) { this.dataList = res.rows; diff --git a/stdiet-ui/src/views/custom/recipesTemplate/index.vue b/stdiet-ui/src/views/custom/recipesTemplate/index.vue index c3ef7d801..0c69d6fbd 100644 --- a/stdiet-ui/src/views/custom/recipesTemplate/index.vue +++ b/stdiet-ui/src/views/custom/recipesTemplate/index.vue @@ -7,11 +7,28 @@ v-show="showSearch" > <el-form-item label="搜索内容" prop="name"> - <el-input + <!--<el-input + clearable v-model="queryParams.name" placeholder="请输入模板名称或备注" @keyup.enter.native="handleQuery" - /> + />--> + <el-select + v-model="queryParams.keys" + multiple + filterable + allow-create + clearable + default-first-option + @keyup.enter.native="handleQuery" + placeholder="请输入或选择关键字"> + <!--<el-option + v-for="item in options" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option>--> + </el-select> </el-form-item> <el-form-item label="营养师" prop="nutritionistId"> <el-select @@ -116,13 +133,30 @@ prop="nutriAssisId" :formatter="nutriAssisIdFormat" /> + <el-table-column + label="关键词" + align="center" + width="200" + prop="kwyWordArray" + > + <!--<template slot-scope="scope"> + <AutoHideInfo :data="scope.row.keyWordArray" :line="2"> </AutoHideInfo> + </template>--> + <template slot-scope="scope"> + <AutoHideMessage :data="scope.row.keyWord" :maxLength="20"></AutoHideMessage> + </template> + </el-table-column> + <el-table-column label="备注" prop="remark" align="center" > + <template slot-scope="scope"> + <AutoHideMessage :data="scope.row.remark" :maxLength="20"></AutoHideMessage> + </template> + </el-table-column> <el-table-column label="创建时间" align="center" width="180" prop="createTime" /> - <el-table-column label="备注" prop="remark" align="center" /> <el-table-column label="操作" align="center" @@ -181,6 +215,8 @@ import { deleteRecipesTemplate, } from "@/api/custom/recipesTemplate"; import TemplateDialog from "@/components/TemplateDialog"; +import AutoHideInfo from "@/components/AutoHideInfo"; +import AutoHideMessage from "@/components/AutoHideMessage"; import { mapGetters, mapState } from "vuex"; export default { @@ -210,6 +246,7 @@ export default { nutritionistId: null, nutriAssisId: null, reviewStatus: null, + keys: null }, open: false, title: "", @@ -231,6 +268,8 @@ export default { }, components: { TemplateDialog, + AutoHideInfo, + AutoHideMessage // "order-dialog": OrderDetail, // body_sign_dialog: BodySignDetail, }, @@ -270,8 +309,11 @@ export default { getList() { this.loading = true; const params = JSON.parse(JSON.stringify(this.queryParams)); - params.keys = params.name ? params.name.split(" ") : null; + //params.keys = params.name ? params.name.split(" ") : null; listRecipesTemplate(params).then((response) => { + response.rows.forEach((item,index) => { + item.keyWordArray = (item.keyWord != null && item.keyWord != "") ? item.keyWord.split(",") : []; + }); this.recipesTemplateList = response.rows; this.total = response.total; this.loading = false; @@ -289,6 +331,7 @@ export default { /** 重置按钮操作 */ resetQuery() { this.resetForm("queryForm"); + this.queryParams.keys = null; this.handleQuery(); }, getReviewStatusName(status) {