Advice-add.vue 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <el-dialog v-model="state.dialogVisible" width="800px" draggable title="新增常用意见">
  3. <el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
  4. <el-row :gutter="10">
  5. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
  6. <el-form-item label="意见内容" prop="content" :rules="[{ required: true, message: '请填写意见内容', trigger: 'blur' }]">
  7. <el-input
  8. v-model="state.ruleForm.content"
  9. placeholder="请填写意见内容"
  10. :autosize="{ minRows: 6, maxRows: 10 }"
  11. type="textarea"
  12. show-word-limit
  13. maxlength="2000"
  14. ></el-input>
  15. </el-form-item>
  16. </el-col>
  17. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  18. <el-form-item label="意见类型" prop="commonType" :rules="[{ required: true, message: '请选择意见类型', trigger: 'change' }]">
  19. <el-select v-model="state.ruleForm.commonType" placeholder="请选择意见类型" clearable class="w100">
  20. <el-option v-for="item in commonType" :value="item.key" :key="item.key" :label="item.value" />
  21. </el-select>
  22. </el-form-item>
  23. </el-col>
  24. </el-row>
  25. </el-form>
  26. <template #footer>
  27. <span class="dialog-footer">
  28. <el-button @click="closeDialog" class="default-button">取 消</el-button>
  29. <el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="loading">确 定</el-button>
  30. </span>
  31. </template>
  32. </el-dialog>
  33. </template>
  34. <script setup lang="ts" name="auxiliaryAdviceAdd">
  35. import { reactive, ref } from 'vue';
  36. import { ElMessage, FormInstance } from 'element-plus';
  37. import { throttle } from '@/utils/tools';
  38. import { addCommon } from '@/api/auxiliary/advice';
  39. // 定义子组件向父组件传值/事件
  40. const emit = defineEmits(['updateList']);
  41. const props = defineProps({
  42. commonType: {
  43. type: Array,
  44. default: () => [],
  45. },
  46. });
  47. // 定义变量内容
  48. const state = reactive<any>({
  49. dialogVisible: false,
  50. ruleForm: {
  51. content: '', // 意见内容
  52. commonType: '', // 意见类型
  53. isOpen: true, // 是否公开意见
  54. },
  55. });
  56. let loading = ref<boolean>(false); // 加载状态
  57. // 打开弹窗
  58. const ruleFormRef = ref<RefType>();
  59. const openDialog = async () => {
  60. ruleFormRef.value?.resetFields();
  61. try {
  62. state.dialogVisible = true;
  63. } catch (error) {
  64. console.log(error);
  65. }
  66. };
  67. // 关闭弹窗
  68. const closeDialog = () => {
  69. state.dialogVisible = false;
  70. };
  71. // 新增
  72. const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
  73. if (!formEl) return;
  74. await formEl.validate((valid: boolean) => {
  75. if (!valid) return;
  76. loading.value = true;
  77. addCommon(state.ruleForm)
  78. .then(() => {
  79. ElMessage({
  80. message: '操作成功',
  81. type: 'success',
  82. });
  83. emit('updateList');
  84. })
  85. .catch((error) => {})
  86. .finally(() => {
  87. loading.value = false;
  88. closeDialog();
  89. });
  90. });
  91. }, 300);
  92. // 暴露变量
  93. defineExpose({
  94. openDialog,
  95. closeDialog,
  96. });
  97. </script>