|
@@ -1,76 +1,74 @@
|
|
|
<template>
|
|
|
<div class="background">
|
|
|
- <div class="body-layer">
|
|
|
- <div class="current">
|
|
|
- <div class="current-in-total">出酒进度 [{{ index + 1 }} / {{ order.length }}]</div>
|
|
|
- <div class="process">
|
|
|
- <div class="process-bar">
|
|
|
- <div class="process-complete" :style="`width: ${percent}%;`"></div>
|
|
|
- </div>
|
|
|
- <div class="process-percent">{{ percent }} %</div>
|
|
|
- </div>
|
|
|
- <div class="process-detail">
|
|
|
- <span>{{ weight }}/{{ totalWeight }} 两</span>
|
|
|
- <span>{{ volume }}/{{ totalVolume }} ML</span>
|
|
|
+ <div class="stage-box">
|
|
|
+ <div class="stage-line">
|
|
|
+ <div class="stage-complete" :style="`width: ${stage_percent}%`"></div>
|
|
|
+ </div>
|
|
|
+ <div class="stage-nodes">
|
|
|
+ <div v-for="(name, index) in stage.nodes" :class="stage_class(index)" :key="index">
|
|
|
+ <div class="stage-node-node">〇</div>
|
|
|
+ <div class="stage-node-text">{{ name }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <table class="queue">
|
|
|
- <caption>出酒队列</caption>
|
|
|
- <thead>
|
|
|
- <tr>
|
|
|
- <th class="col-1">序号</th>
|
|
|
- <th class="col-2">酒品</th>
|
|
|
- <th class="col-3">名称</th>
|
|
|
- <th class="col-4">重量(两)</th>
|
|
|
- <th class="col-5">体积(ML)</th>
|
|
|
- <th class="col-6">状态</th>
|
|
|
- </tr>
|
|
|
- </thead>
|
|
|
- <tbody>
|
|
|
- <tr v-for="(wine, index) in order" :key="index">
|
|
|
- <td>{{ index + 1 }}</td>
|
|
|
- <td class="wine-image"><img :src="wine.picture" alt="..."></td>
|
|
|
- <td>{{ wine.name }}</td>
|
|
|
- <td>{{ wine.weight }}</td>
|
|
|
- <td>{{ wine.volume }}</td>
|
|
|
- <td :class="class_of(index)">{{ status_of(index) }}</td>
|
|
|
- </tr>
|
|
|
- </tbody>
|
|
|
- </table>
|
|
|
</div>
|
|
|
- <div class="mask-layer" v-if="mask.show">
|
|
|
- <div class="mask-box">
|
|
|
- <div class="mask-title-box">
|
|
|
- <div class="mask-title">{{ mask.title }}</div>
|
|
|
- <div :style="`color: ${mask.color};`">{{ mask.subtitle }}</div>
|
|
|
+ <div class="progress" v-if="stage.current > 0">
|
|
|
+ <div class="wine-name">{{ wine.name }}</div>
|
|
|
+ <div class="process">
|
|
|
+ <div class="process-bar">
|
|
|
+ <div class="process-complete" :style="`width: ${outed_percent}%;`"></div>
|
|
|
</div>
|
|
|
- <img class="mask-icon" :src="mask.icon" alt="...">
|
|
|
- <div class="mask-btn" v-if="mask.btn.need" @click="mask.btn.handler">{{ mask.btn.text }}</div>
|
|
|
+ <div class="process-percent">{{ outed_percent }} %</div>
|
|
|
+ </div>
|
|
|
+ <div class="process-detail">
|
|
|
+ <span>{{ outed_weight }}/{{ wine.weight }} 两</span>
|
|
|
+ <span>{{ outed_volume }}/{{ wine.volume }} ML</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+const AudioWine1 = new Audio(`${process.env.BASE_URL}audio/wine-out-1.mp3`),
|
|
|
+ AudioWine2 = new Audio(`${process.env.BASE_URL}audio/wine-out-2.mp3`),
|
|
|
+ AudioWine3 = new Audio(`${process.env.BASE_URL}audio/wine-out-3.mp3`),
|
|
|
+ AudioWine4 = new Audio(`${process.env.BASE_URL}audio/wine-out-4.mp3`),
|
|
|
+ AudioDontMove = new Audio(`${process.env.BASE_URL}audio/dont-move-your-cell.mp3`),
|
|
|
+ AudioMoved = new Audio(`${process.env.BASE_URL}audio/move-detected.mp3`),
|
|
|
+ AudioWineFinish = new Audio(`${process.env.BASE_URL}audio/wine-out-finish.mp3`),
|
|
|
+ Map = [["一号", AudioWine1], ["二号", AudioWine2], ["三号", AudioWine3], ["四号", AudioWine4]],
|
|
|
+ AudioAllPause = () => {
|
|
|
+ AudioWine1.pause();
|
|
|
+ AudioWine1.load();
|
|
|
+ AudioWine2.pause();
|
|
|
+ AudioWine2.load();
|
|
|
+ AudioWine3.pause();
|
|
|
+ AudioWine3.load();
|
|
|
+ AudioWine4.pause();
|
|
|
+ AudioWine4.load();
|
|
|
+ AudioDontMove.pause();
|
|
|
+ AudioDontMove.load();
|
|
|
+ AudioMoved.pause();
|
|
|
+ AudioMoved.load();
|
|
|
+ AudioWineFinish.pause();
|
|
|
+ AudioWineFinish.load();
|
|
|
+ },
|
|
|
+ Gap = 100, Hold = 50;
|
|
|
+let Timer = null, InFinish = false;
|
|
|
export default {
|
|
|
name: "WineOutPage",
|
|
|
- props: {
|
|
|
- order: {
|
|
|
- type: Array,
|
|
|
- required: true
|
|
|
- }
|
|
|
- },
|
|
|
data() {
|
|
|
return {
|
|
|
- index: -1,
|
|
|
- volume: 0,
|
|
|
- mask: {
|
|
|
- show: false,
|
|
|
- title: "",
|
|
|
- subtitle: "",
|
|
|
- color: "",
|
|
|
- icon: "",
|
|
|
- btn: {need: false, text: "", handler: null}
|
|
|
+ stage: {
|
|
|
+ nodes: ["准备", "开始", "结束", "完成"],
|
|
|
+ current: 0
|
|
|
+ },
|
|
|
+ info: {
|
|
|
+ cupW10g: 0,
|
|
|
+ pulse: 0
|
|
|
+ },
|
|
|
+ wine: {
|
|
|
+ id: 0, name: "", price: 0, density: 0, picture: "", describe: "", remain: 0, ppv: 0,
|
|
|
+ price_in_yuan: 0, remain_in_weight: 0, cell: 0, weight: 0, w10g: 0, volume: 0, pulse: 0
|
|
|
}
|
|
|
}
|
|
|
},
|
|
@@ -78,149 +76,141 @@ export default {
|
|
|
get_icon(name) {
|
|
|
return `${process.env.BASE_URL}icon/${name}.svg`;
|
|
|
},
|
|
|
- Enter() {
|
|
|
- this.index = -1;
|
|
|
- this.volume = 0;
|
|
|
- this.mask = {
|
|
|
- show: true,
|
|
|
- title: "温馨提示",
|
|
|
- subtitle: "请将容器静置于出酒口正下方",
|
|
|
- color: "red",
|
|
|
- icon: this.get_icon("cup"),
|
|
|
- btn: {need: false, text: "", handler: null}
|
|
|
- }
|
|
|
- this.$utils.Android("isCupProperlyPlaced");
|
|
|
- },
|
|
|
- Leave() {
|
|
|
- this.index = -1;
|
|
|
+ Start(index) {
|
|
|
+ InFinish = false;
|
|
|
+ this.stage.current = 0;
|
|
|
+ this.info = {cupW10g: 0, pulse: 0};
|
|
|
+ this.wine = this.$utils.Wines[index];
|
|
|
+ this.debug = this.$utils.DebugMode;
|
|
|
+ this.$utils.EventBus["ShowAlert"]({
|
|
|
+ title: "温馨提示", subtitle: `请将容器静置于${Map[this.wine.cell][0]}出酒口正下方`,
|
|
|
+ color: "red", icon: this.get_icon("cup")
|
|
|
+ });
|
|
|
+ AudioAllPause();
|
|
|
+ Map[this.wine.cell][1].play();
|
|
|
+ this.$utils.EventBus["debug"](`command: light-on[${this.wine.cell}]`);
|
|
|
+ this.$utils.Android("lightOn", this.wine.cell);
|
|
|
+ setTimeout(() => {
|
|
|
+ this.$utils.EventBus["debug"]("continually command: read-weight");
|
|
|
+ this.$utils.Android("isCupProperlyPlaced");
|
|
|
+ }, Gap);
|
|
|
},
|
|
|
- _onCupProperlyPlaced() {
|
|
|
- this.index++;
|
|
|
- this.volume = 0;
|
|
|
- this.beforeOutWine();
|
|
|
+ Over() {
|
|
|
+ InFinish = false;
|
|
|
+ this.stage.current = 0;
|
|
|
+ this.debug = false;
|
|
|
+ this.info = {cupW10g: 0, pulse: 0};
|
|
|
},
|
|
|
_onErrorHappened(reason) {
|
|
|
- this.$utils.Android("closeValveOf", this.order[this.index].cell);
|
|
|
- this.$utils.Android("blowOutRemain");
|
|
|
- this.mask = {
|
|
|
- show: true,
|
|
|
- title: "发生故障",
|
|
|
- subtitle: reason,
|
|
|
- color: "red",
|
|
|
- icon: this.get_icon("error"),
|
|
|
- btn: {
|
|
|
- need: true, text: "确 认", handler: () => {
|
|
|
- this.mask.show = false;
|
|
|
- this.btn.need = false;
|
|
|
- this.btn.handler = null;
|
|
|
- }
|
|
|
+ this.$utils.EventBus["debug"](`error: ${reason}`);
|
|
|
+ this.$utils.EventBus["debug"](`command: close-valve[${this.wine.cell}]`);
|
|
|
+ this.$utils.Android("closeValve", this.wine.cell);
|
|
|
+ setTimeout(() => {
|
|
|
+ this.$utils.EventBus["debug"](`command: light-off[${this.wine.cell}]`);
|
|
|
+ this.$utils.Android("lightOff", this.wine.cell);
|
|
|
+ }, Gap);
|
|
|
+ this.$utils.EventBus["ShowAlert"]({
|
|
|
+ title: "发生故障", subtitle: `请联系管理人员:${reason}`, color: "red", icon: this.get_icon("error"),
|
|
|
+ button: {need: true, text: "确 认 并 返 回"}, callback: () => this.$emit("out2list")
|
|
|
+ });
|
|
|
+ },
|
|
|
+ _onCupProperlyPlaced(w10g) {
|
|
|
+ this.$utils.EventBus["debug"](`steady cup weight: ${w10g}`);
|
|
|
+ this.info.cupW10g = w10g;
|
|
|
+ AudioAllPause();
|
|
|
+ AudioDontMove.play();
|
|
|
+
|
|
|
+ let sec = this.$utils.ParamMap.WaitCountDown;
|
|
|
+ this.$utils.EventBus["ShowAlert"]({
|
|
|
+ title: "温馨提示", subtitle: `将在${sec}秒后自动开始出酒`, color: "green", icon: this.wine.picture,
|
|
|
+ button: {need: true, text: "开 始 出 酒", countdown: sec}, callback: () => {
|
|
|
+ this.stage.current = 1;
|
|
|
+ Timer = setTimeout(() => this._onErrorHappened("酒水不足-1"), 3000);
|
|
|
+ this.$utils.EventBus["debug"](`command: open-valve[${this.wine.cell}] for pulses[${this.wine.pulse}]`);
|
|
|
+ this.$utils.Android("openValve", this.wine.cell, this.wine.pulse); // cell号酒, 一共pulse个流量脉冲
|
|
|
}
|
|
|
- }
|
|
|
+ });
|
|
|
},
|
|
|
- _onVolumeDelta(v) {
|
|
|
- this.volume = v;
|
|
|
- if (v >= this.order[this.index].volume) {
|
|
|
- this.volume = this.order[this.index].volume;
|
|
|
- this.$utils.Android("closeValveOf", this.order[this.index].cell);
|
|
|
- this.$utils.Android("blowOutRemain");
|
|
|
- }
|
|
|
+ _onVolumePulse(p) {
|
|
|
+ this.clear_timer();
|
|
|
+ Timer = setTimeout(() => this._onErrorHappened("酒水不足-2"), 1000);
|
|
|
+ this.info.pulse = p;
|
|
|
+ this.$utils.EventBus["debug"](`receive pulse[${p}], total pulse[${this.info.pulse}], aim pulse[${this.wine.pulse}]`);
|
|
|
+ if (this.info.pulse >= this.wine.pulse) this.maybeFinish();
|
|
|
},
|
|
|
- _onBlowOutFinished() {
|
|
|
- if (this.index === this.order.length - 1) {
|
|
|
- this.allWineFinished();
|
|
|
- } else {
|
|
|
- this.someWineFinished();
|
|
|
+ _onSteadyWeight(w10g) {
|
|
|
+ let w_real = w10g - this.info.cupW10g,
|
|
|
+ gap = this.wine.w10g - w_real,
|
|
|
+ ppv = Math.ceil(this.wine.w10g / w_real * this.wine.ppv);
|
|
|
+ this.$utils.EventBus["debug"](`steady weight[${w10g}], remove cup[${w_real}], aim weight[${this.wine.w10g}], gap[${gap}]`);
|
|
|
+ if (gap > Hold) {
|
|
|
+ this.$utils.EventBus["debug"](`gap[${gap}] > hold[${Hold}], suggest to adjust ppv[${this.wine.ppv} => ${ppv}]`);
|
|
|
+ } else if (gap < -Hold) {
|
|
|
+ this.$utils.EventBus["debug"](`gap[${gap}] < -hold[${-Hold}], suggest to adjust ppv[${this.wine.ppv} => ${ppv}]`);
|
|
|
}
|
|
|
+
|
|
|
+ AudioAllPause();
|
|
|
+ AudioWineFinish.play();
|
|
|
+ this.$utils.EventBus["debug"](`command: light-off[${this.wine.cell}]`);
|
|
|
+ this.$utils.Android("lightOff", this.wine.cell);
|
|
|
+ this.wineOutFinished();
|
|
|
},
|
|
|
- beforeOutWine() {
|
|
|
- let sec = this.$utils.WaitCountDown, timer = null, text = "开 始 出 酒 ";
|
|
|
- const start = () => {
|
|
|
- if (timer !== null) clearInterval(timer);
|
|
|
- timer = null;
|
|
|
- this.mask.show = false;
|
|
|
- this.mask.btn.handler = null;
|
|
|
- this.$utils.Android("openValveOf", this.order[this.index].cell);
|
|
|
- }
|
|
|
- timer = setInterval(() => {
|
|
|
- this.mask.btn.text = `${text} (${--sec}s)`;
|
|
|
- if (sec === 0) start();
|
|
|
- }, 1000);
|
|
|
- this.mask = {
|
|
|
- show: true,
|
|
|
- title: "温馨提示",
|
|
|
- subtitle: `即将出酒:${this.order[this.index].name}`,
|
|
|
- color: "green",
|
|
|
- icon: this.order[this.index].picture,
|
|
|
- btn: {need: true, text: `${text} (${sec}s)`, handler: start}
|
|
|
- }
|
|
|
+ _onNormalFinish() {
|
|
|
+ this.$utils.EventBus["debug"](`receive: normal-finish`);
|
|
|
+ this.maybeFinish();
|
|
|
},
|
|
|
- allWineFinished() {
|
|
|
- let sec = 10, timer = null, text = "返 回 列 表 ";
|
|
|
- const toList = () => {
|
|
|
- if (timer !== null) clearInterval(timer);
|
|
|
- timer = null;
|
|
|
- this.mask.show = false;
|
|
|
- this.mask.btn.handler = null;
|
|
|
- this.$utils.StatusDontKeep();
|
|
|
- this.$emit("out2list");
|
|
|
- }
|
|
|
- timer = setInterval(() => {
|
|
|
- this.mask.btn.text = `${text} (${--sec}s)`;
|
|
|
- if (sec === 0) toList();
|
|
|
- }, 1000);
|
|
|
- this.mask = {
|
|
|
- show: true,
|
|
|
- title: "温馨提示",
|
|
|
- subtitle: "所有酒品已全部取出,请拿好您的酒品",
|
|
|
- color: "deepskyblue",
|
|
|
- icon: this.get_icon("finish"),
|
|
|
- btn: {need: true, text: `${text} (${sec}s)`, handler: toList}
|
|
|
- }
|
|
|
+ maybeFinish() { // 1-time: [pulse % 30 !== 0], 2-times: [pulse % 30 === 0]
|
|
|
+ this.clear_timer();
|
|
|
+ if (InFinish) return this.$utils.EventBus["debug"]("already in finish handler");
|
|
|
+ InFinish = true;
|
|
|
+ this.stage.current = 2;
|
|
|
+ this.info.pulse = this.wine.pulse;
|
|
|
+ this.$utils.EventBus["debug"](`command: close-valve[${this.wine.cell}]`);
|
|
|
+ this.$utils.Android("closeValve", this.wine.cell);
|
|
|
+ setTimeout(() => {
|
|
|
+ this.$utils.EventBus["debug"]("continually command: read-weight");
|
|
|
+ this.$utils.Android("readSteadyWeight");
|
|
|
+ }, Gap);
|
|
|
},
|
|
|
- someWineFinished() {
|
|
|
- this.mask = {
|
|
|
- show: true,
|
|
|
- title: "温馨提示",
|
|
|
- subtitle: `第 [${this.index + 1}/${this.order.length}] 款酒品已取完,请及时更换容器`,
|
|
|
- color: "red",
|
|
|
- icon: this.get_icon("change"),
|
|
|
- btn: {need: false, text: "", handler: null}
|
|
|
- }
|
|
|
- this.$utils.Android("isCupProperlyPlaced");
|
|
|
+ clear_timer() {
|
|
|
+ if (Timer !== null) clearTimeout(Timer);
|
|
|
+ Timer = null;
|
|
|
},
|
|
|
- class_of(index) {
|
|
|
- if (index < this.index) return "queue-over";
|
|
|
- if (index === this.index) return "queue-outing";
|
|
|
- return "queue-future";
|
|
|
+ wineOutFinished() {
|
|
|
+ this.stage.current = 3;
|
|
|
+ this.$utils.EventBus["debug"]("wine out finished");
|
|
|
+ this.$utils.EventBus["ShowAlert"]({
|
|
|
+ title: "温馨提示", subtitle: "您的酒品已全部取出,请拿好您的商品", color: "deepskyblue", icon: this.get_icon("finish"),
|
|
|
+ button: {need: true, text: "返 回 列 表", countdown: -1}, callback: () => this.$emit("out2list")
|
|
|
+ });
|
|
|
},
|
|
|
- status_of(index) {
|
|
|
- if (index < this.index) return "✔ 已完成";
|
|
|
- if (index === this.index) return "⭕ 正在出酒";
|
|
|
- return "··· 排队中";
|
|
|
+ stage_class(index) {
|
|
|
+ return {"stage-node": true, "stage-finished": this.stage.current >= index};
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
|
- this.$utils.Register("errorHappened", this._onErrorHappened);
|
|
|
+ this.$utils.Register("errorWhileOuting", this._onErrorHappened);
|
|
|
this.$utils.Register("cupProperlyPlaced", this._onCupProperlyPlaced);
|
|
|
- this.$utils.Register("volumeDelta", this._onVolumeDelta);
|
|
|
- this.$utils.Register("blowOutFinished", this._onBlowOutFinished);
|
|
|
+ this.$utils.Register("volumePulse", this._onVolumePulse);
|
|
|
+ this.$utils.Register("normalFinish", this._onNormalFinish);
|
|
|
+ this.$utils.Register("steadyWeight", this._onSteadyWeight);
|
|
|
},
|
|
|
computed: {
|
|
|
- percent() {
|
|
|
- if (this.index === -1) return 0;
|
|
|
- return (this.volume / this.order[this.index].volume * 100).toFixed(2);
|
|
|
+ // ["准备", "出酒", "补偿", "完成"]
|
|
|
+ stage_percent() {
|
|
|
+ if (this.stage.current === 0) return 0;
|
|
|
+ if (this.stage.current === 1) return 33.33;
|
|
|
+ if (this.stage.current === 2) return 66.66;
|
|
|
+ return 100;
|
|
|
},
|
|
|
- weight() {
|
|
|
- if (this.index === -1) return 0;
|
|
|
- return (this.volume / this.order[this.index].volume * this.order[this.index].weight).toFixed(2);
|
|
|
+ outed_volume() {
|
|
|
+ return this.$utils.Pulse2Volume(this.info.pulse, this.wine.ppv);
|
|
|
},
|
|
|
- totalWeight() {
|
|
|
- if (this.index === -1) return 0;
|
|
|
- return this.order[this.index].weight;
|
|
|
+ outed_weight() {
|
|
|
+ return this.$utils.Pulse2Weight(this.info.pulse, this.wine.density, this.wine.ppv);
|
|
|
},
|
|
|
- totalVolume() {
|
|
|
- if (this.index === -1) return 0;
|
|
|
- return this.order[this.index].volume;
|
|
|
+ outed_percent() {
|
|
|
+ return (this.info.pulse / this.wine.pulse * 100).toFixed(2);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -228,40 +218,87 @@ export default {
|
|
|
|
|
|
<style scoped>
|
|
|
.background {
|
|
|
- position: relative;
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding: 50px 200px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
}
|
|
|
|
|
|
-.background > div {
|
|
|
+.stage-box {
|
|
|
width: 100%;
|
|
|
+ margin-top: 150px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
+.stage-line {
|
|
|
+ width: 98%;
|
|
|
+ height: 14px;
|
|
|
+ background-color: lightgray;
|
|
|
+}
|
|
|
+
|
|
|
+.stage-complete {
|
|
|
height: 100%;
|
|
|
- position: absolute;
|
|
|
- top: 0;
|
|
|
- left: 0;
|
|
|
+ background-color: #72c140;
|
|
|
}
|
|
|
|
|
|
-.body-layer {
|
|
|
+.stage-nodes {
|
|
|
+ width: 100%;
|
|
|
+ margin-top: -26px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+}
|
|
|
+
|
|
|
+.stage-node {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
|
- justify-content: space-around;
|
|
|
- z-index: 100;
|
|
|
+ font-size: 24px;
|
|
|
+ font-weight: bold;
|
|
|
+ --color: #AAAAAA;
|
|
|
+ color: var(--color);
|
|
|
+}
|
|
|
+
|
|
|
+.stage-node-node {
|
|
|
+ width: 35px;
|
|
|
+ height: 35px;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ border-radius: 50px;
|
|
|
+ background-color: var(--color);
|
|
|
+ font-size: 24px;
|
|
|
+ font-weight: bold;
|
|
|
+ color: var(--color);
|
|
|
+}
|
|
|
+
|
|
|
+.stage-finished {
|
|
|
+ color: black !important;
|
|
|
+}
|
|
|
+
|
|
|
+.stage-finished > .stage-node-node {
|
|
|
+ background-color: #72c140 !important;
|
|
|
+ color: white !important;
|
|
|
}
|
|
|
|
|
|
-.current {
|
|
|
- width: 80%;
|
|
|
+.progress {
|
|
|
+ width: 100%;
|
|
|
height: 200px;
|
|
|
+ margin-top: 200px;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
box-sizing: border-box;
|
|
|
padding: 20px 30px;
|
|
|
- border: 1px solid black;
|
|
|
+ border: 1px solid lightgray;
|
|
|
border-radius: 6px;
|
|
|
}
|
|
|
|
|
|
-.current-in-total {
|
|
|
- font-size: 1.4em;
|
|
|
+.wine-name {
|
|
|
+ font-size: 30px;
|
|
|
font-weight: bold;
|
|
|
}
|
|
|
|
|
@@ -284,15 +321,14 @@ export default {
|
|
|
.process-complete {
|
|
|
height: 100%;
|
|
|
border-radius: inherit;
|
|
|
-}
|
|
|
-
|
|
|
-.process-complete {
|
|
|
background-color: #007BFF;
|
|
|
}
|
|
|
|
|
|
.process-percent {
|
|
|
width: 5em;
|
|
|
text-align: right;
|
|
|
+ font-size: 20px;
|
|
|
+ font-weight: bold;
|
|
|
}
|
|
|
|
|
|
.process-detail {
|
|
@@ -300,129 +336,7 @@ export default {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
-}
|
|
|
-
|
|
|
-.queue {
|
|
|
- width: 80%;
|
|
|
- border: none;
|
|
|
- background-color: black;
|
|
|
-}
|
|
|
-
|
|
|
-.queue th {
|
|
|
- height: 30px;
|
|
|
-}
|
|
|
-
|
|
|
-.queue td, .queue th {
|
|
|
- text-align: center;
|
|
|
- background-color: white;
|
|
|
-}
|
|
|
-
|
|
|
-.queue > caption {
|
|
|
- text-align: left;
|
|
|
- margin-bottom: 5px;
|
|
|
- font-size: 1.2em;
|
|
|
- font-weight: bold;
|
|
|
-}
|
|
|
-
|
|
|
-/* width: 1920 */
|
|
|
-.col-1 {
|
|
|
- width: 5%;
|
|
|
-}
|
|
|
-
|
|
|
-.col-2 {
|
|
|
- width: 10%;
|
|
|
-}
|
|
|
-
|
|
|
-.col-3 {
|
|
|
- width: 45%;
|
|
|
-}
|
|
|
-
|
|
|
-.col-4 {
|
|
|
- width: 10%;
|
|
|
-}
|
|
|
-
|
|
|
-.col-5 {
|
|
|
- width: 10%;
|
|
|
-}
|
|
|
-
|
|
|
-.col-6 {
|
|
|
- width: 20%;
|
|
|
-}
|
|
|
-
|
|
|
-.wine-image {
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- padding: 4px;
|
|
|
-}
|
|
|
-
|
|
|
-.wine-image > img {
|
|
|
- width: 50px;
|
|
|
- height: 75px;
|
|
|
- object-fit: cover;
|
|
|
-}
|
|
|
-
|
|
|
-.queue-over {
|
|
|
- color: green;
|
|
|
-}
|
|
|
-
|
|
|
-.queue-outing {
|
|
|
- color: deepskyblue;
|
|
|
-}
|
|
|
-
|
|
|
-.queue-future {
|
|
|
- color: dimgray;
|
|
|
-}
|
|
|
-
|
|
|
-.mask-layer {
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- background-color: rgba(15, 15, 15, 0.15);
|
|
|
- z-index: 1000;
|
|
|
-}
|
|
|
-
|
|
|
-.mask-box {
|
|
|
- width: 420px;
|
|
|
- height: 280px;
|
|
|
- background-color: white;
|
|
|
- border-radius: 6px;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
- justify-content: space-between;
|
|
|
- box-sizing: border-box;
|
|
|
- padding: 20px;
|
|
|
-}
|
|
|
-
|
|
|
-.mask-title-box {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- align-items: center;
|
|
|
-}
|
|
|
-
|
|
|
-.mask-title {
|
|
|
- font-size: 1.2em;
|
|
|
- font-weight: bold;
|
|
|
- margin-bottom: 10px;
|
|
|
-}
|
|
|
-
|
|
|
-.mask-icon {
|
|
|
- width: 90px;
|
|
|
- height: 90px;
|
|
|
- object-fit: contain;
|
|
|
-}
|
|
|
-
|
|
|
-.mask-btn {
|
|
|
- width: 80%;
|
|
|
- height: 2em;
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- cursor: pointer;
|
|
|
- font-size: 1.1em;
|
|
|
+ font-size: 22px;
|
|
|
font-weight: bold;
|
|
|
- border: 1px solid deepskyblue;
|
|
|
- border-radius: 4px;
|
|
|
- color: deepskyblue;
|
|
|
}
|
|
|
</style>
|