| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- <template>
- <view class="page-no-tab">
- <uni-nav-bar
- fixed="true"
- statusBar="true"
- left-icon="back"
- title="假期余额"
- background-color="#157A2C"
- color="#fff"
- @clickLeft="back"
- ></uni-nav-bar>
- <view class="leave-hero">
- <text>2026年度假期</text>
- <text>余额更新至今天 14:30</text>
- </view>
- <view class="leave-grid">
- <view v-for="item in leaves" :key="item.name" class="leave-card card">
- <view class="circle" :style="{ borderColor: item.color, color: item.color }">
- <text>{{ item.left }}</text><small>{{ item.unit }}</small>
- </view>
- <text class="leave-name">{{ item.name }}</text>
- <text class="leave-used">已用 {{ item.used }}{{ item.unit }}</text>
- </view>
- </view>
- <view class="rule card section">
- <text class="rule-title">假期说明</text>
- <view v-for="r in rules" :key="r" class="rule-row">
- <view></view>
- <text>{{ r }}</text>
- </view>
- </view>
- <button class="apply-btn" @click="go('/pages/hr/apply/form?type=leave')">
- 发起请假申请
- </button>
- </view>
- </template>
- <script>
- export default {
- data() {
- return {
- // TODO(后端): 假期余额目前无对应接口,暂用静态数据兜底
- leaves: [
- { name: "年假", left: "4.5", used: "0.5", unit: "天", color: "#157a2c" },
- { name: "调休", left: "6", used: "2", unit: "小时", color: "#07a44d" },
- { name: "病假", left: "10", used: "0", unit: "天", color: "#f59a23" },
- { name: "事假", left: "—", used: "1", unit: "天", color: "#8b939f" },
- ],
- rules: [
- "年假有效期至2026年12月31日,逾期按制度处理。",
- "调休余额来自已审批加班,可用于小时级请假。",
- "病假需按规定上传医院相关证明材料。",
- ],
- };
- },
- methods: {
- go(url) {
- uni.navigateTo({ url });
- },
- },
- };
- </script>
- <style scoped lang="scss">
- @import "@/pages/hr/common-style.scss";
- .leave-hero {
- padding: 38rpx 28rpx 76rpx;
- background: linear-gradient(145deg, #1b8c37, #157a2c);
- color: #fff;
- }
- .leave-hero text {
- display: block;
- font-size: 35rpx;
- font-weight: 600;
- }
- .leave-hero text + text {
- margin-top: 10rpx;
- font-size: 22rpx;
- font-weight: 400;
- opacity: 0.75;
- }
- .leave-grid {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 20rpx;
- margin: -50rpx 24rpx 0;
- }
- .leave-card {
- padding: 28rpx;
- text-align: center;
- box-shadow: 0 10rpx 24rpx rgba(21, 122, 44, 0.08);
- }
- .circle {
- width: 116rpx;
- height: 116rpx;
- margin: auto;
- border: 7rpx solid;
- border-radius: 50%;
- display: flex;
- align-items: baseline;
- justify-content: center;
- padding-top: 28rpx;
- }
- .circle text {
- font-size: 33rpx;
- font-weight: 600;
- }
- .circle small {
- margin-left: 4rpx;
- font-size: 19rpx;
- }
- .leave-name {
- display: block;
- margin-top: 18rpx;
- font-size: 28rpx;
- font-weight: 500;
- }
- .leave-used {
- display: block;
- margin-top: 8rpx;
- color: #8b939f;
- font-size: 21rpx;
- }
- .rule {
- padding: 28rpx;
- }
- .rule-title {
- display: block;
- margin-bottom: 22rpx;
- font-size: 29rpx;
- font-weight: 600;
- }
- .rule-row {
- display: flex;
- margin: 15rpx 0;
- color: #6f7782;
- line-height: 1.6;
- font-size: 23rpx;
- }
- .rule-row view {
- width: 9rpx;
- height: 9rpx;
- margin: 13rpx 14rpx 0 0;
- border-radius: 50%;
- background: #b6bdc6;
- }
- .apply-btn {
- height: 88rpx;
- margin: 28rpx 24rpx;
- border-radius: 12rpx;
- background: #157a2c;
- color: #fff;
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 30rpx;
- }
- </style>
|