cxc-szcx-uniapp/pages/leave/application.vue
2024-09-19 15:12:58 +08:00

398 lines
8.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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 '@/api/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>