|
@@ -36,18 +36,18 @@
|
|
@click.stop
|
|
@click.stop
|
|
/>
|
|
/>
|
|
<el-tag
|
|
<el-tag
|
|
- v-if="scheduleMap[data.day]?.status !== undefined"
|
|
|
|
- :type="scheduleMap[data.day].status == '0' ? 'warning' : 'success'"
|
|
|
|
|
|
+ v-if="getScheduleStatus(data.day) !== null"
|
|
|
|
+ :type="getScheduleStatus(data.day) === 0 ? 'warning' : 'success'"
|
|
size="small"
|
|
size="small"
|
|
class="status-tag"
|
|
class="status-tag"
|
|
>
|
|
>
|
|
- {{ scheduleMap[data.day].status == '0' ? '未确认' : '已确认' }}
|
|
|
|
|
|
+ {{ getScheduleStatus(data.day) === 0 ? '未确认' : '已确认' }}
|
|
</el-tag>
|
|
</el-tag>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="employee-names">
|
|
<div class="employee-names">
|
|
<div
|
|
<div
|
|
- v-for="(name, index) in (scheduleMap[data.day]?.names || [])"
|
|
|
|
|
|
+ v-for="(name, index) in getScheduleNames(data.day)"
|
|
:key="index"
|
|
:key="index"
|
|
class="employee-name"
|
|
class="employee-name"
|
|
@dblclick.stop
|
|
@dblclick.stop
|
|
@@ -57,7 +57,6 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
-
|
|
|
|
</el-calendar>
|
|
</el-calendar>
|
|
<el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
|
|
<el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
|
|
<!-- 弹窗, 新增 / 修改 -->
|
|
<!-- 弹窗, 新增 / 修改 -->
|
|
@@ -93,29 +92,21 @@ const formatMonthDay = (fullDate: string): string => {
|
|
return `${parts[1]}-${parts[2]}`;
|
|
return `${parts[1]}-${parts[2]}`;
|
|
};
|
|
};
|
|
|
|
|
|
-const scheduleMap = ref<Record<string, { id: number; names: string[]; status:string }>>({});
|
|
|
|
-
|
|
|
|
-const buildScheduleMap = (list: any[]) => {
|
|
|
|
- scheduleMap.value = {};
|
|
|
|
- for (const item of list) {
|
|
|
|
- const day = item.scheduleDate;
|
|
|
|
- scheduleMap.value[day] = {
|
|
|
|
- id: item.id,
|
|
|
|
- names: item.employeeNames || [],
|
|
|
|
- status: item.status
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+const getScheduleByDate = (date: string) => {
|
|
|
|
+ return state.dataList?.find(item => item.scheduleDate === date) || null;
|
|
};
|
|
};
|
|
-import { onMounted } from 'vue'
|
|
|
|
-onMounted(async () => {
|
|
|
|
- await state.getDataList();
|
|
|
|
- buildScheduleMap(state.dataList || []);
|
|
|
|
-
|
|
|
|
- console.log(state.dataList);
|
|
|
|
-});
|
|
|
|
|
|
|
|
-// 新增按钮
|
|
|
|
|
|
+const getScheduleStatus = (date: string): number | null => {
|
|
|
|
+ const item = getScheduleByDate(date);
|
|
|
|
+ return item?.status ?? null;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const getScheduleNames = (date: string): string[] => {
|
|
|
|
+ const item = getScheduleByDate(date);
|
|
|
|
+ return item?.employeeNames || [];
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
const addHandle = () => {
|
|
const addHandle = () => {
|
|
if (!selectedDates.value || selectedDates.value.length === 0) {
|
|
if (!selectedDates.value || selectedDates.value.length === 0) {
|
|
ElMessage({
|
|
ElMessage({
|
|
@@ -125,17 +116,38 @@ const addHandle = () => {
|
|
});
|
|
});
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- // 批量添加
|
|
|
|
- addOrUpdateHandle(undefined, undefined, selectedDates.value);
|
|
|
|
|
|
+
|
|
|
|
+ // 查找已存在排班的日期
|
|
|
|
+ const existingDates = selectedDates.value.filter(date =>
|
|
|
|
+ state.dataList?.some(item => item.scheduleDate === date)
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ if (existingDates.length > 0) {
|
|
|
|
+ ElMessageBox.confirm(
|
|
|
|
+ `以下日期已有排班数据:\n${existingDates.join('、')}\n,是否继续新增?`,
|
|
|
|
+ '提示',
|
|
|
|
+ {
|
|
|
|
+ confirmButtonText: '继续',
|
|
|
|
+ cancelButtonText: '取消',
|
|
|
|
+ type: 'warning',
|
|
|
|
+ }
|
|
|
|
+ )
|
|
|
|
+ .then(() => {
|
|
|
|
+ addOrUpdateHandle(undefined, undefined, selectedDates.value);
|
|
|
|
+ })
|
|
|
|
+ .catch(() => {
|
|
|
|
+ // 用户取消,无需处理
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ // 无冲突,直接新增
|
|
|
|
+ addOrUpdateHandle(undefined, undefined, selectedDates.value);
|
|
|
|
+ }
|
|
};
|
|
};
|
|
|
|
|
|
const refreshAfterAdd = async () => {
|
|
const refreshAfterAdd = async () => {
|
|
selectedDates.value = [];
|
|
selectedDates.value = [];
|
|
- await state.getDataList();
|
|
|
|
-
|
|
|
|
|
|
+ state.getDataList();
|
|
console.log(state.dataList);
|
|
console.log(state.dataList);
|
|
- buildScheduleMap(state.dataList || []);
|
|
|
|
- console.log(scheduleMap.value);
|
|
|
|
};
|
|
};
|
|
|
|
|
|
const addOrUpdateRef = ref();
|
|
const addOrUpdateRef = ref();
|
|
@@ -145,7 +157,7 @@ const addOrUpdateHandle = (id?: number, date?: string, dates?: string[]) => {
|
|
|
|
|
|
|
|
|
|
const handleDayDblClick = (day: string) => {
|
|
const handleDayDblClick = (day: string) => {
|
|
- const schedule = scheduleMap.value[day];
|
|
|
|
|
|
+ const schedule = state.dataList?.find(item => item.scheduleDate === day);
|
|
if (schedule && schedule.id) {
|
|
if (schedule && schedule.id) {
|
|
// 已有排班记录,修改
|
|
// 已有排班记录,修改
|
|
addOrUpdateHandle(schedule.id);
|
|
addOrUpdateHandle(schedule.id);
|
|
@@ -155,6 +167,7 @@ const handleDayDblClick = (day: string) => {
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+
|
|
const handleDateToggle = (day: string, checked: boolean) => {
|
|
const handleDateToggle = (day: string, checked: boolean) => {
|
|
const index = selectedDates.value.indexOf(day);
|
|
const index = selectedDates.value.indexOf(day);
|
|
if (checked && index === -1) {
|
|
if (checked && index === -1) {
|