Advice-add.vue 2.9 KB

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