|
@@ -0,0 +1,313 @@
|
|
|
+<<<<<<< HEAD
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+2222
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+
|
|
|
+=======
|
|
|
+<script setup >
|
|
|
+import {ref} from 'vue';
|
|
|
+import {userInfo} from '~/store/user';
|
|
|
+const {uo_type,user_id,uo_id} = userInfo
|
|
|
+import {queryApi,org_users} from './apiItem';
|
|
|
+
|
|
|
+const isBureau = ref(false) // 当前用户是否局端
|
|
|
+isBureau.value = uo_type === '1'
|
|
|
+/***************************请假管理*******************************************/
|
|
|
+
|
|
|
+//外出管理-返回
|
|
|
+const onClickLeft = () => history.back();
|
|
|
+
|
|
|
+const tabActive = ref(0);
|
|
|
+
|
|
|
+const applyType = ref();
|
|
|
+const applyTypeOption = ref([
|
|
|
+ { text: '请假类型', value: '' },
|
|
|
+ { text: '事假', value: 1 },
|
|
|
+ { text: '病假', value: 2 },
|
|
|
+ { text: '婚假', value: 3 },
|
|
|
+ { text: '丧假', value: 4 },
|
|
|
+ { text: '产假', value: 5 },
|
|
|
+ { text: '年休假', value: 6 },
|
|
|
+ { text: '调休', value: 7 },
|
|
|
+ { text: '其他', value: 8 },
|
|
|
+]);
|
|
|
+const applyReason = ref();
|
|
|
+
|
|
|
+
|
|
|
+const tableList = ref([])
|
|
|
+const loading = ref(false)
|
|
|
+const finished = ref(false)
|
|
|
+
|
|
|
+const onLoad = () => {
|
|
|
+ // 异步更新数据
|
|
|
+ // setTimeout 仅做示例,真实场景中一般为 ajax 请求
|
|
|
+ setTimeout(() => {
|
|
|
+ for (let i = 0; i < 10; i++) {
|
|
|
+ list.value.push(list.value.length + 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加载状态结束
|
|
|
+ loading.value = false;
|
|
|
+
|
|
|
+ // 数据全部加载完成
|
|
|
+ if (list.value.length >= 40) {
|
|
|
+ finished.value = true;
|
|
|
+ }
|
|
|
+ }, 1000);
|
|
|
+
|
|
|
+ let transObjs = {
|
|
|
+ page:1
|
|
|
+ }
|
|
|
+ queryApi(transObjs)
|
|
|
+ .then(res => {
|
|
|
+ tableList.value = res.data.page_data;
|
|
|
+ if (tableList.value.length >= res.data.total_rows) {
|
|
|
+ finished.value = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ .catch(error => {
|
|
|
+ console.log(error)
|
|
|
+ })
|
|
|
+};
|
|
|
+
|
|
|
+const onSubmit = () => {
|
|
|
+ show.value = true;
|
|
|
+}
|
|
|
+
|
|
|
+const show = ref(false);
|
|
|
+
|
|
|
+const value1 = ref('');
|
|
|
+const value2 = ref('');
|
|
|
+const value3 = ref('abc');
|
|
|
+const value4 = ref('');
|
|
|
+const pattern = /\d{6}/;
|
|
|
+
|
|
|
+// 校验函数返回 true 表示校验通过,false 表示不通过
|
|
|
+const validator = (val) => /1\d{10}/.test(val);
|
|
|
+
|
|
|
+// 校验函数可以直接返回一段错误提示
|
|
|
+const validatorMessage = (val) => `${val} 不合法,请重新输入`;
|
|
|
+
|
|
|
+// 校验函数可以返回 Promise,实现异步校验
|
|
|
+const asyncValidator = (val) =>
|
|
|
+ new Promise((resolve) => {
|
|
|
+ showLoadingToast('验证中...');
|
|
|
+
|
|
|
+ setTimeout(() => {
|
|
|
+ closeToast();
|
|
|
+ resolve(val === '1234');
|
|
|
+ }, 1000);
|
|
|
+ });
|
|
|
+
|
|
|
+const onFailed = (errorInfo) => {
|
|
|
+ console.log('failed', errorInfo);
|
|
|
+};
|
|
|
+
|
|
|
+/***************************请假审批*******************************************/
|
|
|
+const applyPerson = ref();
|
|
|
+
|
|
|
+const userLIST = ref([]);
|
|
|
+//获取用户列表
|
|
|
+const getUserList=()=> {
|
|
|
+ let transObjs = {
|
|
|
+ dept_id: uo_id,
|
|
|
+ page: 1,
|
|
|
+ limit: 99999,
|
|
|
+ };
|
|
|
+ org_users(transObjs).then((res) => {
|
|
|
+ if (res.code == 1) {
|
|
|
+ let tempArr = [];
|
|
|
+ res.data.page_data.forEach(item => {
|
|
|
+ tempArr.push({
|
|
|
+ text: item.user_realname,
|
|
|
+ value:item.user_id,
|
|
|
+ })
|
|
|
+ })
|
|
|
+ userLIST.value = tempArr;
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+getUserList();
|
|
|
+
|
|
|
+
|
|
|
+const handleCheckDialog = (item) => {
|
|
|
+ if (user_id == item.xxq_spr_user_id) {
|
|
|
+ this.dialogCheckVisible = true;
|
|
|
+ this.curCheckId = row.xxq_id;
|
|
|
+ } else {
|
|
|
+ showNotify({ type: 'warning', message: '此条申请,您无法审核~' });
|
|
|
+ return
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<template>
|
|
|
+<div class="leaveMag">
|
|
|
+ <div v-show="isBureau">
|
|
|
+ <div style="width: 100%;text-align: center;"><span style="font-size: 20px;">本功能仅对校端用户开放</span></div>
|
|
|
+ </div>
|
|
|
+ <div class="index" v-show="!isBureau">
|
|
|
+ <van-nav-bar title="请假管理" left-text="返回" left-arrow @click-left="onClickLeft"/>
|
|
|
+
|
|
|
+ <van-tabs v-model:active="tabActive">
|
|
|
+ <van-tab title="请假管理">
|
|
|
+
|
|
|
+ <van-dropdown-menu>
|
|
|
+ <van-dropdown-item v-model="applyType" title="请假类型" :options="applyTypeOption" @change="dropItemChange" />
|
|
|
+ <van-dropdown-item ref="itemRef2" title="请假事由">
|
|
|
+ <van-cell-group inset>
|
|
|
+ <van-field v-model="applyReason" placeholder="请输入请假事由" />
|
|
|
+ </van-cell-group>
|
|
|
+ <div style="padding: 5px 16px;">
|
|
|
+ <van-button type="primary" block round @click="onConfirm(0)">
|
|
|
+ 确认
|
|
|
+ </van-button>
|
|
|
+ </div>
|
|
|
+ </van-dropdown-item>
|
|
|
+ </van-dropdown-menu>
|
|
|
+
|
|
|
+ <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
|
|
|
+ <van-cell v-for="(item,index ) in tableList" :key="index" :title="item" >
|
|
|
+ <template #title>
|
|
|
+ <div>申请时间:{{ item.xxq_sqsj }}</div>
|
|
|
+ <div>请假人:{{ item.xxq_qjr }}</div>
|
|
|
+ </template>
|
|
|
+ <template #label>
|
|
|
+ <div>开始时间:{{ item.xxq_kssj }}</div>
|
|
|
+ <div>结束时间:{{ item.xxq_jssj }}</div>
|
|
|
+ <div>请假时长(天):{{ item.xxq_qjsc }}</div>
|
|
|
+ <div>状态:
|
|
|
+ <span :class="item.xxq_zt_option_k == '1' ? 'greenText' : (item.xxq_zt_option_k == '3' ? 'redText' : '')" >{{ item.xxq_zt }}</span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ </van-cell>
|
|
|
+ </van-list>
|
|
|
+
|
|
|
+ <van-submit-bar button-text="请假申请" @submit="onSubmit" />
|
|
|
+
|
|
|
+ <van-dialog v-model:show="show" title="请假申请" confirmButtonDisabled="false">
|
|
|
+ <van-form @failed="onFailed">
|
|
|
+ <van-cell-group inset>
|
|
|
+ <!-- 通过 pattern 进行正则校验 -->
|
|
|
+ <van-field
|
|
|
+ v-model="value1"
|
|
|
+ name="申请时间"
|
|
|
+ label="申请时间"
|
|
|
+ placeholder="正则校验"
|
|
|
+ :rules="[{ pattern, message: '请输入正确内容' }]"
|
|
|
+ />
|
|
|
+ <!-- 通过 validator 进行函数校验 -->
|
|
|
+ <van-field
|
|
|
+ v-model="value2"
|
|
|
+ name="请假人:"
|
|
|
+ label="请假人:"
|
|
|
+ placeholder="函数校验"
|
|
|
+ :rules="[{ validator, message: '请输入正确内容' }]"
|
|
|
+ />
|
|
|
+ <!-- 通过 validator 返回错误提示 -->
|
|
|
+ <van-field
|
|
|
+ v-model="value3"
|
|
|
+ name="validatorMessage"
|
|
|
+ placeholder="校验函数返回错误提示"
|
|
|
+ :rules="[{ validator: validatorMessage }]"
|
|
|
+ />
|
|
|
+ <!-- 通过 validator 进行异步函数校验 -->
|
|
|
+ <van-field
|
|
|
+ v-model="value4"
|
|
|
+ name="asyncValidator"
|
|
|
+ placeholder="异步函数校验"
|
|
|
+ :rules="[{ validator: asyncValidator, message: '请输入正确内容' }]"
|
|
|
+ />
|
|
|
+ </van-cell-group>
|
|
|
+ <div style="margin: 16px;">
|
|
|
+ <van-button round block type="primary" native-type="submit">
|
|
|
+ 提交
|
|
|
+ </van-button>
|
|
|
+ </div>
|
|
|
+ </van-form>
|
|
|
+
|
|
|
+ </van-dialog>
|
|
|
+
|
|
|
+ </van-tab>
|
|
|
+ <van-tab title="请假审批">
|
|
|
+ <van-dropdown-menu>
|
|
|
+ <van-dropdown-item v-model="applyType" title="请假类型" :options="applyTypeOption" />
|
|
|
+ <van-dropdown-item v-model="applyPerson" title="申请人" :options="userLIST" />
|
|
|
+ <van-dropdown-item ref="itemRef2" title="请假事由">
|
|
|
+ <van-cell-group inset>
|
|
|
+ <van-field v-model="applyReason" placeholder="请输入请假事由" />
|
|
|
+ </van-cell-group>
|
|
|
+ <div style="padding: 5px 16px;">
|
|
|
+ <van-button type="primary" block round @click="onConfirm(0)">
|
|
|
+ 确认
|
|
|
+ </van-button>
|
|
|
+ </div>
|
|
|
+ </van-dropdown-item>
|
|
|
+ </van-dropdown-menu>
|
|
|
+
|
|
|
+ <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
|
|
|
+ <van-cell v-for="(item,index) in tableList" :key="index" :title="item" >
|
|
|
+ <template #title>
|
|
|
+ <div>申请时间:{{ item.xxq_sqsj }}</div>
|
|
|
+ <div>请假人:{{ item.xxq_qjr }}</div>
|
|
|
+ </template>
|
|
|
+ <template #label>
|
|
|
+ <div>开始时间:{{ item.xxq_kssj }}</div>
|
|
|
+ <div>结束时间:{{ item.xxq_jssj }}</div>
|
|
|
+ <div>请假时长(天):{{ item.xxq_qjsc }}</div>
|
|
|
+ <div>请假事由:{{ item.xxq_qjsy }}</div>
|
|
|
+
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template #right-icon>
|
|
|
+ <van-button type="primary" size="small" @click="handleCheckDialog(item)">审核</van-button>
|
|
|
+ </template>
|
|
|
+ </van-cell>
|
|
|
+ </van-list>
|
|
|
+
|
|
|
+ </van-tab>
|
|
|
+ </van-tabs>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ </div>
|
|
|
+</div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.vant-table-container {
|
|
|
+ width: 100%;
|
|
|
+ padding: 20px;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+.even-row {
|
|
|
+ background-color: #f7f7f7;
|
|
|
+}
|
|
|
+
|
|
|
+.odd-row {
|
|
|
+ background-color: #ffffff;
|
|
|
+}
|
|
|
+.greenText{
|
|
|
+ color: green;
|
|
|
+}
|
|
|
+.redText{
|
|
|
+ color: red;
|
|
|
+}
|
|
|
+>>>>>>> liua
|
|
|
+</style>
|