diff --git a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysRecipesPlanController.java b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysRecipesPlanController.java index d3383d550..4980da27f 100644 --- a/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysRecipesPlanController.java +++ b/stdiet-admin/src/main/java/com/stdiet/web/controller/custom/SysRecipesPlanController.java @@ -1,19 +1,19 @@ package com.stdiet.web.controller.custom; -import java.util.List; - -import com.stdiet.common.utils.StringUtils; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; import com.stdiet.common.annotation.Log; import com.stdiet.common.core.controller.BaseController; import com.stdiet.common.core.domain.AjaxResult; +import com.stdiet.common.core.page.TableDataInfo; import com.stdiet.common.enums.BusinessType; +import com.stdiet.common.utils.StringUtils; +import com.stdiet.common.utils.poi.ExcelUtil; import com.stdiet.custom.domain.SysRecipesPlan; import com.stdiet.custom.service.ISysRecipesPlanService; -import com.stdiet.common.utils.poi.ExcelUtil; -import com.stdiet.common.core.page.TableDataInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 食谱计划Controller @@ -23,8 +23,7 @@ import com.stdiet.common.core.page.TableDataInfo; */ @RestController @RequestMapping("/recipes/recipesPlan") -public class SysRecipesPlanController extends BaseController -{ +public class SysRecipesPlanController extends BaseController { @Autowired private ISysRecipesPlanService sysRecipesPlanService; @@ -33,25 +32,29 @@ public class SysRecipesPlanController extends BaseController */ @PreAuthorize("@ss.hasPermi('recipes:plan:list')") @GetMapping("/list") - public TableDataInfo list(SysRecipesPlan sysRecipesPlan) - { + public TableDataInfo list(SysRecipesPlan sysRecipesPlan) { startPage(); List<SysRecipesPlan> list = sysRecipesPlanService.selectPlanListByCondition(sysRecipesPlan); - for(SysRecipesPlan plan : list){ - if(StringUtils.isNotEmpty(plan.getPhone())){ + for (SysRecipesPlan plan : list) { + if (StringUtils.isNotEmpty(plan.getPhone())) { plan.setHidePhone(StringUtils.hiddenPhoneNumber(plan.getPhone())); } } return getDataTable(list); } + @PreAuthorize("@ss.hasPermi('recipes:plan:add')") + @PostMapping("/add") + public AjaxResult add(@RequestBody SysRecipesPlan sysRecipesPlan) { + return toAjax(sysRecipesPlanService.insertSysRecipesPlan(sysRecipesPlan)); + } + /** * 根据订单查询完整食谱计划列表 */ @PreAuthorize("@ss.hasPermi('recipes:plan:list')") @GetMapping("/getAllPlanByOrderId") - public TableDataInfo getAllPlanByOrderId(SysRecipesPlan sysRecipesPlan) - { + public TableDataInfo getAllPlanByOrderId(SysRecipesPlan sysRecipesPlan) { startPage(); List<SysRecipesPlan> list = sysRecipesPlanService.selectPlanListByOrderId(sysRecipesPlan); return getDataTable(list); @@ -68,8 +71,7 @@ public class SysRecipesPlanController extends BaseController */ @PreAuthorize("@ss.hasPermi('recipes:plan:query')") @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) - { + public AjaxResult getInfo(@PathVariable("id") Long id) { return AjaxResult.success(sysRecipesPlanService.selectSysRecipesPlanById(id)); } @@ -79,8 +81,7 @@ public class SysRecipesPlanController extends BaseController @PreAuthorize("@ss.hasPermi('recipes:plan:edit')") @Log(title = "食谱计划", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody SysRecipesPlan sysRecipesPlan) - { + public AjaxResult edit(@RequestBody SysRecipesPlan sysRecipesPlan) { return toAjax(sysRecipesPlanService.updateSysRecipesPlan(sysRecipesPlan)); } @@ -90,11 +91,10 @@ public class SysRecipesPlanController extends BaseController @PreAuthorize("@ss.hasPermi('recipes:plan:export')") @Log(title = "食谱计划", businessType = BusinessType.EXPORT) @GetMapping("/export") - public AjaxResult export(SysRecipesPlan sysRecipesPlan) - { + public AjaxResult export(SysRecipesPlan sysRecipesPlan) { List<SysRecipesPlan> list = sysRecipesPlanService.selectPlanListByCondition(sysRecipesPlan); - for(SysRecipesPlan plan : list){ - if(StringUtils.isNotEmpty(plan.getPhone())){ + for (SysRecipesPlan plan : list) { + if (StringUtils.isNotEmpty(plan.getPhone())) { plan.setHidePhone(StringUtils.hiddenPhoneNumber(plan.getPhone())); } } diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomer.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomer.java index d97e1cd66..6ec60aca3 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomer.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomer.java @@ -39,6 +39,8 @@ public class SysCustomer extends BaseEntity @Excel(name = "进粉日期", width = 30, dateFormat = "yyyy-MM-dd") private Date fansTime; + private Integer fansChannel; + /** 邮箱 */ @Excel(name = "邮箱") private String email; diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysCustomerMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysCustomerMapper.xml index 2b3904328..9bf06d611 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysCustomerMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysCustomerMapper.xml @@ -13,6 +13,7 @@ <result property="payDate" column="pay_date" /> <result property="startDate" column="start_date" /> <result property="fansTime" column="fans_time" /> + <result property="fansChannel" column="fans_channel" /> <result property="purchaseNum" column="purchase_num" /> <result property="payTotal" column="pay_total" /> <result property="mainDietitian" column="main_dietitian" /> @@ -28,7 +29,7 @@ </resultMap> <sql id="selectSysCustomerVo"> - select id, name, phone, email, fans_time, address, pay_date, start_date, purchase_num, pay_total, main_dietitian, assistant_dietitian, after_dietitian, salesman, charge_person, follow_status, create_time, create_by, update_time, update_by from sys_customer + select id, name, phone, email, fans_time, fans_channel, address, pay_date, start_date, purchase_num, pay_total, main_dietitian, assistant_dietitian, after_dietitian, salesman, charge_person, follow_status, create_time, create_by, update_time, update_by from sys_customer </sql> <select id="selectSysCustomerList" parameterType="SysCustomer" resultMap="SysCustomerResult"> @@ -50,6 +51,7 @@ <if test="name != null">name,</if> <if test="phone != null">phone,</if> <if test="fansTime != null">fans_time,</if> + <if test="fansChannel != null">fans_channel,</if> <if test="email != null">email,</if> <if test="address != null">address,</if> <if test="payDate != null">pay_date,</if> @@ -71,6 +73,7 @@ <if test="name != null">#{name},</if> <if test="phone != null">#{phone},</if> <if test="fansTime != null">#{fansTime},</if> + <if test="fansChannel != null">#{fansChannel},</if> <if test="email != null">#{email},</if> <if test="address != null">#{address},</if> <if test="payDate != null">#{payDate},</if> @@ -96,6 +99,7 @@ <if test="name != null">name = #{name},</if> <if test="phone != null">phone = #{phone},</if> <if test="fansTime != null">fans_time = #{fansTime},</if> + <if test="fansChannel != null">fans_channel = #{fansChannel},</if> <if test="email != null">email = #{email},</if> <if test="address != null">address = #{address},</if> <if test="payDate != null">pay_date = #{payDate},</if> diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml index 4ce1ed6ab..2eb7a5cd1 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysRecipesPlanMapper.xml @@ -73,7 +73,7 @@ <trim prefix="(" suffix=")" suffixOverrides=","> <if test="orderId != null">order_id,</if> <if test="cusId != null">cus_id,</if> - <if test="outId != null">out_id,</if> + <if test="cusId != null">out_id,</if> <if test="startDate != null">start_date,</if> <if test="endDate != null">end_date,</if> <if test="startNumDay != null">start_num_day,</if> @@ -93,7 +93,7 @@ <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="orderId != null">#{orderId},</if> <if test="cusId != null">#{cusId},</if> - <if test="outId != null">#{outId},</if> + <if test="cusId != null">md5(#{cusId}),</if> <if test="startDate != null">#{startDate},</if> <if test="endDate != null">#{endDate},</if> <if test="startNumDay != null">#{startNumDay},</if> diff --git a/stdiet-ui/src/api/custom/recipesPlan.js b/stdiet-ui/src/api/custom/recipesPlan.js index b58401ef8..ea79d67dc 100644 --- a/stdiet-ui/src/api/custom/recipesPlan.js +++ b/stdiet-ui/src/api/custom/recipesPlan.js @@ -9,6 +9,14 @@ export function listRecipesPlan(query) { }); } +export function addRecipesPlan(data) { + return request({ + url: "/recipes/recipesPlan/add", + method: "post", + data + }); +} + // 查询食谱计划详细 export function getRecipesPlan(id) { return request({ diff --git a/stdiet-ui/src/components/RecipesPlanDrawer/index.vue b/stdiet-ui/src/components/RecipesPlanDrawer/index.vue index 858f57069..67decb0d7 100644 --- a/stdiet-ui/src/components/RecipesPlanDrawer/index.vue +++ b/stdiet-ui/src/components/RecipesPlanDrawer/index.vue @@ -38,6 +38,14 @@ <el-button icon="el-icon-view" size="mini" @click="handleInnerOpen" >查看暂停记录 </el-button> + <el-button + size="mini" + type="primary" + v-if="fansChannel === 1" + @click="createOneDay" + > + 生成1天体验计划 + </el-button> </el-col> </el-row> @@ -91,12 +99,45 @@ <!-- 暂停记录抽屉 --> <PlanPauseDrawer ref="planPauseRef" /> + <!-- 创建计划 --> + <el-dialog + title="创建1天体验计划" + :visible.sync="open" + width="480px" + append-to-body + > + <el-form + ref="form" + :model="form" + :rules="rules" + label-width="100px" + v-loading="createLoading" + > + <el-form-item label="开始时间" prop="startDate"> + <el-date-picker + v-model="form.startDate" + type="date" + placeholder="选择开始时间" + format="yyyy-MM-dd" + value-format="yyyy-MM-dd" + :picker-options="fanPickerOptions" + /> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="handleOnCreateConfirm" + >确 定</el-button + > + <el-button @click="cancel">取 消</el-button> + </div> + </el-dialog> </div> </el-drawer> </template> <script> import Clipboard from "clipboard"; import { listRecipesPlanByCusId } from "@/api/custom/recipesPlan"; +import { addRecipesPlan } from "@/api/custom/recipesPlan"; import PlanPauseDrawer from "./PlanPauseDrawer"; import VueQr from "vue-qr"; const logo = require("@/assets/logo/logo_b.png"); @@ -109,26 +150,45 @@ export default { data() { return { logo, + open: false, visible: false, + createLoading: false, title: "", cusOutId: "", copyValue: "", planLoading: false, planList: [], + fansChannel: 0, + form: {}, + rules: { + startDate: [ + { required: true, message: "开始时间不能为空", trigger: "blur" }, + ], + }, + fanPickerOptions: { + disabledDate(time) { + return time.getTime() < Date.now(); + }, + }, }; }, methods: { showDrawer(data) { - // console.log(data); + console.log(data); this.data = data; if (!this.data) { return; } + this.fansChannel = data.fansChannel; this.visible = true; this.title = `「${this.data.name}」食谱计划`; + + this.getList(); + }, + getList() { this.planLoading = true; - listRecipesPlanByCusId(data.id).then((response) => { + listRecipesPlanByCusId(this.data.id).then((response) => { this.planList = response.data; this.cusOutId = response.data.reduce((str, cur) => { if (!str && cur.recipesId && cur.reviewStatus === 2) { @@ -144,6 +204,12 @@ export default { this.planLoading = false; }); }, + reset() { + this.form = { + startDate: null, + }; + this.resetForm("form"); + }, handleOnClosed() { this.data = undefined; this.cusOutId = ""; @@ -165,6 +231,35 @@ export default { // const { id, name } = this.data; window.open("/recipes/build/" + this.data.name + "/" + data.id, "_blank"); }, + createOneDay() { + this.open = true; + }, + handleOnCreateConfirm() { + const { id } = this.data; + this.createLoading = true; + addRecipesPlan({ + cusId: id, + startNumDay: 1, + endNumDay: 1, + startDate: this.form.startDate, + endDate: this.form.startDate, + }) + .then((res) => { + if (res.code === 200) { + this.$message.success("创建成功"); + this.getList(); + } + this.createLoading = false; + this.open = false; + }) + .catch(() => { + this.createLoading = false; + }); + }, + cancel() { + this.open = false; + this.reset(); + }, }, }; </script> diff --git a/stdiet-ui/src/views/custom/customer/index.vue b/stdiet-ui/src/views/custom/customer/index.vue index b2136dad0..2be568d01 100644 --- a/stdiet-ui/src/views/custom/customer/index.vue +++ b/stdiet-ui/src/views/custom/customer/index.vue @@ -111,18 +111,31 @@ label="创建时间" align="center" prop="createTime" - width="166" - /> + width="100" + > + <template slot-scope="scope"> + <div v-for="time in scope.row.createTime.split(' ')" :key="time"> + {{ time }} + </div> + </template> + </el-table-column> <el-table-column label="进粉时间" align="center" prop="fansTime" - width="120" + width="100" > <template slot-scope="scope"> <span>{{ parseTime(scope.row.fansTime, "{y}-{m}-{d}") }}</span> </template> </el-table-column> + <el-table-column + label="进粉渠道" + align="center" + prop="fansChannel" + :formatter="fansChannelFormat" + > + </el-table-column> <el-table-column label="客户姓名" align="center" prop="name" /> <el-table-column label="手机号" align="center" prop="phone" /> <el-table-column @@ -316,7 +329,7 @@ </el-select> </el-form-item> </el-col> - <el-col :span="12"> + <el-col :span="24"> <el-form-item label="进粉时间" prop="fansTime"> <el-date-picker v-model="form.fansTime" @@ -329,6 +342,18 @@ </el-date-picker> </el-form-item> </el-col> + <el-col :span="12"> + <el-form-item label="进粉渠道" prop="fansChannel"> + <el-select v-model="form.fansChannel" placeholder="请选择"> + <el-option + v-for="dict in fansChannelOptions" + :key="dict.dictValue" + :label="dict.dictLabel" + :value="parseInt(dict.dictValue)" + /> + </el-select> + </el-form-item> + </el-col> </el-form> </el-row> <div slot="footer" class="dialog-footer"> @@ -346,7 +371,7 @@ <!-- 外食热量统计 --> <heatStatisticsDrawer ref="heatStatisticsRef"></heatStatisticsDrawer> <!-- 食谱计划抽屉 --> - <RecipesPlanDrawer ref="recipesPlanDrawerRef"/> + <RecipesPlanDrawer ref="recipesPlanDrawerRef" /> </div> </template> @@ -365,7 +390,7 @@ import OrderDrawer from "@/components/OrderDrawer"; import PhysicalSignsDialog from "@/components/PhysicalSignsDialog"; import ContractDrawer from "@/components/ContractDrawer"; import HeatStatisticsDrawer from "@/components/HeatStatisticsDrawer"; -import RecipesPlanDrawer from '@/components/RecipesPlanDrawer' +import RecipesPlanDrawer from "@/components/RecipesPlanDrawer"; import { mapGetters } from "vuex"; export default { @@ -375,7 +400,7 @@ export default { "physical-signs-dialog": PhysicalSignsDialog, "contract-drawer": ContractDrawer, heatStatisticsDrawer: HeatStatisticsDrawer, - RecipesPlanDrawer + RecipesPlanDrawer, }, data() { const userId = store.getters && store.getters.userId; @@ -395,6 +420,8 @@ export default { total: 0, // 客户档案表格数据 customerCenterList: [], + // + fansChannelOptions: [], // 弹出层标题 title: "", // 是否显示弹出层 @@ -450,6 +477,9 @@ export default { }; }, created() { + this.getDicts("customer_fans_channel").then((response) => { + this.fansChannelOptions = response.data; + }); this.getList(); }, computed: { @@ -496,6 +526,9 @@ export default { row.assistantDietitian ); }, + fansChannelFormat(row, column) { + return this.selectDictLabel(this.fansChannelOptions, row.fansChannel); + }, handleOnOrderClick(row) { this.$refs["cusOrderDrawerRef"].showDrawer(row); }, @@ -510,7 +543,7 @@ export default { }, handleOnMenuClick(row) { // console.log(row); - this.$refs['recipesPlanDrawerRef'].showDrawer(row); + this.$refs["recipesPlanDrawerRef"].showDrawer(row); }, handleClickHeatStatistics(row) { this.$refs["heatStatisticsRef"].showDrawer(row); @@ -537,6 +570,8 @@ export default { afterDietitian: null, salesman: null, chargePerson: null, + fansChannel: 0, + fansTime: null, followStatus: 0, createTime: null, createBy: null, diff --git a/stdiet-ui/src/views/custom/recipesBuild/PieChart.vue b/stdiet-ui/src/views/custom/recipesBuild/PieChart.vue index a7f6d4a93..6444d1e80 100644 --- a/stdiet-ui/src/views/custom/recipesBuild/PieChart.vue +++ b/stdiet-ui/src/views/custom/recipesBuild/PieChart.vue @@ -24,7 +24,10 @@ {{ totalHeat.toFixed(1) }}千卡 </div> </div> - <div style="text-align: right; margin-top: 4px"> + <div + style="text-align: right; margin-top: 4px" + v-if="recipesData.length > 1" + > <el-button size="mini" type="text" @click="backToAll" >查看全部</el-button > @@ -39,7 +42,7 @@ require("@/utils/echarts/myShine"); import resize from "@/views/dashboard/mixins/resize"; import TextInfo from "@/components/TextInfo"; import { createNamespacedHelpers } from "vuex"; -const { mapMutations } = createNamespacedHelpers("recipes"); +const { mapMutations, mapState } = createNamespacedHelpers("recipes"); export default { mixins: [resize], @@ -99,6 +102,7 @@ export default { // console.log(mData); return mData; }, + ...mapState(["recipesData"]), }, mounted() { this.$nextTick(() => { diff --git a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesHeaderCom/index.vue b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesHeaderCom/index.vue index ad0dde9d5..6adf8fe54 100644 --- a/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesHeaderCom/index.vue +++ b/stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesHeaderCom/index.vue @@ -2,10 +2,12 @@ <div class="recipes_header_com_wrapper"> <div class="header_btns" v-loading="loading"> <section> + <div>食谱制作</div> <el-button size="mini" v-if="!!recipesId" type="primary" + style="margin-left: 12px" icon="el-icon-document-copy" @click="handleOnTemplateClick" > @@ -103,13 +105,11 @@ export default { ], }; }, - updated() { - }, + updated() {}, computed: { ...mapState(["recipesId", "reviewStatus", "fontSize"]), }, - watch: { - }, + watch: {}, methods: { handleOnSizeChange(fontSize) { this.updateFontSize({ fontSize }); 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 75f581e17..4f2af9a4b 100644 --- a/stdiet-ui/src/views/custom/recipesBuild/RecommendView/TemplateView/index.vue +++ b/stdiet-ui/src/views/custom/recipesBuild/RecommendView/TemplateView/index.vue @@ -1,10 +1,10 @@ <template> <div class="template_view_wrapper"> <div class="header"> + <div style="fontWeight: bold">选择模板</div> <el-button size="mini" @click="handleOnBackClick">返回</el-button> </div> <div class="content"> - <h2>选择模板</h2> <!-- 筛选 --> <el-form :model="queryParams" ref="queryForm" :inline="true"> <el-form-item label="模板名称" prop="name"> @@ -116,7 +116,7 @@ export default { this.queryParams.pageNum = 1; this.getList(); }, - /** 重置按钮操作 */ + /** 重置按钮操作 */ resetQuery() { this.resetForm("queryForm"); this.handleQuery(); @@ -162,12 +162,13 @@ export default { .header { height: 32px; display: flex; - justify-content: flex-end; + justify-content: space-between; align-items: center; + margin-bottom: 8px; } .content { height: calc(100% - 32px); - padding-top: 12px; + overflow: auto; } } </style>