!307 添加食谱导出列选项

Merge pull request !307 from 德仔/develop
This commit is contained in:
德仔 2021-07-06 03:26:10 +00:00 committed by Gitee
commit d780d7acd9
5 changed files with 211 additions and 38 deletions

View File

@ -33,6 +33,7 @@ import TextInfo from "@/components/TextInfo";
import ACFCom from "@/components/HealthyView/ACFCom";
import RemarkCom from "@/components/HealthyView/RemarkCom";
import { editPhysicalSigns } from "@/api/custom/healthy";
import { updateRecipesPlan } from "@/api/custom/recipesPlan";
export default {
name: "BodySignView",
@ -124,6 +125,18 @@ export default {
}
});
},
handleOnRemarkConfirm(data) {
const { pathname } = window.location;
const recipesId = pathname.substring(pathname.lastIndexOf("/") + 1);
updateRecipesPlan({
id: recipesId,
...data,
}).then((res) => {
if (res.code === 200) {
this.$message.success("修改成功");
}
});
},
},
watch: {
data(val, oldVal) {

View File

@ -50,7 +50,8 @@ const oriState = {
physicalSignsOptions: [],
//
curShortCutObj: {},
recipesPlanRemark: ""
recipesPlanRemark: "",
exportCols: undefined
};
const mutations = {
@ -126,6 +127,9 @@ const mutations = {
setCurShortCutObj(state, payload) {
state.curShortCutObj = payload.data;
},
setExportCols(state, payload) {
state.exportCols = payload.exportCols;
},
setDate(state, payload) {
state.startDate = payload.startDate;
state.endDate = payload.endDate;

View File

@ -100,7 +100,12 @@
</el-popover>
</template>
</el-table-column>
<el-table-column label="菜品" prop="name" align="center">
<el-table-column
v-if="checkExport('菜品')"
label="菜品"
prop="name"
align="center"
>
<template slot="header">
<div class="pointer_style" @click="handleOnAdd">菜品</div>
</template>
@ -172,7 +177,12 @@
</el-popover>
</template>
</el-table-column>
<el-table-column label="食材" prop="igdName" align="center">
<el-table-column
v-if="checkExport('食材')"
label="食材"
prop="igdName"
align="center"
>
<template slot-scope="scope">
<span
v-if="
@ -205,7 +215,12 @@
</el-popover>
</template>
</el-table-column>
<el-table-column label="分量估算" :width="80" align="center">
<el-table-column
v-if="checkExport('分量估算')"
label="分量估算"
:width="80"
align="center"
>
<template slot-scope="scope">
<EditableUnit
:weight="scope.row.cusWeight"
@ -215,7 +230,13 @@
/>
</template>
</el-table-column>
<el-table-column label="重量(g)" prop="weight" :width="80" align="center">
<el-table-column
v-if="checkExport('重量(g)')"
label="重量(g)"
prop="weight"
:width="80"
align="center"
>
<template slot-scope="scope">
<EditableText
:value="scope.row.weight"
@ -229,7 +250,7 @@
prop="proteinRatio"
:width="60"
align="center"
v-if="!preview"
v-if="!preview && checkExport('蛋白质/100g')"
>
<template slot="header">
<div class="pointer_style">
@ -243,7 +264,7 @@
prop="fatRatio"
:width="60"
align="center"
v-if="!preview"
v-if="!preview && checkExport('脂肪/100g')"
>
<template slot="header">
<div class="pointer_style">
@ -257,7 +278,7 @@
prop="carbonRatio"
:width="60"
align="center"
v-if="!preview"
v-if="!preview && checkExport('碳水/100g')"
>
<template slot="header">
<div class="pointer_style">
@ -272,7 +293,7 @@
:width="60"
align="center"
:formatter="nutriFormatter"
v-if="!preview"
v-if="!preview && checkExport('蛋白质含量')"
>
<template slot="header">
<div class="pointer_style">
@ -287,7 +308,7 @@
:width="60"
align="center"
:formatter="nutriFormatter"
v-if="!preview"
v-if="!preview && checkExport('脂肪含量')"
>
<template slot="header">
<div class="pointer_style">
@ -302,7 +323,7 @@
:width="60"
align="center"
:formatter="nutriFormatter"
v-if="!preview"
v-if="!preview && checkExport('碳水含量')"
>
<template slot="header">
<div class="pointer_style">
@ -311,8 +332,16 @@
</div>
</template>
</el-table-column>
<el-table-column label="做法" prop="methods" v-if="!preview" />
<el-table-column label="备注" prop="remark" v-if="!preview">
<el-table-column
label="做法"
prop="methods"
v-if="!preview && checkExport('做法')"
/>
<el-table-column
label="备注"
prop="remark"
v-if="!preview && checkExport('备注')"
>
<template slot-scope="scope">
<div
v-if="!scope.row.remark"
@ -342,16 +371,10 @@
</div>
</template>
<script>
import {
getDishClassNameById
} from "@/api/custom/recipes";
import { getDishClassNameById } from "@/api/custom/recipes";
import { createNamespacedHelpers } from "vuex";
const {
mapActions,
mapGetters,
mapState,
mapMutations,
} = createNamespacedHelpers("recipes");
const { mapActions, mapGetters, mapState, mapMutations } =
createNamespacedHelpers("recipes");
import EditableText from "./EditableText";
import EditableUnit from "./EditableUnit";
@ -442,6 +465,7 @@ export default {
"curShortCutObj",
"healthyData",
"templateInfo",
"exportCols",
]),
},
methods: {
@ -522,9 +546,12 @@ export default {
if (columnIndex === 0) {
return row.typeSpan;
} else if (
columnIndex === 1 ||
columnIndex === 11 ||
columnIndex === 12
column.label === "菜品" ||
column.label === "做法" ||
column.label === "备注"
// columnIndex === 1 ||
// columnIndex === 11 ||
// columnIndex === 12
) {
return row.nameSpan;
}
@ -570,6 +597,13 @@ export default {
this.$message.error(err);
});
},
checkExport(colName) {
if (!this.exportCols) {
return true;
}
return this.exportCols.includes(colName);
},
// handleOnPaste(type) {
// // console.log(this.copyData);
// if (this.copyData) {
@ -712,7 +746,7 @@ export default {
"setCopyData",
"replaceMenu",
]),
...mapMutations(["setCurrentDay", "resetCurrentDay"]),
...mapMutations(["setCurrentDay", "resetCurrentDay", "setExportCols"]),
},
};
</script>

