|
|
|
|
@ -83,6 +83,11 @@
|
|
|
|
|
<Edit />
|
|
|
|
|
</el-icon>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="icon_k" @click="OpenZhanWeiDialog(item2)">
|
|
|
|
|
<el-icon color="#409eff" size="20">
|
|
|
|
|
<Lock />
|
|
|
|
|
</el-icon>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
<div :class="{'plan_checkbox plan_checkbox_active':isSelected(item2.id),'plan_checkbox':!isSelected(item2.id)}"
|
|
|
|
|
@ -102,6 +107,9 @@
|
|
|
|
|
{{item3}}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="getTotalLocked(item2.countsInfo) > 0" class="locked_count_row">
|
|
|
|
|
占:{{getTotalLocked(item2.countsInfo)}}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
@ -305,6 +313,51 @@
|
|
|
|
|
</span>
|
|
|
|
|
</template>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
<el-dialog v-model="ZhanWeiDialogVisible" title="占位设置" width="40%">
|
|
|
|
|
<div v-loading="loading">
|
|
|
|
|
<el-form v-if="ZhanWeiInfo" label-width="120px" style="padding-right: 40px;">
|
|
|
|
|
<el-form-item label="模板ID:">
|
|
|
|
|
{{ ZhanWeiInfo.id }}
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="资源:">
|
|
|
|
|
{{ ZhanWeiInfo.resources_name }}
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="时间段:">
|
|
|
|
|
{{ ZhanWeiInfo.time_range }}
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="渠道占位:">
|
|
|
|
|
<div style="display: flex; flex-direction: column; gap: 10px; width: 100%;">
|
|
|
|
|
<template v-if="ZhanWeiInfo.qudao_total && ZhanWeiInfo.qudao_total.length > 0">
|
|
|
|
|
<template v-for="(item,index) in ZhanWeiInfo.qudao_total" :key="index">
|
|
|
|
|
<div v-if="item && !(item.count===0)"
|
|
|
|
|
style="display: flex; align-items: center; gap: 10px;">
|
|
|
|
|
<div style="width: 80px;">{{ item.name }}</div>
|
|
|
|
|
<div style="flex: 1;">
|
|
|
|
|
<el-input type="number" v-model="ZhanWeiInfo.qudao_total[index].locked_count" placeholder="占位数量" min="0"
|
|
|
|
|
oninput="value=value.replace(/[^0-9]/g,'')" />
|
|
|
|
|
</div>
|
|
|
|
|
<div style="color: #999; font-size: 12px;">
|
|
|
|
|
可用: {{ item.count }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
</template>
|
|
|
|
|
<div v-else style="color: #999;">
|
|
|
|
|
暂无渠道数据
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
</div>
|
|
|
|
|
<template #footer>
|
|
|
|
|
<span class="dialog-footer">
|
|
|
|
|
<el-button @click="ZhanWeiDialogVisible = false">取消</el-button>
|
|
|
|
|
<el-button type="primary" @click="SaveZhanWeiAction">
|
|
|
|
|
确定
|
|
|
|
|
</el-button>
|
|
|
|
|
</span>
|
|
|
|
|
</template>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
@ -326,7 +379,8 @@
|
|
|
|
|
PlanModelDel,
|
|
|
|
|
GetEnableDeviceList,
|
|
|
|
|
CreatePlanList,
|
|
|
|
|
GetServiceDateTime
|
|
|
|
|
GetServiceDateTime,
|
|
|
|
|
SavePlanModelLockedCount
|
|
|
|
|
} from '@/api/api.js'
|
|
|
|
|
import {
|
|
|
|
|
ElMessage,
|
|
|
|
|
@ -357,6 +411,9 @@
|
|
|
|
|
|
|
|
|
|
let dateRange = ref([]) //生成计划明细时,选择的日期范围
|
|
|
|
|
let CreatePlanDialogVisible = ref(false)
|
|
|
|
|
//占位功能
|
|
|
|
|
let ZhanWeiDialogVisible = ref(false)
|
|
|
|
|
let ZhanWeiInfo = ref(null)
|
|
|
|
|
const CreatedPlanClick = () => { //点击生成计划明细按钮
|
|
|
|
|
if (selectedPlanArr.value.length === 0) {
|
|
|
|
|
ElMessage.error("请至少勾选1条记录")
|
|
|
|
|
@ -983,6 +1040,80 @@
|
|
|
|
|
|
|
|
|
|
return segments;
|
|
|
|
|
}
|
|
|
|
|
//计算总占位数量
|
|
|
|
|
const getTotalLocked = (countsInfo) => {
|
|
|
|
|
if (!countsInfo || !Array.isArray(countsInfo)) return 0
|
|
|
|
|
return countsInfo.reduce((total, item) => {
|
|
|
|
|
return total + (Number(item.locked_count) || 0)
|
|
|
|
|
}, 0)
|
|
|
|
|
}
|
|
|
|
|
//占位功能 - 打开占位对话框
|
|
|
|
|
const OpenZhanWeiDialog = (row) => {
|
|
|
|
|
ZhanWeiDialogVisible.value = true
|
|
|
|
|
loading.value = true
|
|
|
|
|
GetPlanModelDetailInfo({
|
|
|
|
|
id: row.id
|
|
|
|
|
}).then(res => {
|
|
|
|
|
loading.value = false
|
|
|
|
|
if (res.status) {
|
|
|
|
|
ZhanWeiInfo.value = res.data
|
|
|
|
|
// 获取资源的名称
|
|
|
|
|
const resource = enableResourceList.value.find(r => r.id === row.resources_id)
|
|
|
|
|
ZhanWeiInfo.value.resources_name = resource ? resource.department_resources_name : ''
|
|
|
|
|
// 获取时间段
|
|
|
|
|
const timeRange = row.time_range || ''
|
|
|
|
|
ZhanWeiInfo.value.time_range = timeRange
|
|
|
|
|
// 初始化 locked_count
|
|
|
|
|
if (ZhanWeiInfo.value.qudao_total) {
|
|
|
|
|
ZhanWeiInfo.value.qudao_total.forEach(item => {
|
|
|
|
|
if (item.locked_count === null) {
|
|
|
|
|
item.locked_count = 0
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
ElMessage.error(res.msg)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
//保存占位设置
|
|
|
|
|
const SaveZhanWeiAction = () => {
|
|
|
|
|
let locked_counts = []
|
|
|
|
|
let hasError = false
|
|
|
|
|
ZhanWeiInfo.value.qudao_total.forEach((item) => {
|
|
|
|
|
if (hasError) return
|
|
|
|
|
if (Number(item.locked_count) < 0) {
|
|
|
|
|
ElMessage.error(`${item.name} 的占位数量不能为负数`)
|
|
|
|
|
hasError = true
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
// 验证占位数量不能超过可用数量(总数)
|
|
|
|
|
if (Number(item.locked_count) > item.count) {
|
|
|
|
|
ElMessage.error(`${item.name} 的占位数量不能超过可用数量,最多${item.count}个`)
|
|
|
|
|
hasError = true
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
locked_counts.push({
|
|
|
|
|
appointment_type_id: item.appointment_type_id,
|
|
|
|
|
locked_count: item.locked_count || 0
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
if (hasError) return
|
|
|
|
|
loading.value = true
|
|
|
|
|
SavePlanModelLockedCount({
|
|
|
|
|
roster_id: ZhanWeiInfo.value.id,
|
|
|
|
|
locked_counts: locked_counts
|
|
|
|
|
}).then(res => {
|
|
|
|
|
loading.value = false
|
|
|
|
|
if (res.status) {
|
|
|
|
|
ZhanWeiDialogVisible.value = false
|
|
|
|
|
ElMessage.success('占位设置保存成功')
|
|
|
|
|
GetList() // 重新加载列表
|
|
|
|
|
} else {
|
|
|
|
|
ElMessage.error(res.msg)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
searchInfo.value.date_type = 1
|
|
|
|
|
|
|
|
|
|
@ -1139,6 +1270,15 @@
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.locked_count_row {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 2px;
|
|
|
|
|
right: 4px;
|
|
|
|
|
color: #ff9800;
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.hoverTools {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 0px;
|
|
|
|
|
|