You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.9 KiB
138 lines
3.9 KiB
<!--
|
|
* 无处罚证明申请主表
|
|
*
|
|
* @Author: wzh
|
|
* @Date: 2026-01-07 21:36:44
|
|
* @Copyright 1.0
|
|
-->
|
|
<template>
|
|
<a-modal
|
|
:title="form.id ? '编辑无处罚证明申请' : '新增无处罚证明申请'"
|
|
:width="500"
|
|
:open="visibleFlag"
|
|
@cancel="onClose"
|
|
:maskClosable="false"
|
|
:destroyOnClose="true"
|
|
>
|
|
<a-form ref="formRef" :model="form" :rules="rules" :label-col="{ span: 6 }" >
|
|
<a-form-item label="申请事由" name="usePurpose">
|
|
<a-textarea v-model:value="form.usePurpose" placeholder="请输入申请事由" :rows="4" />
|
|
</a-form-item>
|
|
</a-form>
|
|
|
|
<template #footer>
|
|
<a-space>
|
|
<a-button @click="onClose">取消</a-button>
|
|
<a-button type="primary" @click="onSubmit">提交申请</a-button>
|
|
</a-space>
|
|
</template>
|
|
</a-modal>
|
|
</template>
|
|
<script setup>
|
|
import { reactive, ref, nextTick, computed } from 'vue';
|
|
import _ from 'lodash';
|
|
import { message } from 'ant-design-vue';
|
|
import { SmartLoading } from '/@/components/framework/smart-loading';
|
|
import { penaltyApplyApi } from '/@/api/business/penalty-apply/penalty-apply-api';
|
|
import { smartSentry } from '/@/lib/smart-sentry';
|
|
import { useUserStore } from '/@/store/modules/system/user';
|
|
import DictSelect from '/@/components/support/dict-select/index.vue';
|
|
|
|
// ------------------------ 事件 ------------------------
|
|
|
|
const emits = defineEmits(['reloadList']);
|
|
|
|
// ------------------------ 显示与隐藏 ------------------------
|
|
// 是否显示
|
|
const visibleFlag = ref(false);
|
|
|
|
// ------------------------ 用户信息 ------------------------
|
|
const userStore = useUserStore();
|
|
|
|
// 当前用户信息
|
|
const currentUser = computed(() => ({
|
|
userId: userStore.userId,
|
|
userName: userStore.actualName,
|
|
departmentName: userStore.departmentName
|
|
}));
|
|
|
|
function show(rowData) {
|
|
Object.assign(form, formDefault);
|
|
|
|
// 设置默认值
|
|
if (!rowData || _.isEmpty(rowData)) {
|
|
// 新增时设置默认值
|
|
form.userId = currentUser.value.userId;
|
|
form.userName = currentUser.value.userName;
|
|
form.status = 0; // 默认未提交状态
|
|
} else {
|
|
// 编辑时加载数据
|
|
Object.assign(form, rowData);
|
|
}
|
|
|
|
visibleFlag.value = true;
|
|
nextTick(() => {
|
|
formRef.value.clearValidate();
|
|
});
|
|
}
|
|
|
|
function onClose() {
|
|
Object.assign(form, formDefault);
|
|
visibleFlag.value = false;
|
|
}
|
|
|
|
// ------------------------ 表单 ------------------------
|
|
|
|
// 组件ref
|
|
const formRef = ref();
|
|
|
|
const formDefault = {
|
|
id: undefined, //申请ID
|
|
userId: undefined, //申请人ID
|
|
userName: undefined, //申请人姓名
|
|
applyDate: undefined, //申请日期
|
|
usePurpose: undefined, //申请事由
|
|
proofMaterials: undefined, //证明材料
|
|
status: undefined, //状态(0-未提交,1-已提交,2-审核中,3-已批准,5-已驳回)
|
|
approvalRemark: undefined, //审批意见
|
|
createTime: undefined, //创建时间
|
|
updateTime: undefined, //更新时间
|
|
};
|
|
|
|
let form = reactive({ ...formDefault });
|
|
|
|
const rules = {
|
|
usePurpose: [{ required: true, message: '申请事由 必填' }],
|
|
};
|
|
|
|
// ------------------------ 提交申请 ------------------------
|
|
|
|
async function onSubmit() {
|
|
try {
|
|
await formRef.value.validateFields();
|
|
SmartLoading.show();
|
|
|
|
// 提交申请,状态为1(已提交)
|
|
const submitData = { ...form };
|
|
submitData.status = 1;
|
|
|
|
if (submitData.id) {
|
|
await penaltyApplyApi.update(submitData);
|
|
message.success('提交申请成功');
|
|
} else {
|
|
await penaltyApplyApi.add(submitData);
|
|
message.success('提交申请成功');
|
|
}
|
|
onClose();
|
|
emits('reloadList');
|
|
} catch (err) {
|
|
smartSentry.captureError(err);
|
|
} finally {
|
|
SmartLoading.hide();
|
|
}
|
|
}
|
|
|
|
defineExpose({
|
|
show,
|
|
});
|
|
</script>
|
|
|