View File

@ -0,0 +1,104 @@
<template>
<el-dialog
custom-class="export_dialog_wrapper"
title="导出图片"
:visible.sync="visible"
width="480px"
>
<el-form :model="form" label-position="top">
<el-form-item label="食谱开始天数">
<el-input v-model="form.startNum" />
</el-form-item>
<el-form-item label="导出列项">
<el-checkbox
:indeterminate="isIndeterminate"
v-model="checkAll"
@change="handleCheckAllChange"
>全选</el-checkbox
>
<el-checkbox-group
v-model="form.exportCols"
@change="handleOnCheckboxGroupChange"
>
<el-checkbox
class="checkbox_style"
v-for="col in cols"
:label="col"
:key="col"
/>
</el-checkbox-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="onSubmit"> </el-button>
<el-button @click="onClosed"> </el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: "ExportDialog",
data() {
const cols = [
"菜品",
"食材",
"分量估算",
"重量(g)",
"蛋白质/100g",
"脂肪/100g",
"碳水/100g",
"蛋白质含量",
"脂肪含量",
"碳水含量",
"做法",
"备注",
];
return {
visible: false,
isIndeterminate: false,
checkAll: true,
cols,
form: {
startNum: 1,
exportCols: cols.slice(),
},
};
},
methods: {
showDialog({ num }) {
this.visible = true;
this.form.startNum = num;
},
onSubmit() {
console.log(this.form);
this.$emit("onConfirm", this.form);
this.visible = false;
setTimeout(() => {
this.form = {
startNum: 1,
exportCols: this.cols.slice(),
};
}, 200);
},
onClosed() {
this.visible = false;
this.form.startNum = 1;
},
handleCheckAllChange(val) {
this.checkAll = val;
this.form.exportCols = val ? this.cols.slice() : [];
this.isIndeterminate = false;
},
handleOnCheckboxGroupChange(val) {
this.checkAll = val.length === this.cols.length;
this.isIndeterminate = val.length > 0 && val.length < this.cols.length;
},
},
};
</script>
<style lang="scss" scoped>
.export_dialog_wrapper {
.checkbox_style {
}
}
</style>

View File

@ -98,20 +98,23 @@
</div>
<!-- 模板 -->
<TemplateDialog ref="templateRef" @onConfirm="handleOnCopy" />
<!-- 导出对话框 -->
<ExportDialog ref="exportDialogRef" @onConfirm="handleOnExportImg" />
</div>
</template>
<script>
import { addRecipesTemplate } from "@/api/custom/recipesTemplate";
import { createNamespacedHelpers } from "vuex";
const { mapActions, mapState, mapMutations } = createNamespacedHelpers(
"recipes"
);
const { mapActions, mapState, mapMutations } =
createNamespacedHelpers("recipes");
import TemplateDialog from "@/components/TemplateDialog";
import html2canvans from "html2canvas";
import ExportDialog from "./ExportDialog";
export default {
name: "RecipesHeaderCom",
components: {
TemplateDialog,
ExportDialog,
},
data() {
return {
@ -218,16 +221,23 @@ export default {
},
handleOnExportStartNumConfig() {
this.oriStartNum = this.recipesData[0].numDay;
this.$prompt("食谱开始天数", "导出图片", {
confirmButtonText: "确定",
inputValue: this.oriStartNum,
inputPattern: /^[1-9]\d*$/,
inputErrorMessage: "请输入正整数",
}).then(({ value }) => {
this.handleOnExportImg(parseInt(value));
// this.$prompt("", "", {
// confirmButtonText: "",
// inputValue: this.oriStartNum,
// inputPattern: /^[1-9]\d*$/,
// inputErrorMessage: "",
// }).then(({ value }) => {
// this.handleOnExportImg(parseInt(value));
// });
this.$refs.exportDialogRef.showDialog({
num: this.oriStartNum,
});
},
handleOnExportImg(startNum) {
handleOnExportImg({ startNum, exportCols }) {
//
this.setExportCols({ exportCols });
this.$message.warning("食谱导出中,请勿操作界面...");
//
this.downloading = true;
this.$nextTick(() => {
const centerContentDom = document.getElementById("center_content");
@ -256,6 +266,7 @@ export default {
scale: 1.5,
height: recipesDom.scrollHeight,
}).then((canvas) => {
//
const { name } = this.healthyData;
// const startNum = this.recipesData[0].numDay;
// const endNum = this.recipesData[this.recipesData.length - 1].numDay;
@ -279,13 +290,20 @@ export default {
}
});
this.setExportCols({ exportCols: undefined });
this.downloading = false;
this.$message.success("食谱导出成功");
});
});
},
...mapActions(["saveRecipes", "updateReviewStatus"]),
...mapMutations(["updateStateData", "updateFontSize", "toggleLeftShow"]),
...mapMutations([
"updateStateData",
"updateFontSize",
"toggleLeftShow",
"setExportCols",
]),
},
};
</script>