1143 lines
49 KiB
Vue
1143 lines
49 KiB
Vue
<template>
|
||
<div class="app-container">
|
||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||
<el-form-item label="所属区域" prop="areaIds">
|
||
<el-cascader
|
||
v-model="queryParams.areaIds" :show-all-levels="false" :filterable="true"
|
||
:options="treeOptions" :props="treeProps" collapse-tags clearable
|
||
@change="handleTreeChange"></el-cascader>
|
||
</el-form-item>
|
||
<el-form-item label="食堂名称" prop="canteenName">
|
||
<el-input
|
||
v-model="queryParams.canteenName"
|
||
placeholder="请输入食堂名称"
|
||
clearable maxlength="30"
|
||
style="width: 240px"
|
||
@keyup.enter.native="handleQuery"
|
||
/>
|
||
</el-form-item>
|
||
<el-form-item>
|
||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||
</el-form-item>
|
||
</el-form>
|
||
|
||
<el-row :gutter="10" class="mb8">
|
||
<el-col :span="1.5">
|
||
<el-button
|
||
type="primary"
|
||
plain
|
||
icon="el-icon-plus"
|
||
size="mini"
|
||
@click="handleAdd"
|
||
>新增</el-button>
|
||
</el-col>
|
||
|
||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||
</el-row>
|
||
|
||
<el-table v-loading="loading" :data="tableListData" height="800">
|
||
<el-table-column label="食堂编号" align="center" prop="canteenNum" :show-overflow-tooltip="true" width="100" fixed="left"/>
|
||
<el-table-column label="食堂名称" align="center" prop="canteenName" :show-overflow-tooltip="true" width="150" fixed="left"/>
|
||
<el-table-column label="所属区域" align="center" prop="areaNameStr" :show-overflow-tooltip="true" width="180"/>
|
||
<el-table-column label="负责人" align="center" prop="custName" :show-overflow-tooltip="true" width="80"/>
|
||
<el-table-column label="联系电话" align="center" prop="contactTel" :show-overflow-tooltip="true" width="100"/>
|
||
<el-table-column label="食堂标签" align="center" prop="labelNameStr" :show-overflow-tooltip="true" width="80"/>
|
||
<el-table-column label="食堂状态" align="center" prop="businessState" :show-overflow-tooltip="true" width="80">
|
||
<template slot-scope="scope">
|
||
<span v-if="scope.row.businessState==1">休息</span>
|
||
<span v-if="scope.row.businessState==2">营业</span>
|
||
</template>
|
||
</el-table-column>
|
||
<!-- <el-table-column label="主营项目" align="center" prop="mainProject" :show-overflow-tooltip="true" width="80"/> -->
|
||
<el-table-column label="营业时间" align="center" prop="startBusinessTime" :show-overflow-tooltip="true" width="180">
|
||
<template slot-scope="scope">
|
||
{{ scope.row.startBusinessTime }}-{{ scope.row.endBusinessTime }}
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column label="预订餐" align="center" prop="ifReserve" :show-overflow-tooltip="true" width="140">
|
||
<template slot-scope="scope">
|
||
<el-switch
|
||
v-model="scope.row.ifReserve"
|
||
active-text="开启"
|
||
inactive-text="关闭"
|
||
:active-value="1"
|
||
:inactive-value="2"
|
||
@change="changeIfReserve(scope.row)"
|
||
>
|
||
</el-switch>
|
||
</template>
|
||
</el-table-column>
|
||
<!-- <el-table-column label="报餐" align="center" prop="ifBook" :show-overflow-tooltip="true" width="140">
|
||
<template slot-scope="scope">
|
||
<el-switch
|
||
v-model="scope.row.ifBook"
|
||
active-text="开启"
|
||
inactive-text="关闭"
|
||
:active-value="1"
|
||
:inactive-value="2"
|
||
>
|
||
</el-switch>
|
||
</template>
|
||
</el-table-column> -->
|
||
<el-table-column label="最大容纳人数" align="center" prop="capacity" :show-overflow-tooltip="true" width="100"/>
|
||
<!-- <el-table-column label="客流统计" align="center" prop="" :show-overflow-tooltip="true" width="80">
|
||
<template slot-scope="scope">
|
||
<span style="color: #4b80fd;">详情</span>
|
||
</template>
|
||
</el-table-column> -->
|
||
<!-- <el-table-column label="区域人数统计" align="center" prop="" :show-overflow-tooltip="true" width="80">
|
||
<template slot-scope="scope">
|
||
<span style="color: #4b80fd;">详情</span>
|
||
</template>
|
||
</el-table-column> -->
|
||
<el-table-column label="食堂图片" align="center" prop="imgUrl" width="100">
|
||
<template slot-scope="scope">
|
||
<img :src="scope.row.imgUrl" v-if="scope.row.imgUrl" alt="" style="width: 80px;height: 40px;" @click="openImg(scope.row)">
|
||
<span v-else>无</span>
|
||
</template>
|
||
</el-table-column>
|
||
<!-- <el-table-column label="支付设置" align="center" prop="canteenName" :show-overflow-tooltip="true" width="80">
|
||
<template slot-scope="scope">
|
||
<span style="color: #4b80fd;">详情</span>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column label="配送设置" align="center" prop="canteenName" :show-overflow-tooltip="true" width="80">
|
||
<template slot-scope="scope">
|
||
<span style="color: #4b80fd;">详情</span>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column label="预订/点餐/报餐设置" align="center" prop="" :show-overflow-tooltip="true" width="140">
|
||
<template slot-scope="scope">
|
||
<span style="color: #4b80fd;">详情</span>
|
||
</template>
|
||
</el-table-column> -->
|
||
<el-table-column label="收款码" align="center" prop="payCodeUrl" :show-overflow-tooltip="true" width="80">
|
||
<template slot-scope="scope">
|
||
<span>未开启</span>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column label="创建时间" align="center" prop="crtime" :show-overflow-tooltip="true" width="160"/>
|
||
<el-table-column label="更新时间" align="center" prop="uptime" :show-overflow-tooltip="true" width="160"/>
|
||
<el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width" fixed="right">
|
||
<template slot-scope="scope">
|
||
<el-button
|
||
size="mini"
|
||
type="text" v-if="scope.row.businessState==2"
|
||
@click="handleRest(scope.row)"
|
||
>休息</el-button>
|
||
<el-button
|
||
size="mini"
|
||
type="text" v-if="scope.row.businessState==1"
|
||
@click="handleBuss(scope.row)"
|
||
>营业</el-button>
|
||
<el-button
|
||
size="mini"
|
||
type="text"
|
||
@click="handleUpdate(scope.row)"
|
||
>编辑</el-button>
|
||
<el-button
|
||
size="mini"
|
||
type="text"
|
||
style="color: red;"
|
||
@click="handleDelete(scope.row)"
|
||
>删除</el-button>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
|
||
<pagination
|
||
v-show="total>0"
|
||
:total="total"
|
||
:page.sync="queryParams.pageNum"
|
||
:limit.sync="queryParams.pageSize"
|
||
@pagination="getList"
|
||
/>
|
||
|
||
<!-- 添加或修改参数配置对话框 -->
|
||
<el-dialog :title="title+'-食堂'" :visible.sync="open" width="1000px" append-to-body>
|
||
<el-tabs v-model="activeName" @tab-click="handleTabClick">
|
||
<!-- 基础设置 -->
|
||
<el-tab-pane label="基础设置" name="baseSetting" style="height: 600px;overflow-y: auto;">
|
||
<el-form ref="baseForm" :model="baseForm" :rules="baseFormRules" label-width="80px">
|
||
<el-row>
|
||
<el-col :span="12">
|
||
<el-form-item label="食堂编号" prop="canteenNum">
|
||
<el-input v-model="baseForm.canteenNum" placeholder="请输入食堂编号" maxlength="30" disabled clearable/>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="食堂名称" prop="canteenName">
|
||
<el-input v-model="baseForm.canteenName" placeholder="请输入食堂名称" maxlength="30" clearable/>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row>
|
||
<el-col :span="12">
|
||
<el-form-item label="所属区域" prop="areaId">
|
||
<el-cascader v-model="baseForm.areaId"
|
||
:options="treeOptions" :filterable="true" style="width: 400px;" :show-all-levels="false"
|
||
:props="{
|
||
emitPath: false,// 若设置 false,则只返回该节点的值,只返回最后选择的id
|
||
checkStrictly: true,//来设置父子节点取消选中关联,从而达到选择任意一级选项的目的
|
||
value:'id',label:'treeName'
|
||
}"
|
||
clearable @change="handleTreeChange2" >
|
||
</el-cascader>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="营业时间">
|
||
<el-time-picker
|
||
is-range
|
||
v-model="rangeTime"
|
||
value-format="HH:mm:ss"
|
||
range-separator="至"
|
||
start-placeholder="开始时间"
|
||
end-placeholder="结束时间"
|
||
placeholder="选择时间范围">
|
||
</el-time-picker>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row>
|
||
<el-col :span="12">
|
||
<el-form-item label="食堂标签" prop="labelNameList">
|
||
<el-select v-model="baseForm.labelNameList" multiple placeholder="请选择食堂标签" style="width: 100%;">
|
||
<el-option
|
||
v-for="dict in dict.type.stall_tag"
|
||
:key="dict.value"
|
||
:label="dict.label"
|
||
:value="dict.label"
|
||
/>
|
||
<!-- <el-option v-for="item in labelOptions"
|
||
:key="item.labelName"
|
||
:label="item.labelName"
|
||
:value="item.labelName"
|
||
></el-option> -->
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="食堂最大容纳人数" prop="capacity">
|
||
<el-input v-model="baseForm.capacity" placeholder="请输入食堂最大容纳人数" maxlength="9" clearable
|
||
@input="(v)=>(baseForm.capacity=v.replace(/[^\d]/g,''))"/>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row>
|
||
<el-col :span="12">
|
||
<el-form-item label="负责人" prop="custId">
|
||
<!-- <el-select v-model="baseForm.custName" placeholder="请选择负责人" style="width: 100%;" @focus="openChosenCharger"></el-select> -->
|
||
<el-select v-model="baseForm.custId" placeholder="请选择负责人" style="width: 100%;" clearable @change="chosenUser">
|
||
<el-option v-for="item in userOptions"
|
||
:key="item.custId"
|
||
:label="item.nickName"
|
||
:value="item.custId"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="联系电话" prop="contactTel">
|
||
<el-input v-model="baseForm.contactTel" placeholder="请输入联系电话" maxlength="11" clearable
|
||
@input="(v)=>(baseForm.contactTel=v.replace(/[^\d]/g,''))"/>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row>
|
||
<el-col :span="12">
|
||
<el-form-item label="是否开启预订餐" prop="ifReserve">
|
||
<el-switch
|
||
v-model="baseForm.ifReserve"
|
||
active-text="开启"
|
||
inactive-text="关闭"
|
||
:active-value="1"
|
||
:inactive-value="2">
|
||
</el-switch>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<el-form-item label="是否开启报餐" prop="ifBook">
|
||
<el-switch
|
||
v-model="baseForm.ifBook"
|
||
active-text="开启"
|
||
inactive-text="关闭"
|
||
:active-value="1"
|
||
:inactive-value="2">
|
||
</el-switch>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row>
|
||
<!-- <el-col :span="12">
|
||
<el-form-item label="是否开启收款码" prop="ifEnablePayCode">
|
||
<el-switch
|
||
v-model="baseForm.ifEnablePayCode"
|
||
active-text="开启"
|
||
inactive-text="关闭"
|
||
:active-value="1"
|
||
:inactive-value="2">
|
||
</el-switch>
|
||
</el-form-item>
|
||
</el-col> -->
|
||
<el-col :span="12">
|
||
<el-form-item label="食堂图片">
|
||
<el-upload
|
||
:http-request="
|
||
(obj) => imgUpLoad(obj, 'fileUrl')
|
||
"
|
||
action="#"
|
||
:limit="1"
|
||
:file-list="fileList"
|
||
:show-file-list="true"
|
||
list-type="picture-card"
|
||
accept=".png, .jpg, .jpeg"
|
||
:on-success="handleAvatarSuccess"
|
||
:class="{ disabled: uploadDisabled }"
|
||
:on-preview="handlePictureCardPreview"
|
||
:on-remove="handleRemove"
|
||
>
|
||
<i
|
||
class="el-icon-plus avatar-uploader-icon"
|
||
></i>
|
||
</el-upload>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
</el-form>
|
||
</el-tab-pane>
|
||
<!-- 支付设置 -->
|
||
<!-- <el-tab-pane label="支付设置" name="paySetting" style="height: 600px;overflow-y: auto;">
|
||
<div style="width: 100%;height: auto;">
|
||
<div>
|
||
<span style="font-weight: bold;">启用本食堂独立规则</span>
|
||
<el-switch v-model="payDTO.ifEnablePay"
|
||
active-text="开启" inactive-text="关闭"
|
||
:active-value="1" :inactive-value="2"></el-switch>
|
||
</div>
|
||
<div style="color: red;">
|
||
*提示:需勾选对应的支付方式后配置方可生效(只针对下层的设备生效,小程序不生效)
|
||
</div>
|
||
<div style="margin: 10px;">
|
||
<el-checkbox-group v-model="payTypeList" size="small">
|
||
<el-checkbox label="1" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;margin-left: 10px;">支付宝</el-checkbox>
|
||
<el-checkbox label="2" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">微信</el-checkbox>
|
||
<el-checkbox label="3" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">云闪付</el-checkbox>
|
||
<el-checkbox label="4" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">农业银行</el-checkbox>
|
||
<el-checkbox label="5" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">工商银行</el-checkbox>
|
||
<el-checkbox label="6" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">兴业银行</el-checkbox>
|
||
<el-checkbox label="7" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">建设银行</el-checkbox>
|
||
<el-checkbox label="8" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">苏州农商银行</el-checkbox>
|
||
<el-checkbox label="9" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">银联支付</el-checkbox>
|
||
<el-checkbox label="10" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">富友支付</el-checkbox>
|
||
<el-checkbox label="11" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">太仓农商行</el-checkbox>
|
||
<el-checkbox label="12" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">宁波银行</el-checkbox>
|
||
<el-checkbox label="13" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">南京银行</el-checkbox>
|
||
<el-checkbox label="14" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">无锡农商行</el-checkbox>
|
||
<el-checkbox label="15" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">扫呗支付</el-checkbox>
|
||
<el-checkbox label="16" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">甘肃农信社</el-checkbox>
|
||
</el-checkbox-group>
|
||
</div>
|
||
</div>
|
||
</el-tab-pane> -->
|
||
<!-- 配送设置 -->
|
||
<!-- <el-tab-pane label="配送设置" name="deliverySetting" style="height: 600px;overflow-y: auto;">
|
||
<div style="width: 100%;height: auto;">
|
||
<div>
|
||
<span style="font-weight: bold;">启用本食堂独立规则</span>
|
||
<el-switch v-model="deliveryModel.ifEnableDelivery"
|
||
active-text="开启" inactive-text="关闭"
|
||
:active-value="1" :inactive-value="2"></el-switch>
|
||
</div>
|
||
<div style="margin: 10px;">
|
||
<el-checkbox-group v-model="deliveriesList" size="small">
|
||
<el-checkbox label="1" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">自取堂食</el-checkbox>
|
||
<el-checkbox label="2" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">商家配送</el-checkbox>
|
||
<el-checkbox label="3" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">取餐柜配送</el-checkbox><br>
|
||
<el-checkbox label="4" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">生鲜柜配送</el-checkbox>
|
||
<el-checkbox label="5" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">自取外带</el-checkbox>
|
||
<el-checkbox label="6" border style="width: 180px;background: #e8f0ff;margin-bottom: 10px;">取餐点自取</el-checkbox>
|
||
</el-checkbox-group>
|
||
</div>
|
||
</div>
|
||
</el-tab-pane> -->
|
||
<!-- 预订/点餐/报餐设置 -->
|
||
<el-tab-pane label="预订设置" name="orderSetting" style="height: 600px;overflow-y: auto;">
|
||
<el-form ref="orderDTO" :model="orderDTO" label-width="80px">
|
||
<el-row>
|
||
<el-col :span="12">
|
||
<el-form-item label="启用本档口独立规则" prop="ifEnableOrder" label-width="160px">
|
||
<el-switch
|
||
v-model="orderDTO.ifEnableOrder"
|
||
active-text="开启"
|
||
inactive-text="关闭"
|
||
:active-value="1"
|
||
:inactive-value="2">
|
||
</el-switch>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row>
|
||
<el-col :span="12">
|
||
<el-form-item label="允许预定餐预定当天" prop="ifAllowReserveToday" label-width="160px">
|
||
<el-switch
|
||
v-model="orderDTO.ifAllowReserveToday"
|
||
active-text="开启"
|
||
inactive-text="关闭"
|
||
active-value="1"
|
||
inactive-value="2">
|
||
</el-switch>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row>
|
||
<el-table :data="mealtimeList" height="400" >
|
||
<el-table-column label="餐次类型" align="center" prop="mealtimeName" width="100"/>
|
||
<el-table-column label="餐次时段" align="center" width="220">
|
||
<template slot-scope="scope">
|
||
<el-time-picker
|
||
is-range
|
||
v-model="scope.row.orderTimeList" style="width: 190px;"
|
||
range-separator="至" format="HH:mm:ss" value-format="HH:mm:ss"
|
||
start-placeholder="开始时间"
|
||
end-placeholder="结束时间"
|
||
placeholder="选择时间范围" @change="changeOrderTimeList(scope.row)">
|
||
</el-time-picker>
|
||
<!-- <span>{{scope.row.startTime}}</span>-<span>{{scope.row.endTime}}</span> -->
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column label="预定餐" align="center">
|
||
<el-table-column label="预定时段" align="center" width="220">
|
||
<template slot-scope="scope">
|
||
<el-time-picker
|
||
is-range :clearable="true"
|
||
v-model="scope.row.reserveTimeList" style="width: 190px;"
|
||
range-separator="至" format="HH:mm:ss" value-format="HH:mm:ss"
|
||
start-placeholder="开始时间"
|
||
end-placeholder="结束时间"
|
||
placeholder="选择时间范围" @change="changeReserveTimeList(scope.row)">
|
||
</el-time-picker>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column label="退单截止时间" align="center" width="150">
|
||
<template slot-scope="scope">
|
||
<el-time-picker
|
||
v-model="scope.row.reserveRefundDeadline" style="width: 120px;"
|
||
placeholder="选择时间">
|
||
</el-time-picker>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column label="自动打印时间" align="center" width="150">
|
||
<template slot-scope="scope">
|
||
<el-time-picker
|
||
v-model="scope.row.reservePrintTime" style="width: 120px;"
|
||
placeholder="选择时间">
|
||
</el-time-picker>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table-column>
|
||
<el-table-column label="当餐点餐" align="center">
|
||
<el-table-column label="点餐时段" align="center" width="220">
|
||
<template slot-scope="scope">
|
||
<el-time-picker
|
||
is-range :clearable="true"
|
||
v-model="scope.row.currTimeList" style="width: 190px;"
|
||
range-separator="至" format="HH:mm:ss" value-format="HH:mm:ss"
|
||
start-placeholder="开始时间"
|
||
end-placeholder="结束时间"
|
||
placeholder="选择时间范围" @change="changeCurrTimeList(scope.row)">
|
||
</el-time-picker>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column label="退单截止时间" align="center" width="150">
|
||
<template slot-scope="scope">
|
||
<el-time-picker
|
||
v-model="scope.row.currRefundDeadline" style="width: 120px;"
|
||
placeholder="选择时间">
|
||
</el-time-picker>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table-column>
|
||
<el-table-column label="状态" align="center" prop="ifUse" width="150">
|
||
<template slot-scope="scope">
|
||
<el-switch
|
||
v-model="scope.row.ifUse"
|
||
active-text="开启"
|
||
inactive-text="关闭"
|
||
:active-value="1"
|
||
:inactive-value="2">
|
||
</el-switch>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</el-row>
|
||
<div style="font-weight: bold;margin: 10px 0;">预订第二天及以后相关设置</div>
|
||
<el-row style="margin-bottom: 10px;">
|
||
<el-col :span="12">
|
||
<span>预订餐最多允许订</span><el-input style="width: 100px;margin: auto 5px;" maxlength="5" v-model="orderDTO.reserveLimitDay" @input="(v)=>(orderDTO.reserveLimitDay=v.replace(/[^\d]/g,''))"></el-input><span>天</span>
|
||
<el-checkbox v-model="orderDTO.ifReserveSkipHoliday" style="margin: auto 5px;" :true-label="1" :false-label="2">跳过节假日</el-checkbox>
|
||
</el-col>
|
||
<el-col :span="12">
|
||
<span>今天预订第二天餐次截止</span>
|
||
<el-time-picker
|
||
v-model="orderDTO.reserveEndTime" style="width: 120px;margin: auto 5px;" clearable
|
||
placeholder="选择时间">
|
||
</el-time-picker>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row style="margin-bottom: 10px;">
|
||
<el-col :span="12">
|
||
<span>每天</span>
|
||
<el-time-picker
|
||
v-model="orderDTO.reserveRefundEndTime" style="width: 120px;margin: auto 5px;" clearable
|
||
placeholder="选择时间">
|
||
</el-time-picker>
|
||
<span>系统自动确认次日订单,一经确认用户不可退</span>
|
||
</el-col>
|
||
</el-row>
|
||
</el-form>
|
||
</el-tab-pane>
|
||
</el-tabs>
|
||
|
||
<div slot="footer" class="dialog-footer">
|
||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||
<el-button @click="cancel">取 消</el-button>
|
||
</div>
|
||
</el-dialog>
|
||
|
||
|
||
<el-dialog title="选择负责人" :visible.sync="openJob" width="800px" append-to-body>
|
||
<el-form :model="dialogQueryParams" ref="dialogQueryForm" size="small" :inline="true" label-width="68px">
|
||
<el-form-item label="" prop="keyword">
|
||
<el-input v-model="dialogQueryParams.keyword" placeholder="请输入姓名,编号,手机号" clearable style="width: 240px"/>
|
||
</el-form-item>
|
||
<el-form-item label="" prop="job">
|
||
<el-select v-model="dialogQueryParams.job" placeholder="请选择职位" style="width: 100%;">
|
||
<el-option v-for="item in jobOptions"
|
||
:key="item.jobId"
|
||
:label="item.jobName"
|
||
:value="item.jobCode"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
<el-form-item>
|
||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleDialogQuery">搜索</el-button>
|
||
</el-form-item>
|
||
</el-form>
|
||
<el-table :data="jobTableData" height="500" highlight-current-row @current-change="handleCurrentChange">
|
||
<el-table-column label="负责人姓名" align="center" prop="custName" :show-overflow-tooltip="true"/>
|
||
<el-table-column label="负责人编号" align="center" prop="custNum" :show-overflow-tooltip="true"/>
|
||
<el-table-column label="负责人手机号" align="center" prop="mobile" :show-overflow-tooltip="true"/>
|
||
<el-table-column label="职位" align="center" prop="job" :show-overflow-tooltip="true"/>
|
||
<el-table-column label="所属组织" align="center" prop="orgFullName" :show-overflow-tooltip="true"/>
|
||
</el-table>
|
||
<pagination
|
||
v-show="dialogTotal>0"
|
||
:total="dialogTotal"
|
||
:page.sync="dialogQueryParams.pageNum"
|
||
:limit.sync="dialogQueryParams.pageSize"
|
||
@pagination="queryCustJobPage"
|
||
/>
|
||
|
||
<div slot="footer" class="dialog-footer">
|
||
<el-button type="primary" @click="confirmChosenCharger">确 定</el-button>
|
||
<el-button @click="openJob=false">取 消</el-button>
|
||
</div>
|
||
</el-dialog>
|
||
|
||
<el-dialog :visible.sync="dialogVisible">
|
||
<img width="100%" :src="dialogImageUrl" alt="">
|
||
</el-dialog>
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { systemAreaTreeApi } from "@/api/base/area";
|
||
import { getPageCanteenApi, getCanteenNumApi, addCanteenApi, getCanteenInfoModifyApi, updateCanteenApi, removeCanteenApi } from "@/api/base/canteen";
|
||
import { getCanteenLabelApi, queryAllCustJobApi, queryCustJobPageApi, getMealtimeListApi,changeIfReserveApi,changeBusinessStateApi,userListByRoleApi } from "@/api/base/canteen";
|
||
import { imgUpLoadTwo } from '@/api/system/upload'
|
||
export default {
|
||
name: "",
|
||
dicts: ['stall_tag'],
|
||
data() {
|
||
return {
|
||
// 遮罩层
|
||
loading: true,
|
||
// 选中数组
|
||
ids: [],
|
||
// 非单个禁用
|
||
single: true,
|
||
// 非多个禁用
|
||
multiple: true,
|
||
// 显示搜索条件
|
||
showSearch: true,
|
||
// 总条数
|
||
total: 0,
|
||
// 字典表格数据
|
||
tableListData: [],
|
||
// 弹出层标题
|
||
title: "",
|
||
// 是否显示弹出层
|
||
open: false,
|
||
treeOptions:[],//区域树
|
||
treeProps:{
|
||
multiple: true,
|
||
value:"id",
|
||
label:"treeName",
|
||
children:"children",
|
||
},
|
||
// 查询参数
|
||
queryParams: {
|
||
pageNum: 1,
|
||
pageSize: 10,
|
||
canteenName: undefined,
|
||
areaIds: [],
|
||
},
|
||
activeName:"baseSetting",
|
||
canteenId:"",//食堂数据-编辑
|
||
canteenData:{},//食堂数据-编辑
|
||
baseForm: {
|
||
"areaId": "",
|
||
"canteenName": "",
|
||
"canteenNum": "",
|
||
"capacity": "",
|
||
"contactTel": "",
|
||
"custId": "",
|
||
"endBusinessTime": "",
|
||
"startBusinessTime": "",
|
||
"ifBook": 2,
|
||
"ifEnablePayCode": 2,
|
||
"ifReserve": 2,
|
||
"imgUrl": "",
|
||
"labelNameList": []
|
||
},//基础设置
|
||
rangeTime:["08:00:00", "18:00:00"],//营业时间
|
||
// 表单校验
|
||
baseFormRules: {
|
||
canteenName: [
|
||
{ required: true, message: "食堂名称不能为空", trigger: "blur" }
|
||
],
|
||
areaId: [
|
||
{ required: true, message: "所属区域不能为空", trigger: "blur" }
|
||
],
|
||
contactTel: [
|
||
{
|
||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
|
||
message: '请输入正确的手机号码',
|
||
trigger: 'blur',
|
||
}
|
||
]
|
||
},
|
||
labelOptions:[],//食堂标签下拉
|
||
userOptions:[],//负责人下拉
|
||
//选择负责人弹窗
|
||
openJob: false,
|
||
jobOptions:[],//职位标签下拉
|
||
dialogQueryParams:{//负责人查询条件
|
||
pageNum: 1,
|
||
pageSize: 10,
|
||
},
|
||
jobTableData:[],//负责人弹窗
|
||
// 总条数
|
||
dialogTotal: 0,
|
||
currentCustRow:{},//选中的负责人数据
|
||
fileList: [],//食堂图片
|
||
checkUrlList: [],//食堂图片
|
||
checkUrlNameList: [],//食堂图片
|
||
dialogVisible:false,//图片弹窗
|
||
dialogImageUrl:"",//图片弹窗
|
||
payDTO:{
|
||
"ifEnablePay": "2",
|
||
"payMap": {},
|
||
"payTypes": ""
|
||
},//支付设置
|
||
payTypeList:[],//支付类型
|
||
deliveryModel:{//配送设置
|
||
"ifEnableDelivery": "2",
|
||
"deliveries": "",
|
||
"minDeliveryFeeOnOff": 1,
|
||
"deliveryList": [
|
||
{
|
||
"deliveryEndTime": "23:59:59",
|
||
"deliveryStartTime": "00:00:00",
|
||
"deliveryType": 2
|
||
},
|
||
{
|
||
"deliveryEndTime": "23:59:59",
|
||
"deliveryStartTime": "00:00:00",
|
||
"deliveryType": 3
|
||
},
|
||
{
|
||
"deliveryEndTime": "23:59:59",
|
||
"deliveryStartTime": "00:00:00",
|
||
"deliveryType": 4
|
||
},
|
||
{
|
||
"deliveryEndTime": "23:59:59",
|
||
"deliveryStartTime": "00:00:00",
|
||
"deliveryType": 5
|
||
},
|
||
{
|
||
"deliveryEndTime": "23:59:59",
|
||
"deliveryStartTime": "00:00:00",
|
||
"deliveryType": 6
|
||
}
|
||
],
|
||
},
|
||
deliveriesList:[],//配送类型
|
||
mealtimeList:[],//餐次列表
|
||
orderDTO: {//预定餐订单设置
|
||
"bookEndTime": "",
|
||
"bookRefundEndTime": "",
|
||
"cancelBookFeeRatio": "",
|
||
"dayBeforeCancelBookChargeTime": "",
|
||
"ifAllowReserveToday": "1",
|
||
"ifBookSkipHoliday": "",
|
||
"ifEnableOrder": 2,
|
||
"ifReserveSkipHoliday": "1",
|
||
"nearDinnerCancelBookChargeHour": "2",
|
||
"reportMealLimitDay": 0,
|
||
"reserveEndTime": "",
|
||
"reserveLimitDay": 0,
|
||
"reserveRefundEndTime": ""
|
||
},
|
||
};
|
||
},
|
||
created() {
|
||
this.getTreeData();
|
||
this.getList();
|
||
this.getCanteenLabel()
|
||
this.queryAllCustJob()
|
||
this.mgruserListByRole()
|
||
},
|
||
computed: {
|
||
//图片上传1张后,隐藏上传框
|
||
uploadDisabled() {
|
||
return this.checkUrlList.length > 0
|
||
},
|
||
},
|
||
methods: {
|
||
//区域树
|
||
getTreeData() {
|
||
systemAreaTreeApi({}).then((response) => {
|
||
this.treeOptions = response;
|
||
console.log(this.treeOptions)
|
||
});
|
||
},
|
||
handleTreeChange(e){
|
||
console.log(e)
|
||
},
|
||
/** 搜索按钮操作 */
|
||
handleQuery() {
|
||
this.queryParams.pageNum = 1;
|
||
this.getList();
|
||
},
|
||
/** 重置按钮操作 */
|
||
resetQuery() {
|
||
this.resetForm("queryForm");
|
||
this.handleQuery();
|
||
},
|
||
/** 查询列表 */
|
||
getList() {
|
||
this.loading = true;
|
||
let arr=[]
|
||
if(this.queryParams.areaIds.length>0){
|
||
this.queryParams.areaIds.forEach(item=>{
|
||
arr.push(item[item.length - 1])
|
||
})
|
||
}
|
||
let param = {
|
||
"current": this.queryParams.pageNum,
|
||
"size": this.queryParams.pageSize,
|
||
"canteenName": this.queryParams.canteenName,
|
||
"areaIdList":arr
|
||
}
|
||
getPageCanteenApi(param).then(response => {
|
||
this.tableListData = response.records;
|
||
this.total = Number(response.total);
|
||
this.loading = false;
|
||
});
|
||
},
|
||
|
||
//修改食堂是否支持预订餐
|
||
changeIfReserve(row){
|
||
let param = {
|
||
"canteenId": row.canteenId,
|
||
"ifReserve": row.ifReserve
|
||
}
|
||
changeIfReserveApi(param).then((response) => {
|
||
this.getList()
|
||
});
|
||
},
|
||
|
||
handleTabClick(tab, event) {
|
||
console.log(tab, event);
|
||
},
|
||
/** 新增按钮操作 */
|
||
handleAdd() {
|
||
this.canteenId=""
|
||
this.reset();
|
||
this.getMealtimeList()
|
||
this.activeName="baseSetting"
|
||
this.open = true;
|
||
this.title = "新增";
|
||
},
|
||
// 取消按钮
|
||
cancel() {
|
||
this.open = false;
|
||
this.reset();
|
||
},
|
||
// 表单重置
|
||
reset() {
|
||
this.fileList=[]
|
||
this.checkUrlList=[]
|
||
this.baseForm = {};
|
||
this.orderDTO = {//预定餐订单设置
|
||
"bookEndTime": "",
|
||
"bookRefundEndTime": "",
|
||
"cancelBookFeeRatio": "",
|
||
"dayBeforeCancelBookChargeTime": "",
|
||
"ifAllowReserveToday": "1",
|
||
"ifBookSkipHoliday": "",
|
||
"ifEnableOrder": 2,
|
||
"ifReserveSkipHoliday": "1",
|
||
"nearDinnerCancelBookChargeHour": "2",
|
||
"reportMealLimitDay": 0,
|
||
"reserveEndTime": "",
|
||
"reserveLimitDay": 0,
|
||
"reserveRefundEndTime": ""
|
||
}
|
||
this.rangeTime=["08:00:00", "18:00:00"]
|
||
this.resetForm("baseForm");
|
||
},
|
||
/** 修改按钮操作 */
|
||
handleUpdate(row) {
|
||
console.log(row)
|
||
this.reset();
|
||
this.activeName="baseSetting"
|
||
getCanteenInfoModifyApi({"canteenId":row.canteenId}).then(response => {
|
||
console.log(response)
|
||
this.canteenId = response.canteenId;
|
||
this.baseForm = response.canteenSaveDTO;
|
||
// this.getCanteenNum()
|
||
if(response.canteenSaveDTO.imgUrl){
|
||
this.fileList=[{url:response.canteenSaveDTO.imgUrl}]
|
||
this.checkUrlList=[response.canteenSaveDTO.imgUrl]
|
||
}else{
|
||
this.fileList=[]
|
||
this.checkUrlList=[]
|
||
}
|
||
this.rangeTime=[response.canteenSaveDTO.startBusinessTime, response.canteenSaveDTO.endBusinessTime]
|
||
this.deliveryModel = response.deliveryModel;
|
||
this.orderDTO = response.orderDTO;
|
||
this.payDTO = response.payDTO;
|
||
this.mealtimeList = response.mealtimeList;
|
||
this.mealtimeList.forEach(item=>{
|
||
this.$set(item,"orderTimeList",[item.startTime,item.endTime])
|
||
this.$set(item,"reserveTimeList",[item.reserveStartTime||'',item.reserveEndTime||''])
|
||
this.$set(item,"currTimeList",[item.currStartTime||'',item.currEndTime||''])
|
||
})
|
||
this.open = true;
|
||
this.title = "修改";
|
||
});
|
||
},
|
||
/** 删除按钮操作 */
|
||
handleDelete(row) {
|
||
this.$modal.confirm('是否确认删除数据项?').then(function() {
|
||
return removeCanteenApi({"canteenId":row.canteenId});
|
||
}).then(() => {
|
||
this.getList();
|
||
this.$modal.msgSuccess("删除成功");
|
||
}).catch(() => {});
|
||
},
|
||
/** 休息按钮操作 */
|
||
handleRest(row) {
|
||
let param = {
|
||
"businessState": 1,
|
||
"canteenTreeType": 1,
|
||
"modifyId": row.canteenId
|
||
}
|
||
this.$modal.confirm('是否确认休息?').then(function() {
|
||
return changeBusinessStateApi(param);
|
||
}).then(() => {
|
||
this.getList();
|
||
this.$modal.msgSuccess("操作成功");
|
||
}).catch(() => {});
|
||
},
|
||
/** 营业按钮操作 */
|
||
handleBuss(row) {
|
||
let param = {
|
||
"businessState": 2,
|
||
"canteenTreeType": 1,
|
||
"modifyId": row.canteenId
|
||
}
|
||
this.$modal.confirm('是否确认营业?').then(function() {
|
||
return changeBusinessStateApi(param);
|
||
}).then(() => {
|
||
this.getList();
|
||
this.$modal.msgSuccess("操作成功");
|
||
}).catch(() => {});
|
||
},
|
||
/** 提交按钮 */
|
||
submitForm: function() {
|
||
console.log(this.baseForm)
|
||
console.log(this.rangeTime)
|
||
this.$refs["baseForm"].validate(valid => {//基本设置表单校验
|
||
if (valid) {
|
||
this.baseForm.startBusinessTime=this.rangeTime[0]
|
||
this.baseForm.endBusinessTime=this.rangeTime[1]
|
||
this.baseForm.imgUrl = this.checkUrlList[0]
|
||
let param ={
|
||
"canteenSaveDTO": this.baseForm,
|
||
"payDTO": this.payDTO,
|
||
"deliveryModel": {//配送设置
|
||
"deliveries": "",
|
||
"deliveryList": [
|
||
{
|
||
"deliveryEndTime": "23:59:59",
|
||
"deliveryStartTime": "00:00:00",
|
||
"deliveryType": 2
|
||
},
|
||
{
|
||
"deliveryEndTime": "23:59:59",
|
||
"deliveryStartTime": "00:00:00",
|
||
"deliveryType": 3
|
||
},
|
||
{
|
||
"deliveryEndTime": "23:59:59",
|
||
"deliveryStartTime": "00:00:00",
|
||
"deliveryType": 4
|
||
},
|
||
{
|
||
"deliveryEndTime": "23:59:59",
|
||
"deliveryStartTime": "00:00:00",
|
||
"deliveryType": 5
|
||
},
|
||
{
|
||
"deliveryEndTime": "23:59:59",
|
||
"deliveryStartTime": "00:00:00",
|
||
"deliveryType": 6
|
||
}
|
||
],
|
||
"ifEnableDelivery": "2",
|
||
"minDeliveryFeeOnOff": 1
|
||
},
|
||
"orderDTO": this.orderDTO,
|
||
"mealtimeList":this.mealtimeList
|
||
}
|
||
if (this.canteenId != "") {
|
||
param.canteenId = this.canteenId
|
||
updateCanteenApi(param).then(response => {
|
||
this.$modal.msgSuccess("修改成功");
|
||
this.open = false;
|
||
this.getList();
|
||
});
|
||
} else {
|
||
addCanteenApi(param).then(response => {
|
||
this.$modal.msgSuccess("新增成功");
|
||
this.open = false;
|
||
this.getList();
|
||
});
|
||
}
|
||
}
|
||
});
|
||
},
|
||
//基础设置-选择区域
|
||
handleTreeChange2(val){
|
||
if(val){
|
||
setTimeout(()=>{
|
||
this.getCanteenNum()
|
||
},500)
|
||
}
|
||
},
|
||
//获取食堂编号
|
||
async getCanteenNum() {
|
||
let params= {
|
||
"superId":this.baseForm.areaId,
|
||
"canteenTreeType":1
|
||
}
|
||
const res = await getCanteenNumApi(params);
|
||
this.$set(this.baseForm,"canteenNum",res.data)
|
||
},
|
||
//查询食堂标签下拉
|
||
getCanteenLabel() {
|
||
// let param = { "current": 1,"size": -1}
|
||
// getCanteenLabelApi(param).then((response) => {
|
||
// this.labelOptions = response.records;
|
||
// });
|
||
},
|
||
//商户类用户
|
||
mgruserListByRole(){
|
||
let param = {
|
||
"roleKey": "ROLE_MERCHANT"
|
||
}
|
||
userListByRoleApi(param).then(response => {
|
||
this.userOptions = response.rows
|
||
});
|
||
},
|
||
//选中
|
||
chosenUser(e){
|
||
let obj = {}
|
||
this.userOptions.forEach(item=>{
|
||
if(item.userId == e){
|
||
obj=item
|
||
}
|
||
})
|
||
this.$set(this.baseForm,"custName",obj.userName)
|
||
this.$set(this.baseForm,"contactTel",obj.phonenumber)
|
||
},
|
||
//选择负责人
|
||
openChosenCharger(){
|
||
this.queryCustJobPage()
|
||
this.currentCustRow = {}
|
||
this.openJob=true
|
||
},
|
||
//人员职位职称下拉
|
||
queryAllCustJob() {
|
||
queryAllCustJobApi({}).then((response) => {
|
||
this.jobOptions = response.data
|
||
console.log(response)
|
||
});
|
||
},
|
||
//负责人弹窗-查询按钮
|
||
handleDialogQuery(){
|
||
this.dialogQueryParams.pageNum=1
|
||
this.queryCustJobPage()
|
||
},
|
||
//负责人弹窗-人员分页查询接口
|
||
queryCustJobPage() {
|
||
let param = {
|
||
"current": this.dialogQueryParams.pageNum,
|
||
"ifQueryJob": 1,
|
||
"size": this.dialogQueryParams.pageSize,
|
||
"job": this.dialogQueryParams.job,
|
||
"keyword": this.dialogQueryParams.keyword
|
||
}
|
||
queryCustJobPageApi(param).then((response) => {
|
||
this.jobTableData = response.records
|
||
this.dialogTotal = Number(response.total);
|
||
console.log(response)
|
||
});
|
||
},
|
||
handleCurrentChange(val) {
|
||
console.log(val)
|
||
this.currentCustRow = val;
|
||
},
|
||
confirmChosenCharger(){
|
||
if(this.currentCustRow != {}){
|
||
this.baseForm.custName = this.currentCustRow.custName;
|
||
this.baseForm.custId = this.currentCustRow.custId;
|
||
this.$set(this.baseForm,"contactTel",this.currentCustRow.mobile)
|
||
}else{
|
||
this.baseForm.custName = this.baseForm.custName||""
|
||
this.baseForm.custId = this.baseForm.custId||""
|
||
this.$set(this.baseForm,"contactTel",this.baseForm.contactTel||"")
|
||
}
|
||
this.openJob=false
|
||
},
|
||
// 食堂图片上传
|
||
handleRemove(file, fileList) {
|
||
console.log(file, fileList);
|
||
},
|
||
handlePictureCardPreview(file) {
|
||
this.dialogImageUrl = file.url;
|
||
this.dialogVisible = true;
|
||
},
|
||
openImg(row) {
|
||
this.dialogImageUrl = row.imgUrl;
|
||
this.dialogVisible = true;
|
||
},
|
||
// 图片上传
|
||
imgUpLoad(param, name, index) {
|
||
// console.log(param,'image')
|
||
param.type = 'canteen'
|
||
imgUpLoadTwo(param).then((res) => {
|
||
if (res.code == 200) {
|
||
this.checkUrlList.push(res.data.url)
|
||
this.checkUrlNameList.push(res.data.name)
|
||
} else {
|
||
this.$modal.msgError(res.msg)
|
||
}
|
||
})
|
||
.catch((error) => {
|
||
this.$modal.msgError(error)
|
||
})
|
||
},
|
||
handleAvatarSuccess(res, file) {
|
||
console.log('success')
|
||
},
|
||
handleExceed(files, fileList) {
|
||
this.$message.warning('最多只可以上传一张图片')
|
||
},
|
||
handleRemove(file, fileList) {
|
||
let sum = 0
|
||
this.checkUrlNameList.forEach((item, index) => {
|
||
if (item == file.name) {
|
||
sum = index
|
||
}
|
||
})
|
||
this.checkUrlNameList.splice(sum, 1)
|
||
this.checkUrlList.splice(sum, 1)
|
||
},
|
||
//图片点击查看
|
||
handlePictureCardPreview(file) {
|
||
console.log(file)
|
||
this.dialogImageUrl = file.url
|
||
this.dialogVisible = true
|
||
},
|
||
//查询餐次时段列表
|
||
getMealtimeList() {
|
||
getMealtimeListApi({}).then((response) => {
|
||
this.mealtimeList = response;
|
||
this.mealtimeList.forEach(item=>{
|
||
this.$set(item,"orderTimeList",[item.startTime,item.endTime])
|
||
this.$set(item,"reserveTimeList",['',''])
|
||
this.$set(item,"currTimeList",['',''])
|
||
})
|
||
});
|
||
},
|
||
changeOrderTimeList(row){
|
||
console.log(row)
|
||
row.startTime = row.orderTimeList[0]
|
||
row.endTime = row.orderTimeList[1]
|
||
},
|
||
changeReserveTimeList(row){ //item.reserveStartTime,item.reserveEndTime
|
||
console.log(row)
|
||
if(row.reserveTimeList){
|
||
row.reserveStartTime = row.reserveTimeList[0]
|
||
row.reserveEndTime = row.reserveTimeList[1]
|
||
}
|
||
},
|
||
changeCurrTimeList(row){ //item.currStartTime,item.currEndTime
|
||
console.log(row)
|
||
if(row.currTimeList){
|
||
row.currStartTime = row.currTimeList[0]
|
||
row.currEndTime = row.currTimeList[1]
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
}
|
||
};
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
//隐藏图片上传框的css
|
||
::v-deep.disabled {
|
||
.el-upload--picture-card {
|
||
display: none;
|
||
}
|
||
}
|
||
</style>
|
||
|