|
@@ -186,7 +186,7 @@
|
|
|
>
|
|
>
|
|
|
<el-form label-position="top" class="duty-day-form">
|
|
<el-form label-position="top" class="duty-day-form">
|
|
|
<p class="form-tip">
|
|
<p class="form-tip">
|
|
|
- 为当天配置班次名额,保存后生成公开链接。可直接从系统用户安排,也可留给员工抢班。
|
|
|
|
|
|
|
+ 为当天配置班次名额,保存后生成公开链接。直接安排与公开链接仅可选择已分配「值班人员」角色的用户。
|
|
|
</p>
|
|
</p>
|
|
|
|
|
|
|
|
<div v-for="slot in formSlots" :key="slot.shiftType" class="slot-card">
|
|
<div v-for="slot in formSlots" :key="slot.shiftType" class="slot-card">
|
|
@@ -198,7 +198,7 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
<template v-if="slot.enabled">
|
|
<template v-if="slot.enabled">
|
|
|
- <el-form-item label="直接安排(系统用户)">
|
|
|
|
|
|
|
+ <el-form-item label="直接安排(值班人员)">
|
|
|
<el-select
|
|
<el-select
|
|
|
v-model="slot.pendingUserId"
|
|
v-model="slot.pendingUserId"
|
|
|
filterable
|
|
filterable
|
|
@@ -276,11 +276,11 @@
|
|
|
SwitchButton
|
|
SwitchButton
|
|
|
} from '@element-plus/icons-vue'
|
|
} from '@element-plus/icons-vue'
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
- import { fetchUserOptions } from '@/api/admin'
|
|
|
|
|
import {
|
|
import {
|
|
|
deleteDutyAssignment,
|
|
deleteDutyAssignment,
|
|
|
fetchDutyDay,
|
|
fetchDutyDay,
|
|
|
fetchDutyMonth,
|
|
fetchDutyMonth,
|
|
|
|
|
+ fetchDutyUserOptions,
|
|
|
saveDutyDay,
|
|
saveDutyDay,
|
|
|
setDutyLinkStatus,
|
|
setDutyLinkStatus,
|
|
|
type DutyDayItem,
|
|
type DutyDayItem,
|
|
@@ -720,7 +720,7 @@
|
|
|
|
|
|
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
|
try {
|
|
try {
|
|
|
- const opts = await fetchUserOptions()
|
|
|
|
|
|
|
+ const opts = await fetchDutyUserOptions()
|
|
|
userOptions.value = (Array.isArray(opts) ? opts : []) as Array<{
|
|
userOptions.value = (Array.isArray(opts) ? opts : []) as Array<{
|
|
|
label: string
|
|
label: string
|
|
|
value: string
|
|
value: string
|
|
@@ -796,17 +796,17 @@
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
flex-shrink: 0;
|
|
flex-shrink: 0;
|
|
|
margin: 0;
|
|
margin: 0;
|
|
|
- font-size: 13px;
|
|
|
|
|
|
|
+ font-size: 14px;
|
|
|
color: #334155;
|
|
color: #334155;
|
|
|
}
|
|
}
|
|
|
.month-stats .stat {
|
|
.month-stats .stat {
|
|
|
display: inline-flex;
|
|
display: inline-flex;
|
|
|
gap: 4px;
|
|
gap: 4px;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
- height: 28px;
|
|
|
|
|
|
|
+ height: 30px;
|
|
|
padding: 0 10px;
|
|
padding: 0 10px;
|
|
|
font: inherit;
|
|
font: inherit;
|
|
|
- font-size: 13px;
|
|
|
|
|
|
|
+ font-size: 14px;
|
|
|
color: #334155;
|
|
color: #334155;
|
|
|
cursor: pointer;
|
|
cursor: pointer;
|
|
|
background: transparent;
|
|
background: transparent;
|
|
@@ -834,7 +834,7 @@
|
|
|
}
|
|
}
|
|
|
.month-stats .stat.total {
|
|
.month-stats .stat.total {
|
|
|
padding: 4px 10px;
|
|
padding: 4px 10px;
|
|
|
- font-size: 12px;
|
|
|
|
|
|
|
+ font-size: 14px;
|
|
|
color: #64748b;
|
|
color: #64748b;
|
|
|
background: #f1f5f9;
|
|
background: #f1f5f9;
|
|
|
border: 1px solid var(--mint-border, #d9e8e2);
|
|
border: 1px solid var(--mint-border, #d9e8e2);
|
|
@@ -1003,7 +1003,7 @@
|
|
|
}
|
|
}
|
|
|
.person-bar-label {
|
|
.person-bar-label {
|
|
|
margin-right: 4px;
|
|
margin-right: 4px;
|
|
|
- font-size: 12px;
|
|
|
|
|
|
|
+ font-size: 14px;
|
|
|
font-weight: 600;
|
|
font-weight: 600;
|
|
|
color: var(--mint-text-muted, #64748b);
|
|
color: var(--mint-text-muted, #64748b);
|
|
|
}
|
|
}
|
|
@@ -1011,9 +1011,9 @@
|
|
|
display: inline-flex;
|
|
display: inline-flex;
|
|
|
gap: 6px;
|
|
gap: 6px;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
- height: 28px;
|
|
|
|
|
|
|
+ height: 30px;
|
|
|
padding: 0 10px;
|
|
padding: 0 10px;
|
|
|
- font-size: 12px;
|
|
|
|
|
|
|
+ font-size: 14px;
|
|
|
color: #334155;
|
|
color: #334155;
|
|
|
cursor: pointer;
|
|
cursor: pointer;
|
|
|
background: transparent;
|
|
background: transparent;
|
|
@@ -1047,7 +1047,7 @@
|
|
|
}
|
|
}
|
|
|
.duty-cal th {
|
|
.duty-cal th {
|
|
|
padding: 10px;
|
|
padding: 10px;
|
|
|
- font-size: 12px;
|
|
|
|
|
|
|
+ font-size: 14px;
|
|
|
font-weight: 500;
|
|
font-weight: 500;
|
|
|
color: var(--mint-text-muted, #64748b);
|
|
color: var(--mint-text-muted, #64748b);
|
|
|
background: #f8fafc;
|
|
background: #f8fafc;
|
|
@@ -1057,7 +1057,7 @@
|
|
|
color: #dc2626;
|
|
color: #dc2626;
|
|
|
}
|
|
}
|
|
|
.duty-cal td {
|
|
.duty-cal td {
|
|
|
- height: 108px;
|
|
|
|
|
|
|
+ height: 120px;
|
|
|
padding: 6px;
|
|
padding: 6px;
|
|
|
vertical-align: top;
|
|
vertical-align: top;
|
|
|
border-right: 1px solid var(--mint-border, #d9e8e2);
|
|
border-right: 1px solid var(--mint-border, #d9e8e2);
|
|
@@ -1083,15 +1083,15 @@
|
|
|
}
|
|
}
|
|
|
.day-num {
|
|
.day-num {
|
|
|
margin-bottom: 4px;
|
|
margin-bottom: 4px;
|
|
|
- font-size: 12px;
|
|
|
|
|
|
|
+ font-size: 14px;
|
|
|
font-weight: 600;
|
|
font-weight: 600;
|
|
|
}
|
|
}
|
|
|
.duty-cal td.today .day-num {
|
|
.duty-cal td.today .day-num {
|
|
|
display: inline-flex;
|
|
display: inline-flex;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
justify-content: center;
|
|
|
- width: 22px;
|
|
|
|
|
- height: 22px;
|
|
|
|
|
|
|
+ width: 24px;
|
|
|
|
|
+ height: 24px;
|
|
|
color: #fff;
|
|
color: #fff;
|
|
|
background: var(--el-color-primary, #10b981);
|
|
background: var(--el-color-primary, #10b981);
|
|
|
border-radius: 50%;
|
|
border-radius: 50%;
|
|
@@ -1099,10 +1099,10 @@
|
|
|
.chip {
|
|
.chip {
|
|
|
display: block;
|
|
display: block;
|
|
|
margin-bottom: 3px;
|
|
margin-bottom: 3px;
|
|
|
- padding: 2px 6px;
|
|
|
|
|
|
|
+ padding: 3px 6px;
|
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
|
- font-size: 11px;
|
|
|
|
|
- line-height: 1.3;
|
|
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ line-height: 1.35;
|
|
|
text-overflow: ellipsis;
|
|
text-overflow: ellipsis;
|
|
|
white-space: nowrap;
|
|
white-space: nowrap;
|
|
|
border-radius: 4px;
|
|
border-radius: 4px;
|