parent
aa4d107806
commit
024627801f
3 changed files with 298 additions and 1 deletions
@ -0,0 +1,234 @@ |
|||||||
|
<script setup> |
||||||
|
import {defineProps, ref, reactive, computed, watch, onMounted, onBeforeMount} from 'vue' |
||||||
|
import {ec_api_set_user_data, ec_api_clear_user_data} from '@/apis/ec_api.js' |
||||||
|
import {ElMessage} from "element-plus"; |
||||||
|
|
||||||
|
// 接收TabArea组件传递的参数 |
||||||
|
const props = defineProps(['seat', 'data']) |
||||||
|
|
||||||
|
// 定义用户选择的场次变量 |
||||||
|
const selectSeats = ref([]) |
||||||
|
const seatList = reactive({}) |
||||||
|
const row_x = ref(0) |
||||||
|
const col_y = ref(0) |
||||||
|
const req_timer = ref(null) |
||||||
|
|
||||||
|
// 处理用户选择的数据 |
||||||
|
async function handle_set_user_data() { |
||||||
|
console.log('selectSeats.value', selectSeats.value) |
||||||
|
let selectSeatData = [] |
||||||
|
props.seat.forEach((item)=> { |
||||||
|
if (selectSeats.value.indexOf(item['cineSeatId']) >= 0) { |
||||||
|
selectSeatData.push(item) |
||||||
|
} |
||||||
|
}) |
||||||
|
const req_data = { |
||||||
|
api: props.data.path, |
||||||
|
member_type: props.data.type, |
||||||
|
format: props.data.format, |
||||||
|
user_data: JSON.stringify(selectSeatData) |
||||||
|
} |
||||||
|
console.log('handle_set_user_data', req_data) |
||||||
|
await ec_api_set_user_data(req_data).then( |
||||||
|
(req) => { |
||||||
|
if (req['result'] === 'success') { |
||||||
|
ElMessage({message: '选择的座位已做为后续测试数据!', type: 'success'}) |
||||||
|
} else { |
||||||
|
ElMessage({message: '设置用户选择座位数据失败!', type: 'error'}) |
||||||
|
} |
||||||
|
} |
||||||
|
).catch( |
||||||
|
(err) => { |
||||||
|
console.log(err) |
||||||
|
ElMessage({message: '设置用户选择座位数据失败!', type: 'error'}) |
||||||
|
} |
||||||
|
) |
||||||
|
clearTimeout(req_timer.value) |
||||||
|
req_timer.value = null |
||||||
|
} |
||||||
|
|
||||||
|
function delay_handle_user_data() { |
||||||
|
if (req_timer.value === null) { |
||||||
|
req_timer.value = setTimeout(()=>handle_set_user_data(), 1000) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 清除Redis中用户选择数据 |
||||||
|
async function handle_clear_user_data() { |
||||||
|
const req_data = { |
||||||
|
api: props.data.path, |
||||||
|
member_type: props.data.type, |
||||||
|
} |
||||||
|
console.log('handle_clear_user_data', req_data) |
||||||
|
await ec_api_clear_user_data(req_data).then( |
||||||
|
(req) => { |
||||||
|
if (req['result'] === 'success') { |
||||||
|
ElMessage({message: '选择的座位已清除,推荐参数将使用随机值!', type: 'success'}) |
||||||
|
} else { |
||||||
|
ElMessage({message: '清除用户选择座位数据失败!', type: 'error'}) |
||||||
|
} |
||||||
|
} |
||||||
|
).catch( |
||||||
|
(err) => { |
||||||
|
console.log(err) |
||||||
|
ElMessage({message: '清除用户选择座位数据失败!', type: 'error'}) |
||||||
|
} |
||||||
|
) |
||||||
|
} |
||||||
|
|
||||||
|
onBeforeMount(() => { |
||||||
|
console.log('onBeforeMount') |
||||||
|
handleSeatData() |
||||||
|
}) |
||||||
|
|
||||||
|
// 处理座位逻辑 |
||||||
|
function handleSeatData() { |
||||||
|
let q = 1 |
||||||
|
let m = 1 |
||||||
|
let pairValueShuangTemp = '' |
||||||
|
let pairValueMultiTemp = '' |
||||||
|
row_x.value = parseInt(props.seat.slice(-1)[0]['x']) |
||||||
|
// 挂载时生成用于展示的数据源 |
||||||
|
props.seat.forEach((item) => { |
||||||
|
item['key'] = item['cineSeatId'] |
||||||
|
item['disable'] = item['seatStatus'] !== 'ok' || item['type'] === 'road' // 处理按键可选状态 |
||||||
|
// 处理显示文案 |
||||||
|
if (item['type'] === 'road') { |
||||||
|
item['label'] = '' |
||||||
|
} else { |
||||||
|
item['label'] = item['rowValue'] + '-' + item['columnValue'] |
||||||
|
} |
||||||
|
// 处理按键名称 |
||||||
|
switch (item['type']) { |
||||||
|
case 'danren': |
||||||
|
item['name'] = '单' |
||||||
|
break; |
||||||
|
case 'baoliu': |
||||||
|
item['name'] = '保' |
||||||
|
break; |
||||||
|
case 'zhendong': |
||||||
|
item['name'] = '震' |
||||||
|
break; |
||||||
|
case 'vip': |
||||||
|
item['name'] = 'vip' |
||||||
|
break; |
||||||
|
case 'shuangren': |
||||||
|
item['name'] = '情' |
||||||
|
break; |
||||||
|
case 'canji': |
||||||
|
item['name'] = '残' |
||||||
|
break; |
||||||
|
case 'multi': |
||||||
|
item['name'] = '多' |
||||||
|
break; |
||||||
|
} |
||||||
|
// 处理情侣座和多人座椅 |
||||||
|
if (item['pairValue'] !== '') { |
||||||
|
if (item['type'] === 'shuangren') { |
||||||
|
if (pairValueShuangTemp === '') { |
||||||
|
pairValueShuangTemp = item['pairValue'] |
||||||
|
item['name'] = item['name'] + '-' + q |
||||||
|
}else{ |
||||||
|
if (item['pairValue'] === pairValueShuangTemp) { |
||||||
|
item['name'] = item['name'] + '-' + q |
||||||
|
}else{ |
||||||
|
q++ |
||||||
|
pairValueShuangTemp = item['pairValue'] |
||||||
|
item['name'] = item['name'] + '-' + q |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
if (item['type'] === 'multi') { |
||||||
|
if (pairValueMultiTemp === '') { |
||||||
|
pairValueMultiTemp = item['pairValue'] |
||||||
|
item['name'] = item['name'] + '-' + m |
||||||
|
}else{ |
||||||
|
if (item['pairValue'] === pairValueMultiTemp) { |
||||||
|
item['name'] = item['name'] + '-' + m |
||||||
|
}else{ |
||||||
|
m++ |
||||||
|
pairValueMultiTemp = item['pairValue'] |
||||||
|
item['name'] = item['name'] + '-' + m |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (!seatList.hasOwnProperty(item['x'])) { |
||||||
|
seatList[item['x']] = [] |
||||||
|
} |
||||||
|
seatList[item['x']].push(item) |
||||||
|
}) |
||||||
|
console.log('seatList', seatList) |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
watch(() => selectSeats.value, () => { |
||||||
|
clearTimeout(req_timer.value) |
||||||
|
req_timer.value = null |
||||||
|
delay_handle_user_data() |
||||||
|
}) |
||||||
|
|
||||||
|
</script> |
||||||
|
|
||||||
|
<template> |
||||||
|
<hr id="break_line"/> |
||||||
|
<div style="font-size: 16px; font-weight: bold; color: #909399; text-align: left; margin-bottom: 10px">选择座位: |
||||||
|
<el-tooltip |
||||||
|
class="box-item" |
||||||
|
effect="dark" |
||||||
|
content="点击清除选择后会将后台服务器中记录的选择内容清空,其他接口将通过随机获取的方式从此接口返回的数据中模拟参数" |
||||||
|
placement="right" |
||||||
|
> |
||||||
|
<el-button size="small" style="font-weight: bold;color: #909399" @click="handle_clear_user_data">清除选择 |
||||||
|
</el-button> |
||||||
|
</el-tooltip> |
||||||
|
</div> |
||||||
|
<div style="max-width: 1240px; overflow: auto"> |
||||||
|
<el-form style="max-width: 600px; margin-left: 20px"> |
||||||
|
<el-form-item> |
||||||
|
<el-checkbox-group v-model="selectSeats"> |
||||||
|
<div class="seat-row" v-for="r in row_x"> |
||||||
|
<el-checkbox-button v-for="seat in seatList[r]" :label="seat['key']" :key="seat['key']" |
||||||
|
:disabled="seat['disable']"> |
||||||
|
<span>{{ seat['label'] }}</span><br> |
||||||
|
<span>{{ seat['name'] }}</span> |
||||||
|
</el-checkbox-button> |
||||||
|
</div> |
||||||
|
</el-checkbox-group> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
</div> |
||||||
|
|
||||||
|
</template> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
#break_line { |
||||||
|
margin-top: 30px; |
||||||
|
margin-bottom: 30px; |
||||||
|
background-color: rgba(144, 147, 153, 0.5); |
||||||
|
height: 1px; |
||||||
|
border: none |
||||||
|
} |
||||||
|
|
||||||
|
:deep(.el-checkbox-button) { |
||||||
|
margin-bottom: 10px; |
||||||
|
margin-right: 15px; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
:deep(.el-checkbox-button__inner) { |
||||||
|
width: 60px; |
||||||
|
height: 60px; |
||||||
|
align-content: center; |
||||||
|
background: #ebebeb; |
||||||
|
color: #333; |
||||||
|
border: 0 !important; |
||||||
|
border-radius: 10px !important; |
||||||
|
} |
||||||
|
|
||||||
|
.seat-row { |
||||||
|
display: flex; |
||||||
|
} |
||||||
|
|
||||||
|
</style> |
Loading…
Reference in new issue