You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

238 lines
11 KiB

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>简易点菜系统</title>
<link href="/css/index.css" rel="stylesheet">
<link rel="stylesheet" href="/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<style>
.order-frame {
width: 700px
}
.action {
cursor: pointer;
}
</style>
<script th:inline="javascript">
onload = function () {
let item = document.getElementsByClassName('fff')
for (let i in item) {
item[i].innerHTML += getSelect()
}
}
function getSelect() {
let fenlei = [[${fenlei}]]
let fenleistr = ''
for (let item in fenlei) {
fenleistr += `<option value="${fenlei[item]}">${fenlei[item]}</option>`
}
let count=document.querySelectorAll('select[name$=cailiao]').length
return `<select class="custom-select" name="diancans[${count}].fenlei" onchange="changeFenLei(this,this.parentElement.querySelector('select[name$=pinmu]'),this.parentElement.querySelector('select[name$=cailiao]'))">
<option selected>请选择分类</option>
${fenleistr}
</select>
<select class="custom-select" name="diancans[${count}].pinmu" onchange="changePinmu(this.parentElement.querySelector('select[name$=fenlei]'),this,this.parentElement.querySelector('select[name$=cailiao]'))">
<option selected>请选择品目</option>
</select>
<select class="custom-select" name="diancans[${count}].cailiao" required oninvalid="setCustomValidity('请选择材料')" onchange="changeCailiao(document.querySelectorAll('select[name$=cailiao]'))">
<option selected value="">请选择材料</option>
</select>
<input type="text" class="form-control" name="diancans[${count}].sum" placeholder="做法或数量" onchange="changeCailiao(document.querySelectorAll('select[name$=cailiao]'))">`
}
function plus(s) {
let div = document.createElement('div')
div.classList.add('input-group', 'mt-3', 'order-frame')
div.innerHTML = `<div class="col-3 text-right mt-auto mb-auto">
<img src="/icon/plus.svg" class="icon action" onclick="plus(this)"/>
<img src="/icon/minus.svg" class="icon action" onclick="minus(this)"/>
</div>
${getSelect()}
`
list.appendChild(div)
if (list.childElementCount > 1) {
add.classList.add('d-none')
}
}
function minus(s) {
list.removeChild(s.parentElement.parentElement)
if (list.childElementCount === 1) {
add.classList.remove('d-none')
}
changeCailiao(document.querySelectorAll('select[name$=cailiao]'))
}
function changeFenLei(fenlei, pinmu, cailiao) {
pinmu.innerHTML = '<option selected>请选择品目</option>'
cailiao.innerHTML = '<option selected>请选择材料</option>'
fetch(new Request('/api/getPinMu?fenlei=' + fenlei.value)).then(res => res.json()).then(res => {
for (let index in res) {
pinmu.innerHTML += `<option>${res[index]}</option>`
}
})
let sum=fenlei.parentElement.querySelector('input[name$=sum]')
if (fenlei.value === '正菜') {
sum.setAttribute('type', 'text')
} else {
sum.setAttribute('type', 'number')
sum.value=1
}
changeCailiao(document.querySelectorAll('select[name$=cailiao]'))
}
function changePinmu(fenlei, pinmu, cailiao) {
cailiao.innerHTML = '<option selected>请选择材料</option>'
fetch(new Request(`/api/getMenu?fenlei=${fenlei.value}&pinmu=${pinmu.value}`)).then(res => res.json()).then(res => {
for (let index in res) {
cailiao.innerHTML += `<option value="${res[index].id}" jine="${res[index].jiage}">${res[index].cailiao}</option>`
}
})
changeCailiao(document.querySelectorAll('select[name$=cailiao]'))
}
function changeCailiao(cailiao) {
let sum = 0
for (let index in cailiao) {
if (cailiao[index].value !== '' && cailiao[index].selectedIndex) {
if(cailiao[index].selectedIndex!==0){
cailiao[index].setCustomValidity('')
}
let option = cailiao[index].childNodes[cailiao[index].selectedIndex]
let value=cailiao[index].parentElement.querySelector('input[name$=sum]').value
sum += parseInt(option.getAttribute('jine'))*(/^\d+$/.test(value)?value:1)
}
}
jine.value = sum
}
function birthdayValid(shijian) {
shijian.removeAttribute('required')
shijian.setCustomValidity('')
}
function changeBirthday(shijian) {
shijian.setAttribute('required','required')
}
function hasYuding(zhuohao) {
fetch(new Request(`/api/hasYuding?zhuohao=${zhuohao.value}`)).then(res=>res.json()).then(res=>{
if(res){
alert(`桌号${zhuohao.value}已预定!`)
zhuohao.value=''
}
})
}
function checkMobie() {
let mobie=document.querySelector('input[name=tel]')
if(mobie.value.length>0&&!/^\d{11}$/.test(mobie.value)){
mobie.setCustomValidity('手机号不合法')
}else {
mobie.setCustomValidity('')
}
}
</script>
</head>
<body>
<div class="container">
<div class="frame">
<span th:text="${span_name}"></span>
<form method="post" action="/api/order">
<div class="input-group mt-3">
<div class="input-group-prepend col-3 pr-2 justify-content-end">
<span class="input-group-text">桌号</span>
</div>
<input type="text" name="zhuohao" class="form-control col-4" required oninvalid="setCustomValidity('桌号不能为空')" oninput="setCustomValidity('');hasYuding(this)">
<div class="input-group-prepend col-3 pr-2 justify-content-end">
<span class="input-group-text">客人姓名</span>
</div>
<input type="text" name="xingming" class="form-control col-4" oninvalid="setCustomValidity('姓名不能为空')" oninput="setCustomValidity('');" required maxlength="15">
</div>
<div class="input-group mt-3">
<div class="input-group-prepend col-3 pr-2 justify-content-end">
<span class="input-group-text">用餐时间</span>
</div>
<div class="custom-control custom-radio custom-control-inline mt-auto mb-auto">
<input type="radio" id="customRadioInline1" name="birthday" checked
class="custom-control-input" value="1" onclick="birthdayValid(this.parentElement.parentElement.querySelector('input[name=shijian]'))">
<label class="custom-control-label" for="customRadioInline1">及时单</label>
</div>
<div class="custom-control custom-radio custom-control-inline mt-auto mb-auto">
<input type="radio" id="customRadioInline2" value="2" name="birthday" class="custom-control-input" onclick="changeBirthday(this.parentElement.parentElement.querySelector('input[name=shijian]'))">
<label class="custom-control-label" for="customRadioInline2">指定</label>
</div>
<input type="text" name="shijian" oninput="setCustomValidity('')" oninvalid="setCustomValidity('时间不能为空')" class="form-control col-4">
</div>
<div class="input-group mt-3">
<div class="input-group-prepend col-3 pr-2 justify-content-end">
<span class="input-group-text">用餐人数</span>
</div>
<input type="number" value="1" name="renshu" class="form-control col-4">
</div>
<div class="input-group mt-3">
<div class="input-group-prepend col-3 pr-2 justify-content-end">
<span class="input-group-text">联系方式(手机)</span>
</div>
<input type="text" name="tel" oninput="checkMobie()" class="form-control col-4">
</div>
<div class="input-group mt-3 order-frame fff">
<div class="input-group-prepend col-3 pr-2 justify-content-end">
<span class="input-group-text">点餐区</span>
</div>
</div>
<div id="list">
<div class="input-group mt-3 order-frame d-none" id="add">
<div class="col-3 text-right mt-auto mb-auto">
<img src="/icon/plus.svg" class="icon action" onclick="plus(this)"/>
</div>
</div>
<div class="input-group mt-3 order-frame fff">
<div class="col-3 text-right mt-auto mb-auto">
<img src="/icon/plus.svg" class="icon action" onclick="plus(this)"/>
<img src="/icon/minus.svg" class="icon action" onclick="minus(this)"/>
</div>
</div>
</div>
<div class="input-group mt-3 justify-content-end">
<div class="input-group-prepend">
<span class="input-group-text">预结金额</span>
</div>
<input type="text" id="jine" name="jine" class="form-control col-2" readonly>
</div>
<div class="input-group mt-3">
<div class="input-group-prepend">
<span class="input-group-text">备注</span>
</div>
<textarea class="form-control" name="beizhu" aria-label="With textarea"></textarea>
</div>
<div class="mt-3 text-right">
<button class="btn btn-secondary col-3">提交</button>
</div>
</form>
</div>
</div>
</body>
</html>