cxc-szcx-uniapp/pages/leave/application.vue

398 lines
8.5 KiB
Vue
Raw Normal View History

2024-09-14 02:26:50 +00:00
<template>
<view :class="{'gray':store.isgray==1}">
<view class="form">
<picker @change="bindType" :value="typeIndex" :range="typeArr" range-key="value">
<view class="f-row aic jcb box">
<view class="title">
请假类型
</view>
<view class="f-row aic">
<view :class="[{'choose':typeIndex==null},{'choosed':typeIndex!=null}]">
{{typeIndex!=null?typeArr[typeIndex].value:'请选择'}}
</view>
<uni-icons type="right" color="#333333"></uni-icons>
</view>
</view>
</picker>
<!-- <uni-datetime-picker type="date" @change="chooseStart">
<view class="f-row aic jcb box">
<view class="title">
开始时间
</view>
<view class="f-row aic">
<view :class="[{'choose':!start},{'choosed':start}]">
{{start?start:'请选择'}}
</view>
<uni-icons type="right" color="#333333"></uni-icons>
</view>
</view>
</uni-datetime-picker> -->
<picker mode="date" fields="day" @change="chooseStart" :value="start">
<view class="f-row aic jcb box">
<view class="title">
开始时间
</view>
<view class="f-row aic">
<view :class="[{'choose':!start},{'choosed':start}]">
{{start?start:'请选择'}}
</view>
<uni-icons type="right" color="#333333"></uni-icons>
</view>
</view>
</picker>
<picker mode="date" fields="day" @change="chooseEnd" :value="end">
<view class="f-row aic jcb box">
<view class="title">
结束时间
</view>
<view class="f-row aic">
<view :class="[{'choose':!end},{'choosed':end}]">
{{end?end:'请选择'}}
</view>
<uni-icons type="right" color="#333333"></uni-icons>
</view>
</view>
</picker>
<!-- <uni-datetime-picker type="date" @change="chooseEnd">
<view class="f-row aic jcb box">
<view class="title">
结束时间
</view>
<view class="f-row aic">
<view :class="[{'choose':!end},{'choosed':end}]">
{{end?end:'请选择'}}
</view>
<uni-icons type="right" color="#2C2C2C"></uni-icons>
</view>
</view>
</uni-datetime-picker> -->
<view class="f-row aic jcb input_box">
<view class="title">
工作单位
</view>
<input v-model="gzdw" type="text" placeholder="请输入"
placeholder-style="font-size: 28rpx;color: #999999;" />
</view>
<view class="f-row aic jcb input_box">
<view class="title">
行政级别
</view>
<input v-model="xzjb" type="text" placeholder="请输入"
placeholder-style="font-size: 28rpx;color: #999999;" />
</view>
<view class="f-row aic jcb input_box">
<view class="title">
请假地点
</view>
<input v-model="xjdd" type="text" placeholder="请输入"
placeholder-style="font-size: 28rpx;color: #999999;" />
</view>
<!-- <view class="f-row aic jcb box">
<view class="title">
请假时长
</view>
<view class="f-row aic">
<view class="choose">
小时
</view>
</view>
</view> -->
</view>
<view class="lines">
</view>
<view class="reason f-col">
<view class="title">
请假事由
</view>
<textarea v-model="reason" placeholder="请输入请假事由" placeholder-style="font-size: 28rpx;color: #999999;"
cols="30" rows="10"></textarea>
</view>
<view class="lines">
</view>
<view class="progress_box">
<view class="title">
审批流程
</view>
<view class="progress f-row aic">
<view class="f-col aic ">
<image class="avatar" src="" mode=""></image>
<text>发起人</text>
</view>
<image class="line" src="../../static/line.png" mode=""></image>
<view class="f-col aic">
<image class="avatar" src="" mode=""></image>
<text>部门领导</text>
</view>
<image class="line" src="../../static/line.png" mode=""></image>
<view class="f-col aic">
<image class="avatar" src="" mode=""></image>
<text>人事部门</text>
</view>
</view>
</view>
<view class="btn f-col aic">
<view class="" @click="qjAdd">
提交
</view>
</view>
<!-- <uni-popup ref="typepop" type="bottom" border-radius="10px 10px 0 0">
<view class="pop">
<view class="popbtn f-row aic jcb">
<view class="cancel">
取消
</view>
<view class="confirm">
确定
</view>
</view>
<view class="type">
<view class="" v-for="item,i in 8" :key="i">
年假
</view>
</view>
</view>
</uni-popup> -->
</view>
</template>
<script setup>
import {
ref,
getCurrentInstance
} from 'vue';
import {
qjAddApi,
startMutilProcessApi,
getDictItemsApi
} from '@/network/api.js';
import {
onLoad
} from '@dcloudio/uni-app'
import {
useStore
} from '@/store';
import dayjs from 'dayjs';
const store = useStore()
const {
proxy
} = getCurrentInstance()
// const typepop = ref(null)
// const openPop = () => {
// typepop.value.open()
// }
// const closePop = () => {
// typepop.value.close()
// }
onLoad(() => {
getDictItems()
})
const typeArr = ref([])
const typeIndex = ref(null)
const bindType = (e) => {
typeIndex.value = e.detail.value
}
const start = ref("")
const end = ref("")
const reason = ref("")
const chooseStart = (e) => {
start.value = e.detail.value
}
const chooseEnd = (e) => {
end.value = e.detail.value
}
/**行政级别*/
const xzjb = ref('')
/**工作单位*/
const gzdw = ref('')
/**休假地点*/
const xjdd = ref('')
const qjAdd = () => {
if (typeIndex.value == null) return proxy.$toast('请选择请假类型')
if (!start.value) return proxy.$toast('请选择开始时间')
if (!end.value) return proxy.$toast('请选择结束时间')
if (!gzdw.value.trim()) return proxy.$toast('请输入工作单位')
if (!xzjb.value.trim()) return proxy.$toast('请输入行政级别')
if (!xjdd.value.trim()) return proxy.$toast('请输入请假地点')
if (!reason.value.trim()) return proxy.$toast('请输入请假事由')
qjAddApi({
qjlx: typeArr.value[typeIndex.value].value,
starttime: start.value,
endtime: end.value,
sy: reason.value,
createBy: store.userinfo.username,
qjname: store.userinfo.realname,
sysOrgCode: store.userinfo.orgCode,
phone: store.userinfo.phone,
qxjxzjb: xzjb.value,
gzdw: gzdw.value,
xjdd: xjdd.value
}).then((res) => {
if (res.success) {
startMutilProcess(res.message)
}
}).catch((err) => {
})
}
const startMutilProcess = (id) => {
startMutilProcessApi({
flowCode: "dev_cxc_qxj_zg_001",
id,
formUrl: "cxcQxjZg/vue/CxcQxjZgFrom",
formUrlMobile: "leaveApplication"
}).then((res) => {
if (res.success) {
proxy.$toast(res.message)
setTimeout(() => {
uni.navigateBack()
}, 2000)
}
}).catch((err) => {
console.log(err);
})
}
const getDictItems = () => {
getDictItemsApi().then((res) => {
if (res.success) {
typeArr.value = res.result
}
})
}
</script>
<style>
page {
background-color: #fff;
}
</style>
<style lang="scss" scoped>
// .pop{
// background-color: #fff;
// border-radius: 20rpx 20rpx 0 0;
// }
.btn {
border-top: 1px solid #EFEFEF;
height: 120rpx;
justify-content: center;
position: fixed;
bottom: 0;
width: 100vw;
view {
width: 690rpx;
height: 88rpx;
background: #01508B;
border-radius: 16rpx;
font-size: 28rpx;
color: #FFFFFF;
text-align: center;
line-height: 88rpx;
}
}
.input_box {
height: 100rpx;
.title {
font-size: 28rpx;
color: #333333;
}
input {
flex: 1;
height: 100%;
text-align: right;
font-size: 28rpx;
color: #333333;
}
}
.form {
padding: 0 30rpx;
background-color: #fff;
.title {
font-size: 28rpx;
color: #333333;
}
.box {
height: 100rpx;
}
.box:not(:last-child) {
border-bottom: 1px solid #EFEFEF;
}
.choose {
font-size: 28rpx;
color: #999999;
}
.choosed {
font-size: 28rpx;
color: #333333;
}
}
.reason {
background-color: #fff;
margin-top: 20rpx;
height: 290rpx;
padding: 30rpx;
.title {
font-size: 28rpx;
color: #333333;
}
textarea {
width: 100%;
margin-top: 20rpx;
}
}
.progress_box {
background-color: #fff;
margin-top: 20rpx;
padding: 30rpx;
.title {
font-size: 28rpx;
color: #333333;
}
.avatar {
width: 78rpx;
height: 78rpx;
border-radius: 38rpx;
background-color: #333333;
margin-top: 30rpx;
}
text {
font-size: 24rpx;
color: #333333;
margin-top: 10rpx;
}
.line {
width: 91rpx;
height: 17rpx;
margin: 0 40rpx;
}
}
.lines {
height: 20rpx;
background-color: #F8F8F8;
}
</style>