This commit is contained in:
JayJiaJun 2025-02-11 16:14:44 +08:00
parent 3eac2eed00
commit 1c87c36f81
2 changed files with 190 additions and 175 deletions

View File

@ -139,8 +139,10 @@
<el-table :data="plans" empty-text="暂无数据" border style="width: 100%; margin-bottom: 20px;"> <el-table :data="plans" empty-text="暂无数据" border style="width: 100%; margin-bottom: 20px;">
<el-table-column type="index" label="序号" width="60" align="center"></el-table-column> <el-table-column type="index" label="序号" width="60" align="center"></el-table-column>
<el-table-column prop="name" label="方案名称" min-width="15%" align="center"></el-table-column> <el-table-column prop="name" label="方案名称" min-width="15%" align="center"></el-table-column>
<el-table-column prop="timeRange" label="时间段" min-width="15%" align="center"></el-table-column> <el-table-column prop="timeRange" label="时间段" min-width="15%"
<el-table-column prop="selectedMode" label="车道模式" min-width="15%" align="center"></el-table-column> align="center"></el-table-column>
<el-table-column prop="selectedMode" label="车道模式" min-width="15%"
align="center"></el-table-column>
<el-table-column prop="lanes" label="开放车道" min-width="15%" align="center"> <el-table-column prop="lanes" label="开放车道" min-width="15%" align="center">
<template #default="scope"> <template #default="scope">
<span v-for="(lane, index) in scope.row.lanes" :key="index"> <span v-for="(lane, index) in scope.row.lanes" :key="index">
@ -158,10 +160,8 @@
</el-table-column> </el-table-column>
<el-table-column label="使能" width="80" align="center"> <el-table-column label="使能" width="80" align="center">
<template #default="scope"> <template #default="scope">
<el-switch <el-switch v-model="scope.row.enabled"
v-model="scope.row.enabled" @change="(val) => handleStatusChange(val, scope.row)"></el-switch>
@change="(val) => handleStatusChange(val, scope.row)"
></el-switch>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="120" align="center"> <el-table-column label="操作" width="120" align="center">
@ -181,20 +181,14 @@
<el-form-item label="车道模式"> <el-form-item label="车道模式">
<el-select v-model="newPlan.selectedMode" placeholder="请选择车道模式"> <el-select v-model="newPlan.selectedMode" placeholder="请选择车道模式">
<el-option label="左转 直行" value="0"></el-option> <el-option label="左转 直行" :value="1"></el-option>
<el-option label="右转 直行" value="1"></el-option> <el-option label="右转 直行" :value="2"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="时间段设置"> <el-form-item label="时间段设置">
<el-time-picker <el-time-picker v-model="newPlan.timeRange" is-range range-separator=""
v-model="newPlan.timeRange" start-placeholder="开始时间" end-placeholder="结束时间" style="width: 350px;" />
is-range
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
style="width: 350px;"
/>
</el-form-item> </el-form-item>
<el-form-item label="开放车道"> <el-form-item label="开放车道">
@ -273,7 +267,7 @@ export default {
endTime: '', endTime: '',
lanes: [], lanes: [],
timeRange: [], // timeRange: [], //
selectedMode: '', // selectedMode: null, // null
repeatDays: [], // repeatDays: [], //
}, },
plans: [ plans: [
@ -281,16 +275,16 @@ export default {
// id: 1, // id: 1,
// name: '', // name: '',
// timeRange: '07:30 - 09:30', // timeRange: '07:30 - 09:30',
// selectedMode: '0', // // selectedMode: 0, //
// lanes: ['1', '2'], // lanes: ['1', '2'],
// repeatDays: [0, 1, 2, 3, 4], // // repeatDays: [0, 1, 2, 3, 4],
// enabled: true // enabled: true
// }, // },
// { // {
// id: 2, // id: 2,
// name: '', // name: '',
// timeRange: '17:00 - 19:00', // timeRange: '17:00 - 19:00',
// selectedMode: '1', // // selectedMode: 1, //
// lanes: ['2', '3', '4'], // lanes: ['2', '3', '4'],
// repeatDays: [0, 1, 2, 3, 4], // repeatDays: [0, 1, 2, 3, 4],
// enabled: false // enabled: false
@ -299,7 +293,7 @@ export default {
// id: 3, // id: 3,
// name: '', // name: '',
// timeRange: '09:00 - 18:00', // timeRange: '09:00 - 18:00',
// selectedMode: '0', // selectedMode: 0, //
// lanes: ['1', '2', '3'], // lanes: ['1', '2', '3'],
// repeatDays: [5, 6], // // repeatDays: [5, 6], //
// enabled: true // enabled: true
@ -341,7 +335,7 @@ export default {
resetNewPlan() { resetNewPlan() {
this.newPlan = { this.newPlan = {
name: '', name: '',
selectedMode: '', selectedMode: null,
timeRange: [], timeRange: [],
lanes: [], lanes: [],
repeatDays: [] repeatDays: []
@ -406,9 +400,18 @@ export default {
} }
}, },
// //
async addPlan() { async addPlan() {
try { try {
// 30
if (this.plans.length >= 30) {
ElMessage({
message: '无法添加新方案方案数量已达到上限30个',
type: 'error'
});
return; //
}
// //
if (!this.newPlan.name) { if (!this.newPlan.name) {
ElMessage({ ElMessage({
@ -418,7 +421,7 @@ export default {
return; return;
} }
if (!this.newPlan.selectedMode) { if (this.newPlan.selectedMode === null) {
ElMessage({ ElMessage({
message: '请选择车道模式', message: '请选择车道模式',
type: 'error' type: 'error'
@ -435,29 +438,46 @@ export default {
let startTime, endTime; let startTime, endTime;
if (Array.isArray(this.newPlan.timeRange)) { if (Array.isArray(this.newPlan.timeRange)) {
[startTime, endTime] = this.newPlan.timeRange; [startTime, endTime] = this.newPlan.timeRange;
} else if (typeof this.newPlan.timeRange === 'string') {
[startTime, endTime] = this.newPlan.timeRange.split(' - ');
} }
// // -
const lanes = (this.newPlan.lanes || []).map(lane => { const lanesBinary = [0, 0, 0, 0]; // 0000
return String(lane.replace('车道', '') - 1); (this.newPlan.lanes || []).forEach(lane => {
const laneIndex = parseInt(lane.replace('车道', '')) - 1; //
if (laneIndex >= 0 && laneIndex < 4) {
lanesBinary[laneIndex] = 1; // 1
}
}); });
const lanesBinaryString = lanesBinary.join(''); //
// -
const repeatDaysBinary = Array(7).fill(0); // 0000000
(this.newPlan.repeatDays || []).forEach(day => {
repeatDaysBinary[day] = 1; // 1
});
const repeatDaysBinaryString = repeatDaysBinary.join(''); //
// ID
const existingIds = this.plans.map(plan => plan.id);
let newId = 0; // 0
while (existingIds.includes(newId)) {
newId++; // 使 ID
}
const planData = { const planData = {
JSON_id: getNextJsonId(), JSON_id: getNextJsonId(),
command: "set_scheme", command: "add_scheme",
parameters: { parameters: {
scheme: [{ scheme: [{
id: this.isEdit ? this.currentEditId : (this.plans.length + 1), id: newId, // 使 ID
name: this.newPlan.name, name: this.newPlan.name,
selectedMode: this.newPlan.selectedMode, selectedMode: this.newPlan.selectedMode,
timeRange: { timeRange: {
start: formatTime(startTime), start: formatTime(startTime),
end: formatTime(endTime) end: formatTime(endTime)
}, },
lanes: lanes, lanes: lanesBinaryString, // 使
repeatDays: this.newPlan.repeatDays.map(day => Number(day)) repeatDays: repeatDaysBinaryString // 使
}] }]
} }
}; };
@ -474,7 +494,7 @@ export default {
if (response.data?.parameters?.status === 0) { if (response.data?.parameters?.status === 0) {
const newPlanData = { const newPlanData = {
id: planData.parameters.scheme[0].id, id: newId, // 使 ID
name: this.newPlan.name, name: this.newPlan.name,
timeRange: `${formatTime(startTime)} - ${formatTime(endTime)}`, timeRange: `${formatTime(startTime)} - ${formatTime(endTime)}`,
selectedMode: this.newPlan.selectedMode, selectedMode: this.newPlan.selectedMode,
@ -483,14 +503,7 @@ export default {
enabled: true enabled: true
}; };
if (this.isEdit) { this.plans.push(newPlanData); //
const index = this.plans.findIndex(p => p.id === this.currentEditId);
if (index !== -1) {
this.plans.splice(index, 1, newPlanData);
}
} else {
this.plans.push(newPlanData);
}
this.planDialogVisible = false; this.planDialogVisible = false;
this.resetNewPlan(); this.resetNewPlan();
@ -564,22 +577,34 @@ export default {
// //
if (response.data.parameters.scheme) { if (response.data.parameters.scheme) {
this.plans = response.data.parameters.scheme.map(scheme => ({ this.plans = response.data.parameters.scheme.map(scheme => {
// lanes
const lanesBinary = scheme.lanes.split('').map(Number); //
const lanes = lanesBinary.map((lane, index) => lane === 1 ? `车道${index + 1}` : null).filter(Boolean); //
// repeatDays
const repeatDaysBinary = scheme.repeatDays.split('').map(Number); //
const repeatDays = repeatDaysBinary.map((day, index) => day === 1 ? index : null).filter(Boolean); //
return {
id: parseInt(scheme.id),
name: scheme.name, name: scheme.name,
timeRange: `${scheme.timeRange.start} - ${scheme.timeRange.end}`, timeRange: `${scheme.timeRange.start} - ${scheme.timeRange.end}`,
selectedMode: scheme.selectedMode, selectedMode: parseInt(scheme.selectedMode),
lanes: scheme.lanes.map(lane => `车道${parseInt(lane) + 1}`), lanes: lanes, // 使
repeatDays: scheme.repeatDays || [] // repeatDays: repeatDays, // 使
})); enabled: Boolean(scheme.en)
};
});
} }
// //
if (response.data.parameters.laneSetting) { if (response.data.parameters.laneSetting) {
this.laneDefaults = { this.laneDefaults = {
lane1: response.data.parameters.laneSetting.lane1 || [], lane1: response.data.parameters.laneSetting.lane1 || 0,
lane2: response.data.parameters.laneSetting.lane2 || [], lane2: response.data.parameters.laneSetting.lane2 || 0,
lane3: response.data.parameters.laneSetting.lane3 || [], lane3: response.data.parameters.laneSetting.lane3 || 0,
lane4: response.data.parameters.laneSetting.lane4 || [] lane4: response.data.parameters.laneSetting.lane4 || 0
}; };
} }
@ -766,14 +791,26 @@ export default {
[startTime, endTime] = this.newPlan.timeRange; [startTime, endTime] = this.newPlan.timeRange;
} }
// // -
const lanes = (this.newPlan.lanes || []).map(lane => { const lanesBinary = [0, 0, 0, 0]; // 0000
return String(lane.replace('车道', '') - 1); (this.newPlan.lanes || []).forEach(lane => {
const laneIndex = parseInt(lane.replace('车道', '')) - 1; //
if (laneIndex >= 0 && laneIndex < 4) {
lanesBinary[laneIndex] = 1; // 1
}
}); });
const lanesBinaryString = lanesBinary.join(''); //
// -
const repeatDaysBinary = Array(7).fill(0); // 0000000
(this.newPlan.repeatDays || []).forEach(day => {
repeatDaysBinary[day] = 1; // 1
});
const repeatDaysBinaryString = repeatDaysBinary.join(''); //
const editedPlan = { const editedPlan = {
JSON_id: getNextJsonId(), JSON_id: getNextJsonId(),
command: "set_scheme", command: "add_scheme",
parameters: { parameters: {
scheme: [{ scheme: [{
id: this.currentEditId, id: this.currentEditId,
@ -783,8 +820,8 @@ export default {
start: formatTime(startTime), start: formatTime(startTime),
end: formatTime(endTime) end: formatTime(endTime)
}, },
lanes: lanes, lanes: lanesBinaryString, // 使
repeatDays: this.newPlan.repeatDays.map(day => Number(day)) repeatDays: repeatDaysBinaryString // 使
}] }]
} }
}; };
@ -842,10 +879,10 @@ export default {
JSON_id: getNextJsonId(), JSON_id: getNextJsonId(),
command: "default_lane_setting", command: "default_lane_setting",
parameters: { parameters: {
lane1: this.laneDefaults.lane1 || [], lane1: parseInt(this.laneDefaults.lane1) || 0,
lane2: this.laneDefaults.lane2 || [], lane2: parseInt(this.laneDefaults.lane2) || 0,
lane3: this.laneDefaults.lane3 || [], lane3: parseInt(this.laneDefaults.lane3) || 0,
lane4: this.laneDefaults.lane4 || [] lane4: parseInt(this.laneDefaults.lane4) || 0
} }
}; };
@ -888,6 +925,15 @@ export default {
// //
handlePlanSubmit() { handlePlanSubmit() {
//
if (this.newPlan.selectedMode === null) {
ElMessage({
message: '请选择车道模式',
type: 'error'
});
return; //
}
if (this.isEdit) { if (this.isEdit) {
this.saveEditPlan(); this.saveEditPlan();
} else { } else {
@ -900,7 +946,7 @@ export default {
try { try {
const statusData = { const statusData = {
JSON_id: getNextJsonId(), JSON_id: getNextJsonId(),
command: "set_scheme_status", command: "add_scheme_status",
parameters: { parameters: {
id: row.id, id: row.id,
enabled: val enabled: val

View File

@ -1,27 +1,23 @@
JSON
(Web ) (Web )
json{
{
"command": "login", "command": "login",
"parameters": { "parameters": {
"username": "string", "username": "string",
"password": "string" "password": "string"
} }
} }
( Web) ( Web)
json{
{
"command": "login_response", "command": "login_response",
"parameters": { "parameters": {
"status": 0, // 0: , 1: "status": 0, // 0: , 1:
"message": "Login successful" // "message": "Login successful" //
} }
} }
()
(Web ) (Web )
{ json{
"JSON_id": 2, "JSON_id": 2,
"command": "change_password", "command": "change_password",
"parameters": { "parameters": {
@ -30,28 +26,23 @@
} }
} }
( Web) ( Web)
json{
{
"command": "change_password_response", "command": "change_password_response",
"parameters": { "parameters": {
"status": 0, // 0: , 1: "status": 0, // 0: , 1:
"message": "Psword changed successfully" "message": "Password changed successfully"
} }
} }
JSON
(Web ) (Web )
json{
{
"command": "set_time", "command": "set_time",
"parameters": { "parameters": {
"timestamp": "2025-01-13T12:00:00Z" "timestamp": "2025-01-13T12:00:00Z"
} }
} }
( Web) ( Web)
json{
{
"command": "set_time_response", "command": "set_time_response",
"parameters": { "parameters": {
"status": 0, // 0: , 1: "status": 0, // 0: , 1:
@ -59,9 +50,8 @@
} }
} }
(Web (Web )
json{
{
"command": "set_mode", "command": "set_mode",
"parameters": { "parameters": {
"mode": 0, // "mode": 0, //
@ -72,10 +62,8 @@
} }
} }
} }
( Web) ( Web)
json{
{
"command": "set_mode_response", "command": "set_mode_response",
"parameters": { "parameters": {
"status": 0, // 0: , 1: "status": 0, // 0: , 1:
@ -83,156 +71,137 @@
} }
} }
(Web ) (Web )
{ json{
"command": "set_scheme", "command": "add_scheme",
"parameters": { "parameters": {
"scheme": [ "scheme": [
{ {
"id": 1, "id": 1,
"en": 1,
"name": "方案1", "name": "方案1",
"selectedMode": "1", // 1:2:3:4: "selectedMode": 1, // 1:2:3:4:
"timeRange": { "timeRange": {
"start": "08:00", "start": "08:00",
"end": "10:00" "end": "10:00"
}, },
"lanes": [ "lanes": "0100", //
"0", "repeatDays": "0000001" //
"1"
],
"repeatDays": [0, 1, 2, 3, 4, 5, 6] //
} }
] ]
} }
} }
( Web) ( Web)
json{
{ "command": "add_scheme_response",
"command": "set_scheme_response",
"parameters": { "parameters": {
"status": 0, // 0: , 1: "status": 0, // 0: , 1:
"message": "Add Plan successfully" "message": "Add Plan successfully"
} }
} }
(Web ) (Web )
{ json{
"command": "get_device_info", "command": "get_device_info",
"parameters": {} "parameters": {}
} }
( Web) ( Web)
{ json{
"command": "get_device_info_response", "command": "get_device_info_response",
"parameters": { "parameters": {
"version": "1.0.3", // "version": "1.0.3", //
"compileTime": "2025-01-14T10:30:00Z" "compileTime": "2025-01-14T10:30:00Z"
} }
} }
(Web ) (Web )
{ json{
"command": "get_all_info", "command": "get_all_info",
"parameters": {} "parameters": {}
} }
( Web) ( Web)
{ json{
"command": "get_all_info_response", "command": "get_all_info_response",
"parameters": { "parameters": {
"set_mode": 0, // "set_mode": 0, //
"scheme": [ "scheme": [
{ {
"id": 1, "id": 1,
"en": 1,
"name": "方案1", "name": "方案1",
"selectedMode": "1", // 1:2:3:4: "selectedMode": 1, // 1:2:3:4:
"timeRange": { "timeRange": {
"start": "08:00", "start": "08:00",
"end": "10:00" "end": "10:00"
}, },
"lanes": [ "lanes": "0100", //
"0", "repeatDays": "0000001" //
"1"
],
"repeatDays": [0, 1, 2, 3, 4, 5, 6] //
} }
], ],
"laneSetting": { "laneSetting": {
"lane1": "0", //0 1 "lane1": 0, //0 1
"lane2": "1", "lane2": 1,
"lane3": "0", "lane3": 0,
"lane4": "1" "lane4": 1
}, },
"deviceInfo": { "deviceInfo": {
"version": "1.0.3", "version": "1.0.3",
"compileTime": "2025-01-14 10:30:00" "compileTime": "2025-01-14 10:30:00"
} }
} }
} }
(Web ) (Web )
json{
{
"command": "default_lane_setting", "command": "default_lane_setting",
"parameters": { "parameters": {
"lane1": "0", //0 1 "lane1": 0, //0 1
"lane2": "1", "lane2": 1,
"lane3": "2", "lane3": 0,
"lane4": "3" "lane4": 1
} }
} }
( Web) ( Web)
{ json{
"command": "default_lane_setting", "command": "default_lane_setting_response",
"parameters": { "parameters": {
"status": 0, // 0: , 1: "status": 0, // 0: , 1:
"message": "Set successfully" "message": "Set successfully"
} }
} }
使 使
(Web ) (Web )
{ json{
"JSON_id": 30, "JSON_id": 30,
"command": "set_scheme_status", "command": "set_scheme_status",
"parameters": { "parameters": {
"id": 1, "id": 1,
"enabled": false "enable": false
} }
} }
( Web) ( Web)
{ json{
"command": "set_scheme_status_response", "command": "set_scheme_status_response",
"parameters": { "parameters": {
"status": 0, // 0: , 1: "status": 0, // 0: , 1:
"message": "Set successfully" "message": "Set successfully"
} }
} }
(Web ) (Web )
{ json{
"command": "delete_scheme", "command": "delete_scheme",
"parameters": { "parameters": {
"id": 1 "id": 1
} }
} }
( Web) ( Web)
{ json{
"command": "delete_scheme_response", "command": "delete_scheme_response",
"parameters": { "parameters": {
"status": 0, // 0: , 1: "status": 0, // 0: , 1:
"message": "Delete successfully" "message": "Delete successfully"
} }
} }