3 changed files with 250 additions and 11 deletions
@ -0,0 +1,242 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog v-model="visible" width="50vw" top="4vh" class="dialog-header-nopadding" align-center |
||||||
|
style="--el-dialog-padding-primary: 10px"> |
||||||
|
<template #header="" style="display: flex;align-items: center;justify-content: space-between;"> |
||||||
|
<div class="dialog-header"> |
||||||
|
<span class="dialog-title">不满意信件申诉审批意见</span> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<div class="dialog-body"> |
||||||
|
<el-form ref="formRef" :model="form" :rules="rules" style="width: 100%"> |
||||||
|
<el-form-item label="信件信息" prop="passReason" required |
||||||
|
style="display: flex;flex-direction: column;justify-content: start;"> |
||||||
|
|
||||||
|
<template #label> |
||||||
|
<span class="main-label" style="text-align: left; width: 100%">不满意信件申诉审批意见</span> |
||||||
|
</template> |
||||||
|
<el-row style="width: 100%"> |
||||||
|
<el-input type="textarea" v-model="form.passReason" placeholder="请输入不满意信件申诉审批意见" |
||||||
|
:autosize="{ minRows: 4, maxRows: 10 }" resize="none" /> |
||||||
|
</el-row> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<div style="height: 20vh;"></div> |
||||||
|
<div style="display: flex;justify-content: flex-end;"> |
||||||
|
<el-button type="primary" @click="handleSubmit">审批通过</el-button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script lang="ts" setup> |
||||||
|
import { ref, defineProps, watch, reactive } from 'vue' |
||||||
|
import type { FormInstance, FormRules } from "element-plus"; |
||||||
|
import { ElMessage } from 'element-plus'; |
||||||
|
import { approved } from '@/api/work/appeal'; |
||||||
|
import useUserStore from '@/stores/modules/user'; |
||||||
|
const props = defineProps({ |
||||||
|
show: { |
||||||
|
type: Boolean, |
||||||
|
default: false |
||||||
|
}, |
||||||
|
mailId: { |
||||||
|
type: String, |
||||||
|
default: '' |
||||||
|
} |
||||||
|
}) |
||||||
|
const emits = defineEmits(["update:show", "update"]); |
||||||
|
const visible = ref(props.show) |
||||||
|
watch(visible, (val) => { |
||||||
|
emits("update:show", val); |
||||||
|
}); |
||||||
|
watch( |
||||||
|
() => props.show, |
||||||
|
(val) => { |
||||||
|
visible.value = val; |
||||||
|
} |
||||||
|
); |
||||||
|
interface FormAppeal { |
||||||
|
passReason: string; |
||||||
|
} |
||||||
|
const form = ref({ |
||||||
|
mailId: '', |
||||||
|
passReason: '', |
||||||
|
secondDeptCondition: '', |
||||||
|
firstDeptCondition: '' |
||||||
|
}) |
||||||
|
const formRef = ref<FormInstance>(); |
||||||
|
const rules = reactive<FormRules<FormAppeal>>({ |
||||||
|
passReason: [ |
||||||
|
{ required: true, message: '请输入审批意见', trigger: 'blur' }, |
||||||
|
{ min: 2, message: '驳回理由不能少于2个字', trigger: 'blur' }, |
||||||
|
{ max: 1000, message: '驳回理由不能多于1000个字', trigger: 'blur' } |
||||||
|
] |
||||||
|
}) |
||||||
|
|
||||||
|
const userStore = useUserStore() |
||||||
|
const handleSubmit = async () => { |
||||||
|
if (!formRef.value) return |
||||||
|
await formRef.value.validate((valid, fields) => { |
||||||
|
console.log(userStore.userInfo) |
||||||
|
if (!valid) { |
||||||
|
ElMessage.error('审批失败') |
||||||
|
} else { |
||||||
|
form.value.mailId = props.mailId |
||||||
|
switch (userStore.userInfo.roleId) { |
||||||
|
case 2: |
||||||
|
form.value.secondDeptCondition = form.value.passReason |
||||||
|
break; |
||||||
|
case 1: |
||||||
|
form.value.firstDeptCondition = form.value.passReason |
||||||
|
break; |
||||||
|
} |
||||||
|
approved(form.value).then(() => { |
||||||
|
visible.value = false; |
||||||
|
ElMessage.success('申诉已通过'); |
||||||
|
emits('update:show', false); |
||||||
|
emits("update"); |
||||||
|
}).catch((err) => { |
||||||
|
ElMessage.error('审批失败'); |
||||||
|
console.log(err) |
||||||
|
}) |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.dialog-header { |
||||||
|
height: 60px; |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
justify-self: center; |
||||||
|
} |
||||||
|
|
||||||
|
.dialog-title { |
||||||
|
margin-left: 20px; |
||||||
|
height: 22px; |
||||||
|
font-size: 16px; |
||||||
|
font-family: PingFangSC, PingFang SC; |
||||||
|
font-weight: 400; |
||||||
|
color: #FFFFFF; |
||||||
|
line-height: 22px; |
||||||
|
} |
||||||
|
|
||||||
|
.dialog-body { |
||||||
|
margin-left: 20px; |
||||||
|
margin-right: 20px; |
||||||
|
} |
||||||
|
|
||||||
|
.main-label { |
||||||
|
width: 100%; |
||||||
|
height: 22px; |
||||||
|
font-size: 20px; |
||||||
|
font-family: PingFang-SC, PingFang-SC; |
||||||
|
font-weight: bold; |
||||||
|
color: #333333; |
||||||
|
line-height: 22px; |
||||||
|
} |
||||||
|
|
||||||
|
.main-content { |
||||||
|
width: 100%; |
||||||
|
height: 22px; |
||||||
|
font-size: 20px; |
||||||
|
font-family: PingFang-SC, PingFang-SC; |
||||||
|
font-weight: bold; |
||||||
|
color: #162582; |
||||||
|
line-height: 22px; |
||||||
|
} |
||||||
|
|
||||||
|
.title-label { |
||||||
|
margin-bottom: 20px; |
||||||
|
} |
||||||
|
|
||||||
|
.info-input { |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
|
||||||
|
.info-content { |
||||||
|
display: block; |
||||||
|
background-color: #FAFBFF; |
||||||
|
margin: 20px; |
||||||
|
|
||||||
|
font-family: PingFangSC, PingFang SC; |
||||||
|
font-weight: 400; |
||||||
|
font-size: 16px; |
||||||
|
color: #333333; |
||||||
|
line-height: 32px; |
||||||
|
text-align: left; |
||||||
|
font-style: normal; |
||||||
|
} |
||||||
|
|
||||||
|
.el-upload__inner { |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
|
||||||
|
// 可定义局部公共样式 |
||||||
|
$publicColor: #162582; |
||||||
|
$publicHeight: 35px; |
||||||
|
|
||||||
|
.steps { |
||||||
|
width: 100%; |
||||||
|
margin: auto 0; |
||||||
|
height: $publicHeight; |
||||||
|
|
||||||
|
::v-deep .el-step { |
||||||
|
height: 100%; |
||||||
|
|
||||||
|
.el-step__icon.is-text { |
||||||
|
background-color: $publicColor; |
||||||
|
|
||||||
|
.el-step__icon-inner { |
||||||
|
color: #FFFFFF; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.el-step__main { |
||||||
|
width: 200px; |
||||||
|
} |
||||||
|
|
||||||
|
.el-step__line { |
||||||
|
background-color: rgba(0, 0, 0, 0.15); |
||||||
|
margin-right: 10px; |
||||||
|
margin-left: 135px; |
||||||
|
top: 50%; |
||||||
|
height: 1px; |
||||||
|
} |
||||||
|
|
||||||
|
.el-step__title { |
||||||
|
color: #333333; |
||||||
|
width: 100%; |
||||||
|
position: absolute; |
||||||
|
top: calc((100% - 135%)/2); |
||||||
|
left: calc(0% + 30px); |
||||||
|
} |
||||||
|
|
||||||
|
.el-step__title.is-wait { |
||||||
|
width: 100%; |
||||||
|
color: #999999; |
||||||
|
} |
||||||
|
|
||||||
|
.el-step__head.is-wait { |
||||||
|
.el-step__icon.is-text { |
||||||
|
background: #FFF; |
||||||
|
|
||||||
|
.el-step__icon-inner { |
||||||
|
color: #CCCCCC; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.el-step__head.is-error { |
||||||
|
.el-step__icon.is-text { |
||||||
|
background-color: #FF0000; |
||||||
|
border: 0px; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
||||||
Loading…
Reference in new issue