模板增加占位功能

main
岩仔88 1 week ago
parent 0c925b873c
commit 7ba4bd23e1

@ -443,4 +443,65 @@ class PlanModelController extends Controller
}
}
//保存模板占位数量
public function SaveLockedCount(Request $request)
{
$userid = $request->get('userid');
$roster_id = request('roster_id');
$locked_counts = request('locked_counts');
if (empty($roster_id)) {
return \Yz::echoError1('模板ID不能为空');
}
if (empty($locked_counts) || !is_array($locked_counts)) {
return \Yz::echoError1('占位数量不能为空');
}
DB::beginTransaction();
try {
foreach ($locked_counts as $item) {
$appointment_type_id = $item['appointment_type_id'];
$locked_count = $item['locked_count'];
// 查询对应的记录(模板表 s_source_roster_count
$countRecord = DB::table('s_source_roster_count')
->where([
'roster_id' => $roster_id,
'appointment_type_id' => $appointment_type_id
])
->first();
if (!$countRecord) {
DB::rollBack();
return \Yz::echoError1('未找到对应的渠道数量记录');
}
if ($locked_count < 0) {
DB::rollBack();
return \Yz::echoError1('占位数量不能为负数');
}
// 更新占位数量
DB::table('s_source_roster_count')
->where([
'roster_id' => $roster_id,
'appointment_type_id' => $appointment_type_id
])
->update([
'locked_count' => $locked_count,
'updated_at' => date('Y-m-d H:i:s')
]);
}
DB::commit();
return \Yz::Return(true, '保存成功', []);
} catch (\Exception $e) {
DB::rollBack();
return \Yz::echoError1('保存失败:' . $e->getMessage());
}
}
}

@ -81,6 +81,7 @@ Route::group(['middleware'=>['checktoken','log'],'prefix'=>'v1'],function () {
Route::post('admin/GetPlanModelDetailInfo','App\Http\Controllers\API\Admin\YeWu\PlanModelController@GetDetailInfo');//获取计划模板详情
Route::post('admin/PlanModelDel','App\Http\Controllers\API\Admin\YeWu\PlanModelController@Del');//删除计划模板
Route::post('admin/SaveAppointmentRatio','App\Http\Controllers\API\Admin\YeWu\PlanModelController@SaveAppointmentRatio');//保存渠道比例
Route::post('admin/SavePlanModelLockedCount','App\Http\Controllers\API\Admin\YeWu\PlanModelController@SaveLockedCount');//保存模板占位数量
Route::post('admin/CreatePlanList','App\Http\Controllers\API\Admin\YeWu\PlanListController@Create');//生成计划明细
Route::post('admin/PlanListGetList','App\Http\Controllers\API\Admin\YeWu\PlanListController@GetList');//生成计划明细
Route::post('admin/PlanListGetDetail','App\Http\Controllers\API\Admin\YeWu\PlanListController@GetDetail');//计划详情

@ -390,4 +390,8 @@ export const adminPlanTongJi = (data = {}) => {
//保存占位数量
export const SaveLockedCount = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SaveLockedCount', data: data })
}
//保存模板占位数量
export const SavePlanModelLockedCount = (data = {}) => {
return axios({ url: import.meta.env.VITE_APP_API + 'v1/admin/SavePlanModelLockedCount', data: data })
}

@ -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;

Loading…
Cancel
Save