dbsd_kczx/src/views/site/yjfk/YjfkForm.vue

164 lines
4.9 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>
<a-spin :spinning="confirmLoading">
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row>
<a-col :span="24">
<div style="font-size: 18px;font-weight: 600;line-height: 30px;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;欢迎全校师生对学校教学质量教学管理等方面及课程信息中心的使用情况提出宝贵意见和建议如果您希望课程信息中心增加什么功能也请您告诉我们您的意见和建议将在第一时间被处理
</div>
</a-col>
<a-col :span="24" style="margin-top: 20px;">
<a-form-item label="" v-bind="validateInfos.suggestions">
<a-textarea v-model:value="formData.suggestions" rows="10" placeholder="请输入意见建议内容" :disabled="disabled"/>
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-spin>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted, createVNode,h } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import { getValueType } from '/@/utils';
import { saveOrUpdate } from './YjfkForm.api';
import { Form } from 'ant-design-vue';
import { dateFormat } from '/@/utils/common/compUtils';
//用户相关
import { getUserId,getUserSf } from '/@/views/site/utils/index';
import { useUserStore } from '/@/store/modules/user';
import { Modal } from 'ant-design-vue';
import { ExclamationCircleOutlined,CheckOutlined } from '@ant-design/icons-vue';
const userStore = useUserStore();
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: ()=>{} },
formBpm: { type: Boolean, default: true }
});
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const formData = reactive<Record<string, any>>({
id: '',
suggestions: '',
feedback: '',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 0 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 24 } });
const confirmLoading = ref<boolean>(false);
//表单验证
const validatorRules = {
};
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: true });
// 表单禁用
const disabled = computed(()=>{
if(props.formBpm === true){
if(props.formData.disabled === false){
return false;
}else{
return true;
}
}
return props.formDisabled;
});
/**
* 新增
*/
function add() {
edit({});
}
/**
* 编辑
*/
function edit(record) {
nextTick(() => {
resetFields();
//赋值
Object.assign(formData, record);
});
}
/**
* 提交数据
*/
async function submitForm() {
// 触发表单验证
await validate();
confirmLoading.value = true;
const isUpdate = ref<boolean>(false);
//时间格式化
let model = formData;
if (model.id) {
isUpdate.value = true;
}
//循环数据
for (let data in model) {
//如果该数据是数组并且是字符串类型
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//如果是字符串类型的需要变成以逗号分割的字符串
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
model.userid = getUserId()
model.username = userStore?.getUserInfo?.realname
model.suggestionstime = dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss')
let tkrsf = getUserSf();
if(tkrsf=="S"){
tkrsf = "学生";
}else{
tkrsf = "老师";
}
model.tjrsf = tkrsf;
if(!model.suggestions){
createMessage.warning('请填写意见建议');
confirmLoading.value = false;
return;
}
await saveOrUpdate(model, isUpdate.value)
.then((res) => {
if (res.success) {
Modal.success({
icon: createVNode({}),
content: h('div', {style:'height:200px;text-align:center;'}, [
h('icon', {style:'font-size:100px;font-weight:600;color:green;'}, createVNode(CheckOutlined)),
h('p',{style:'font-size:36px;font-weight:600;color:black;'}, '操作成功'),
]),
okText: 'OK',
width:'500px',
});
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
min-height: 500px !important;
overflow-y: auto;
padding: 24px 24px 24px 24px;
}
</style>