合并
This commit is contained in:
commit
c507057f63
@ -9,8 +9,8 @@ stdiet:
|
||||
# 实例演示开关
|
||||
demoEnabled: true
|
||||
# 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
|
||||
#profile: /Users/wonder/Documents/Workspaces/java/ShengtangManage/running/uploadPath
|
||||
profile: D:/ruoyi/uploadPath
|
||||
profile: /Users/wonder/Documents/Workspaces/java/ShengtangManage/running/uploadPath
|
||||
# profile: D:/ruoyi/uploadPath
|
||||
# 获取ip地址开关
|
||||
addressEnabled: false
|
||||
# 验证码类型 math 数组计算 char 字符验证
|
||||
|
@ -20,8 +20,8 @@ public class MyApplicationRunner implements ApplicationRunner {
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) throws Exception {
|
||||
/* System.out.println("项目启动调用方法");
|
||||
String path = AliyunOSSUtils.uploadFileInputSteam(AliyunOSSConfig.casePrefix,"ceshi.png",new File("D:\\ceshi.png"));
|
||||
System.out.println(path);*/
|
||||
System.out.println("项目启动调用方法");
|
||||
// String path = AliyunOSSUtils.uploadFileInputSteam(AliyunOSSConfig.casePrefix,"ceshi.png",new File("D:\\ceshi.png"));
|
||||
// System.out.println(path);
|
||||
}
|
||||
}
|
||||
|
@ -64,6 +64,7 @@
|
||||
"vue": "2.6.10",
|
||||
"vue-count-to": "1.0.13",
|
||||
"vue-cropper": "0.4.9",
|
||||
"vue-qr": "^2.3.0",
|
||||
"vue-router": "3.0.2",
|
||||
"vue-scrollto": "^2.20.0",
|
||||
"vue-splitpane": "1.0.4",
|
||||
|
@ -50,21 +50,27 @@
|
||||
width="200"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
label="合同地址"
|
||||
align="center"
|
||||
prop="path"
|
||||
width="80"
|
||||
>
|
||||
<el-table-column label="合同地址" align="center" prop="path">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="text"
|
||||
style="margin-right: 8px"
|
||||
icon="el-icon-copy-document"
|
||||
@click="handleCopy(scope.row.path)"
|
||||
class="copyBtn"
|
||||
:data-clipboard-text="copyValue"
|
||||
>复制
|
||||
</el-button>
|
||||
<el-popover placement="top" trigger="click">
|
||||
<VueQr :text="copyValue" :logoSrc="logo" />
|
||||
<el-button
|
||||
slot="reference"
|
||||
icon="el-icon-picture-outline"
|
||||
type="text"
|
||||
@click="handleCopy(scope.row.path)"
|
||||
>二维码</el-button
|
||||
>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" width="180">
|
||||
@ -108,15 +114,18 @@ import { delContract, listContract } from "@/api/custom/contract";
|
||||
import ContractDetail from "@/components/ContractDetail";
|
||||
import Clipboard from "clipboard";
|
||||
import ContractAdd from "@/components/ContractAdd";
|
||||
|
||||
import VueQr from "vue-qr";
|
||||
const logo = require("@/assets/logo/logo_b.png");
|
||||
export default {
|
||||
name: "CustomerContractDrawer",
|
||||
components: {
|
||||
"contract-detail": ContractDetail,
|
||||
"add-contract": ContractAdd,
|
||||
VueQr,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
logo,
|
||||
visible: false,
|
||||
title: "",
|
||||
data: undefined,
|
||||
|
@ -10,16 +10,34 @@
|
||||
<div class="app-container">
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button icon="el-icon-share" size="small" title="点击复制链接" class="copyBtn" type="primary" :data-clipboard-text="copyValue" @click="handleCopy()">外食计算器</el-button>
|
||||
<el-button
|
||||
icon="el-icon-share"
|
||||
size="small"
|
||||
title="点击复制链接"
|
||||
class="copyBtn"
|
||||
type="primary"
|
||||
:data-clipboard-text="copyValue"
|
||||
@click="handleCopy()"
|
||||
>外食计算器</el-button
|
||||
>
|
||||
</el-col>
|
||||
<el-popover :placement="bottom" trigger="click">
|
||||
<VueQr :text="copyValue" :logoSrc="logo" />
|
||||
<el-button slot="reference">二维码</el-button>
|
||||
</el-popover>
|
||||
</el-row>
|
||||
<el-table :data="foodHeatStatisticsList" >
|
||||
<el-table-column label="日期" align="center" prop="edibleDate" width="120">
|
||||
<el-table :data="foodHeatStatisticsList">
|
||||
<el-table-column
|
||||
label="日期"
|
||||
align="center"
|
||||
prop="edibleDate"
|
||||
width="120"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.edibleDate, '{y}-{m}-{d}') }}</span>
|
||||
<span>{{ parseTime(scope.row.edibleDate, "{y}-{m}-{d}") }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="食材" align="center" prop="ingredient" />
|
||||
<!-- <el-table-column label="食材" align="center" prop="ingredient" />
|
||||
<el-table-column label="通俗计量" align="center" prop="unitName">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.number ? (scope.row.number + "" + (scope.row.unitName != null ? scope.row.unitName : "")) : "" }}
|
||||
@ -27,62 +45,87 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="质量(克)" align="center" prop="quantity" />-->
|
||||
|
||||
<el-table-column label="可摄入量" align="center" prop="maxHeatValue" />
|
||||
<el-table-column
|
||||
label="可摄入量"
|
||||
align="center"
|
||||
prop="maxHeatValue"
|
||||
/>
|
||||
<el-table-column label="食材热量" align="center" prop="heatValue" />
|
||||
<el-table-column label="热量缺口" align="center" prop="heatGap" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<el-table-column
|
||||
label="操作"
|
||||
align="center"
|
||||
class-name="small-padding fixed-width"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
@click="handleDetail(scope.row)"
|
||||
v-hasPermi="['custom:foodHeatStatistics:query']"
|
||||
>详情</el-button>
|
||||
>详情</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleCalculate(scope.row)"
|
||||
>计算</el-button>
|
||||
>计算</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleOnDeleteClick(scope.row)"
|
||||
v-hasPermi="['custom:foodHeatStatistics:remove']"
|
||||
>删除</el-button>
|
||||
>删除</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="fetchHeatList"
|
||||
/>
|
||||
|
||||
<heatStatisticsCalculate ref="heatStatisticsCalculateRef"></heatStatisticsCalculate>
|
||||
<heatStatisticsDetail ref="heatStatisticsDetailRef"></heatStatisticsDetail>
|
||||
|
||||
<heatStatisticsCalculate
|
||||
ref="heatStatisticsCalculateRef"
|
||||
></heatStatisticsCalculate>
|
||||
<heatStatisticsDetail
|
||||
ref="heatStatisticsDetailRef"
|
||||
></heatStatisticsDetail>
|
||||
</div>
|
||||
</el-drawer>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { listFoodHeatStatistics, getFoodHeatStatistics, delFoodHeatStatistics, addFoodHeatStatistics, updateFoodHeatStatistics, exportFoodHeatStatistics } from "@/api/custom/foodHeatStatistics";
|
||||
import Clipboard from 'clipboard';
|
||||
import HeatStatisticsCalculate from "@/components/HeatStatisticsCalculate";
|
||||
import HeatStatisticsDetail from "@/components/HeatStatisticsDetail";
|
||||
import {
|
||||
listFoodHeatStatistics,
|
||||
getFoodHeatStatistics,
|
||||
delFoodHeatStatistics,
|
||||
addFoodHeatStatistics,
|
||||
updateFoodHeatStatistics,
|
||||
exportFoodHeatStatistics,
|
||||
} from "@/api/custom/foodHeatStatistics";
|
||||
import Clipboard from "clipboard";
|
||||
import HeatStatisticsCalculate from "@/components/HeatStatisticsCalculate";
|
||||
import HeatStatisticsDetail from "@/components/HeatStatisticsDetail";
|
||||
import VueQr from "vue-qr";
|
||||
const logo = require("@/assets/logo/logo_b.png");
|
||||
export default {
|
||||
name: "HeatStatisticsDrawer",
|
||||
components: {
|
||||
'heatStatisticsCalculate':HeatStatisticsCalculate,
|
||||
'heatStatisticsDetail': HeatStatisticsDetail
|
||||
heatStatisticsCalculate: HeatStatisticsCalculate,
|
||||
heatStatisticsDetail: HeatStatisticsDetail,
|
||||
VueQr,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
logo,
|
||||
visible: false,
|
||||
title: "",
|
||||
data: undefined,
|
||||
@ -94,7 +137,7 @@ export default {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
},
|
||||
copyValue: ""
|
||||
copyValue: "",
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
@ -106,33 +149,31 @@ export default {
|
||||
}
|
||||
this.title = `「${this.data.name}」热量统计列表`;
|
||||
this.queryParams.customerId = data.id;
|
||||
this.copyValue =
|
||||
window.location.origin.replace("manage", "sign") +
|
||||
"/foodHeatCalculator/" +
|
||||
this.data.encId;
|
||||
this.fetchHeatList();
|
||||
},
|
||||
fetchHeatList() {
|
||||
listFoodHeatStatistics(this.queryParams).then(response => {
|
||||
listFoodHeatStatistics(this.queryParams).then((response) => {
|
||||
this.foodHeatStatisticsList = response.rows;
|
||||
this.total = response.total;
|
||||
this.visible = true;
|
||||
});
|
||||
},
|
||||
handleAdd() {
|
||||
|
||||
},
|
||||
handleAdd() {},
|
||||
handleOnClosed() {
|
||||
this.data = undefined;
|
||||
this.copyValue = "";
|
||||
},
|
||||
handleOnDeleteClick(data) {
|
||||
const ids = data.id || this.ids;
|
||||
this.$confirm(
|
||||
'是否确认删除该数据项?',
|
||||
"警告",
|
||||
{
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}
|
||||
)
|
||||
this.$confirm("是否确认删除该数据项?", "警告", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(function () {
|
||||
return delFoodHeatStatistics(ids);
|
||||
})
|
||||
@ -143,21 +184,20 @@ export default {
|
||||
.catch(function () {});
|
||||
},
|
||||
handleCopy() {
|
||||
this.copyValue = window.location.origin.replace('manage', 'sign') + "/foodHeatCalculator/"+this.data.encId;
|
||||
const btnCopy = new Clipboard('.copyBtn');
|
||||
new Clipboard(".copyBtn");
|
||||
this.$message({
|
||||
message: '拷贝成功',
|
||||
type: 'success'
|
||||
message: "拷贝成功",
|
||||
type: "success",
|
||||
});
|
||||
},
|
||||
handleCalculate(data){
|
||||
this.$refs.heatStatisticsCalculateRef.showDialog(data,() => {
|
||||
handleCalculate(data) {
|
||||
this.$refs.heatStatisticsCalculateRef.showDialog(data, () => {
|
||||
this.fetchHeatList();
|
||||
});
|
||||
},
|
||||
handleDetail(data){
|
||||
this.$refs.heatStatisticsDetailRef.showDialog(data, this.data.name);
|
||||
}
|
||||
handleDetail(data) {
|
||||
this.$refs.heatStatisticsDetailRef.showDialog(data, this.data.name);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -28,7 +28,9 @@ const oriState = {
|
||||
startNum: 0,
|
||||
endNum: 0,
|
||||
reviewStatus: 0,
|
||||
templateInfo: undefined
|
||||
templateInfo: undefined,
|
||||
copyData: undefined,
|
||||
fontSize: 12
|
||||
};
|
||||
|
||||
const mutations = {
|
||||
@ -37,7 +39,10 @@ const mutations = {
|
||||
obj => obj.id === payload.id
|
||||
);
|
||||
if (tarDishes) {
|
||||
if (tarDishes.dishesId !== payload.dishesId) {
|
||||
if (
|
||||
payload.dishesId !== tarDishes.dishesId ||
|
||||
payload.type !== undefined
|
||||
) {
|
||||
// 替换菜品
|
||||
Object.keys(payload).forEach(key => {
|
||||
if (key === "num") {
|
||||
@ -55,6 +60,9 @@ const mutations = {
|
||||
}
|
||||
}
|
||||
},
|
||||
updateFontSize(state, payload) {
|
||||
state.fontSize = payload.fontSize;
|
||||
},
|
||||
addRecipesDishes(state, payload) {
|
||||
state.recipesData[payload.num].dishes.push(payload.data);
|
||||
},
|
||||
@ -282,6 +290,7 @@ const actions = {
|
||||
// console.log(params);
|
||||
},
|
||||
async addDishes({ commit, state }, payload) {
|
||||
console.log(payload);
|
||||
const tarDishesList = state.recipesData[payload.num].dishes.filter(
|
||||
obj => obj.type === payload.data.type
|
||||
);
|
||||
@ -367,26 +376,34 @@ const actions = {
|
||||
);
|
||||
if (tarDishes) {
|
||||
const mTarDishes = JSON.parse(JSON.stringify(tarDishes));
|
||||
const tarIgd = mTarDishes.igdList.find(obj => obj.id === payload.igdId);
|
||||
if (tarIgd) {
|
||||
payload.weight && (tarIgd.weight = payload.weight);
|
||||
payload.cusWeight && (tarIgd.cusWeight = payload.cusWeight);
|
||||
payload.cusUnit && (tarIgd.cusUnit = payload.cusUnit);
|
||||
let params = {
|
||||
id: mTarDishes.id
|
||||
};
|
||||
if (payload.type !== undefined) {
|
||||
// 修改餐类
|
||||
params.type = payload.type;
|
||||
} else {
|
||||
// 修改食材
|
||||
const tarIgd = mTarDishes.igdList.find(
|
||||
obj => obj.id === payload.igdId
|
||||
);
|
||||
if (tarIgd) {
|
||||
payload.weight && (tarIgd.weight = payload.weight);
|
||||
payload.cusWeight && (tarIgd.cusWeight = payload.cusWeight);
|
||||
payload.cusUnit && (tarIgd.cusUnit = payload.cusUnit);
|
||||
|
||||
const params = {
|
||||
id: mTarDishes.id,
|
||||
detail: mTarDishes.igdList.map(igd => ({
|
||||
params.detail = mTarDishes.igdList.map(igd => ({
|
||||
id: igd.id,
|
||||
weight: igd.weight,
|
||||
cus_unit: igd.cusUnit,
|
||||
cus_weight: igd.cusWeight
|
||||
}))
|
||||
};
|
||||
const result = await updateDishesDetailApi(params);
|
||||
if (result.code === 200) {
|
||||
commit("updateRecipesDishesDetail", payload);
|
||||
}));
|
||||
}
|
||||
}
|
||||
const result = await updateDishesDetailApi(params);
|
||||
if (result.code === 200) {
|
||||
commit("updateRecipesDishesDetail", payload);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
commit("updateRecipesDishesDetail", payload);
|
||||
@ -408,7 +425,21 @@ const actions = {
|
||||
commit("deleteSomeDayDishes", payload);
|
||||
}
|
||||
},
|
||||
async deleteMenu({ commit }, payload) {}
|
||||
async deleteMenu({ commit }, payload) {},
|
||||
async setCopyData({ commit, state }, payload) {
|
||||
return new Promise((res, rej) => {
|
||||
const tarDishes = state.recipesData[payload.num].dishes.find(
|
||||
obj => obj.id === payload.id
|
||||
);
|
||||
if (tarDishes) {
|
||||
commit("updateStateData", { copyData: tarDishes });
|
||||
|
||||
res("复制成功");
|
||||
} else {
|
||||
rej("复制失败");
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const getters = {
|
||||
|
@ -187,7 +187,7 @@
|
||||
prop="updateTime"
|
||||
width="180"
|
||||
/>
|
||||
<el-table-column label="合同地址" align="center" prop="path" width="80">
|
||||
<el-table-column label="合同地址" align="center" prop="path">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="text"
|
||||
@ -197,6 +197,16 @@
|
||||
:data-clipboard-text="copyValue"
|
||||
>复制
|
||||
</el-button>
|
||||
<el-popover placement="top" trigger="click">
|
||||
<VueQr :text="copyValue" :logoSrc="logo" />
|
||||
<el-button
|
||||
slot="reference"
|
||||
icon="el-icon-picture-outline"
|
||||
type="text"
|
||||
@click="handleCopy(scope.row.path)"
|
||||
>二维码</el-button
|
||||
>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark" width="120" />
|
||||
@ -320,9 +330,14 @@ import { addContract, delContract, listContract } from "@/api/custom/contract";
|
||||
import Clipboard from "clipboard";
|
||||
|
||||
import { mapGetters } from "vuex";
|
||||
import VueQr from "vue-qr";
|
||||
const logo = require("@/assets/logo/logo_b.png");
|
||||
|
||||
export default {
|
||||
name: "Contract",
|
||||
components: {
|
||||
VueQr,
|
||||
},
|
||||
data() {
|
||||
const checkServePromise = (rule, value, callback) => {
|
||||
if (this.form.projectId == 0 && !value) {
|
||||
@ -331,6 +346,7 @@ export default {
|
||||
callback();
|
||||
};
|
||||
return {
|
||||
logo,
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
|
@ -4,6 +4,22 @@
|
||||
:style="`height: ${collapse ? 30 : 200}px`"
|
||||
>
|
||||
<div class="header">
|
||||
<span class="font_size_style">
|
||||
字体大小:
|
||||
<el-select
|
||||
v-model="mFontSize"
|
||||
size="mini"
|
||||
style="width: 80px"
|
||||
@change="handleOnSizeChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="size in fontSizeOpts"
|
||||
:key="size.value"
|
||||
:label="size.label"
|
||||
:value="size.value"
|
||||
/>
|
||||
</el-select>
|
||||
</span>
|
||||
<el-button size="mini" v-if="!recipesId" @click="handleOnBack"
|
||||
>返回</el-button
|
||||
>
|
||||
@ -91,16 +107,32 @@ export default {
|
||||
PieChart,
|
||||
},
|
||||
data() {
|
||||
return {};
|
||||
return {
|
||||
mFontSize: 12,
|
||||
fontSizeOpts: [
|
||||
{ value: 12, label: "12" },
|
||||
{ value: 14, label: "14" },
|
||||
{ value: 16, label: "16" },
|
||||
{ value: 18, label: "18" },
|
||||
],
|
||||
};
|
||||
},
|
||||
updated() {
|
||||
// console.log(this.data);
|
||||
},
|
||||
props: ["collapse", "data"],
|
||||
computed: {
|
||||
...mapState(["recipesId", "reviewStatus", "healthyData"]),
|
||||
...mapState(["recipesId", "reviewStatus", "healthyData", "fontSize"]),
|
||||
},
|
||||
watch: {
|
||||
fontSize(val) {
|
||||
this.mFontSize = val;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
handleOnSizeChange(fontSize) {
|
||||
this.updateFontSize({ fontSize });
|
||||
},
|
||||
handleCollapseClick() {
|
||||
this.$emit("update:collapse", !this.collapse);
|
||||
},
|
||||
@ -121,7 +153,7 @@ export default {
|
||||
this.updateStateData({ recipesData: [] });
|
||||
},
|
||||
...mapActions(["saveRecipes", "updateReviewStatus"]),
|
||||
...mapMutations(["updateStateData"]),
|
||||
...mapMutations(["updateStateData", "updateFontSize"]),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@ -138,6 +170,13 @@ export default {
|
||||
transition: all 0.3s;
|
||||
transform-origin: center center;
|
||||
}
|
||||
|
||||
.font_size_style {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
margin-right: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
|
@ -92,13 +92,14 @@ export default {
|
||||
data.name
|
||||
}」`;
|
||||
this.id = data.id;
|
||||
this.type = data.type;
|
||||
} else if (type) {
|
||||
this.title = `添加第${numDay}天${this.typeDict[type]}菜品`;
|
||||
this.type = type;
|
||||
}
|
||||
this.visible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.dishesRef.getList({ type });
|
||||
this.$refs.dishesRef.getList({ type: this.type });
|
||||
});
|
||||
},
|
||||
handleOnClosed(done) {
|
||||
@ -114,6 +115,7 @@ export default {
|
||||
this.active = 1;
|
||||
this.dishesTypeOptions = (this.type || data.type)
|
||||
.split(",")
|
||||
.sort((a, b) => a - b)
|
||||
.reduce((arr, cur, idx) => {
|
||||
if (idx === 0) {
|
||||
this.selDishes.type = cur;
|
||||
|
98
stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/DishesSettingDialog/index.vue
Normal file
98
stdiet-ui/src/views/custom/recipesBuild/RecipesView/RecipesCom/DishesSettingDialog/index.vue
Normal file
@ -0,0 +1,98 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
:title="title"
|
||||
:visible.sync="visible"
|
||||
width="320px"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<div v-loading="loading" @click="handleClick" class="reuse_dialog_wrapper">
|
||||
<div style="margin-bottom: 12px">餐类</div>
|
||||
<el-radio-group v-model="type">
|
||||
<el-radio
|
||||
style="padding: 8px 0"
|
||||
v-for="item in menuTypeOptions"
|
||||
:key="item.dictValue"
|
||||
:label="item.dictValue"
|
||||
>
|
||||
{{ item.dictLabel }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submit">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
import { createNamespacedHelpers } from "vuex";
|
||||
const { mapState } = createNamespacedHelpers("recipes");
|
||||
import { getDishes } from "@/api/custom/dishes";
|
||||
export default {
|
||||
name: "DishesSettingDialog",
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
loading: false,
|
||||
data: undefined,
|
||||
type: "",
|
||||
menuTypeOptions: [],
|
||||
title: "",
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
handleClick(e) {
|
||||
e.stopPropagation();
|
||||
},
|
||||
showDialog({ numDay, data }) {
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
this.data = data;
|
||||
this.visible = true;
|
||||
this.loading = true;
|
||||
this.type = data.type;
|
||||
this.title = `修改第${numDay}天「${data.name}」菜品`;
|
||||
getDishes(data.dishesId).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.loading = false;
|
||||
this.menuTypeOptions = res.data.type
|
||||
.split(",")
|
||||
.sort((a, b) => a - b)
|
||||
.reduce((arr, cur) => {
|
||||
const tarOpt = this.typeOptions.find(
|
||||
(obj) => obj.dictValue === cur
|
||||
);
|
||||
if (tarOpt) {
|
||||
arr.push(tarOpt);
|
||||
}
|
||||
return arr;
|
||||
}, []);
|
||||
}
|
||||
});
|
||||
},
|
||||
cancel() {
|
||||
this.visible = false;
|
||||
this.data = undefined;
|
||||
},
|
||||
submit() {
|
||||
this.visible = false;
|
||||
this.$emit("onConfirm", { type: this.type, id: this.data.id });
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
...mapState(["typeOptions"]),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.reuse_dialog_wrapper {
|
||||
.item {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.menu_type {
|
||||
padding: 8px 16px;
|
||||
}
|
||||
}
|
||||
</style>
|
@ -95,6 +95,14 @@ export default {
|
||||
this.mUnit = value;
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
weight(val) {
|
||||
this.mWeight = val;
|
||||
},
|
||||
unit(val) {
|
||||
this.mUnit = val;
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
unitWeight() {
|
||||
return (
|
||||
|
@ -1,20 +0,0 @@
|
||||
<template>
|
||||
<el-dialog>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: 'ReuseDialog',
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
data: undefined
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
showDialog() {
|
||||
this.visible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
@ -7,12 +7,28 @@
|
||||
:cell-style="{ padding: '2px 0' }"
|
||||
:header-cell-style="{ padding: '4px 0', height: 'unset' }"
|
||||
size="mini"
|
||||
:style="`outline: ${currentDay === num ? '1px solid #d96969' : 'none'}`"
|
||||
header-row-class-name="recipes_header"
|
||||
:cell-class-name="cellClassName"
|
||||
:style="`outline: ${currentDay === num ? '1px solid #d53950' : 'none'}`"
|
||||
>
|
||||
<el-table-column prop="type" :width="100" align="center">
|
||||
<template slot="header">
|
||||
<div class="num_day" @click="handleOnResetCurrentDay">
|
||||
<div>{{ `第${numDay}天` }}</div>
|
||||
<el-popover placement="top" trigger="hover" v-if="!!copyData">
|
||||
<div>
|
||||
<el-button size="mini" type="primary" @click="handleOnPaste"
|
||||
>粘贴</el-button
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
slot="reference"
|
||||
class="num_day"
|
||||
@click="handleOnResetCurrentDay"
|
||||
>
|
||||
{{ `第${numDay}天` }}
|
||||
</div>
|
||||
</el-popover>
|
||||
<div v-else>
|
||||
{{ `第${numDay}天` }}
|
||||
</div>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
@ -44,23 +60,42 @@
|
||||
<template slot-scope="scope">
|
||||
<el-popover placement="right" trigger="hover" :title="scope.row.name">
|
||||
<div>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
icon="el-icon-refresh"
|
||||
class="fun_button"
|
||||
@click="handleOnReplace(scope.row)"
|
||||
>
|
||||
替换
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
size="mini"
|
||||
icon="el-icon-delete"
|
||||
class="fun_button"
|
||||
@click="handleOnDelete(scope.row)"
|
||||
>删除</el-button
|
||||
>
|
||||
<div style="margin-bottom: 8px">
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
icon="el-icon-refresh"
|
||||
class="fun_button"
|
||||
@click="handleOnReplace(scope.row)"
|
||||
>
|
||||
替换
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
size="mini"
|
||||
icon="el-icon-delete"
|
||||
class="fun_button"
|
||||
@click="handleOnDelete(scope.row)"
|
||||
>删除</el-button
|
||||
>
|
||||
</div>
|
||||
<div>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
icon="el-icon-document-copy"
|
||||
class="fun_button"
|
||||
@click="handleOnCopy(scope.row)"
|
||||
>复制</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
icon="el-icon-document-copy"
|
||||
class="fun_button"
|
||||
@click="handleOnSetting(scope.row)"
|
||||
>修改餐类</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<span class="num_day" slot="reference">{{ scope.row.name }}</span>
|
||||
</el-popover>
|
||||
@ -172,7 +207,13 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="做法" prop="methods" />
|
||||
</el-table>
|
||||
<!-- 添加菜品抽屉 -->
|
||||
<AddDishesDrawer ref="drawerRef" @onConfirm="handleOnDishesConfirm" />
|
||||
<!-- 菜品复用菜单 -->
|
||||
<DishesSettingDialog
|
||||
ref="settingDialogRef"
|
||||
@onConfirm="handleOnSettingConfirm"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
@ -187,6 +228,8 @@ const {
|
||||
import EditableText from "./EditableText";
|
||||
import EditableUnit from "./EditableUnit";
|
||||
import AddDishesDrawer from "./AddDishesDrawer";
|
||||
import DishesSettingDialog from "./DishesSettingDialog";
|
||||
import VueScrollTo from "vue-scrollto";
|
||||
|
||||
export default {
|
||||
name: "RecipesCom",
|
||||
@ -213,6 +256,7 @@ export default {
|
||||
EditableText,
|
||||
EditableUnit,
|
||||
AddDishesDrawer,
|
||||
DishesSettingDialog,
|
||||
},
|
||||
mounted() {
|
||||
// console.log(this.data);
|
||||
@ -313,12 +357,23 @@ export default {
|
||||
return mData;
|
||||
},
|
||||
...mapGetters(["typeDict"]),
|
||||
...mapState(["currentDay"]),
|
||||
...mapState(["currentDay", "copyData", "fontSize"]),
|
||||
},
|
||||
methods: {
|
||||
cellClassName({ row, column, rowIndex, columnIndex }) {
|
||||
// console.log({ row, column, rowIndex, columnIndex });
|
||||
if (!columnIndex) {
|
||||
return "recipes_first_col";
|
||||
} else {
|
||||
return `recipes_cell recipes_cell_${this.fontSize}`;
|
||||
}
|
||||
},
|
||||
handleParentClick(e) {
|
||||
// 校验某天
|
||||
this.setCurrentDay({ currentDay: this.num });
|
||||
VueScrollTo.scrollTo(`#recipes${this.num}`, 500, {
|
||||
container: "#recipes_content",
|
||||
});
|
||||
},
|
||||
spanMethod({ row, column, rowIndex, columnIndex }) {
|
||||
if (columnIndex === 0) {
|
||||
@ -351,6 +406,27 @@ export default {
|
||||
// console.log(data);
|
||||
this.deleteDishes({ num: this.num, id: data.id });
|
||||
},
|
||||
handleOnCopy(data) {
|
||||
// console.log(data);
|
||||
this.setCopyData({ num: this.num, id: data.id })
|
||||
.then((msg) => {
|
||||
this.$message.success(msg);
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
},
|
||||
handleOnPaste() {
|
||||
// console.log(this.copyData);
|
||||
if (this.copyData) {
|
||||
this.addDishes({
|
||||
num: this.num,
|
||||
data: this.copyData,
|
||||
}).catch((err) => {
|
||||
this.$message.error(err);
|
||||
});
|
||||
}
|
||||
},
|
||||
handleOnWeightChange(data, weight) {
|
||||
// console.log({ data, weight });
|
||||
this.updateDishes({
|
||||
@ -390,6 +466,16 @@ export default {
|
||||
});
|
||||
}
|
||||
},
|
||||
handleOnSetting(data) {
|
||||
this.$refs.settingDialogRef.showDialog({ numDay: this.numDay, data });
|
||||
},
|
||||
handleOnSettingConfirm({ type, id }) {
|
||||
this.updateDishes({
|
||||
num: this.num,
|
||||
id,
|
||||
type,
|
||||
});
|
||||
},
|
||||
handleOnMenuTypeClick(data) {
|
||||
this.$refs.drawerRef.showDrawer({ type: data.type, numDay: this.numDay });
|
||||
},
|
||||
@ -398,6 +484,7 @@ export default {
|
||||
"addDishes",
|
||||
"deleteDishes",
|
||||
"replaceDishes",
|
||||
"setCopyData",
|
||||
]),
|
||||
...mapMutations(["setCurrentDay", "resetCurrentDay"]),
|
||||
},
|
||||
@ -419,4 +506,36 @@ export default {
|
||||
font-size: 12px;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
.recipes_header {
|
||||
& > th {
|
||||
background: #d53950 !important;
|
||||
color: white !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
.recipes_first_col {
|
||||
background: #d53950 !important;
|
||||
color: white !important;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.recipes_cell {
|
||||
font-weight: bold;
|
||||
color: #595959;
|
||||
}
|
||||
|
||||
.recipes_cell_12 {
|
||||
font-size: 12px;
|
||||
}
|
||||
.recipes_cell_14 {
|
||||
font-size: 14px;
|
||||
}
|
||||
.recipes_cell_16 {
|
||||
font-size: 16px;
|
||||
}
|
||||
.recipes_cell_18 {
|
||||
font-size: 18px;
|
||||
}
|
||||
</style>
|
||||
|
Loading…
x
Reference in New Issue
Block a user