addNotice.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <template>
  2. <div class="message-notice-container">
  3. <div class="page-title">
  4. <i class="title-bar"></i>
  5. <span>{{ isEdit ? '编辑消息通知' : '新增消息通知' }}</span>
  6. </div>
  7. <div class="form-wrapper">
  8. <el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
  9. <el-form-item label="标题" prop="title">
  10. <el-input v-model="form.title" placeholder="请输入标题" />
  11. </el-form-item>
  12. <el-form-item label="内容" prop="content">
  13. <Editor v-model="form.content" :height="400" />
  14. </el-form-item>
  15. <el-form-item label="状态" prop="status">
  16. <el-radio-group v-model="form.status">
  17. <el-radio label="0">生效</el-radio>
  18. <el-radio label="1">停用</el-radio>
  19. </el-radio-group>
  20. </el-form-item>
  21. <el-form-item>
  22. <el-button @click="handleCancel">取消</el-button>
  23. <el-button type="danger" @click="handleSave">确定</el-button>
  24. </el-form-item>
  25. </el-form>
  26. </div>
  27. </div>
  28. </template>
  29. <script setup lang="ts">
  30. import Editor from '@/components/Editor/index.vue';
  31. import { ref, reactive, onMounted } from 'vue';
  32. import { useRouter, useRoute } from 'vue-router';
  33. import { ElMessage } from 'element-plus';
  34. import { getMessageInfo, addMessage, updateMessage } from '@/api/pc/enterprise';
  35. const router = useRouter();
  36. const route = useRoute();
  37. const formRef = ref();
  38. const form = reactive({
  39. title: '',
  40. content: '',
  41. status: '0'
  42. });
  43. const rules = {
  44. title: [{ required: true, message: '请输入标题', trigger: 'blur' }],
  45. content: [{ required: true, message: '请输入内容', trigger: 'blur' }]
  46. };
  47. // 判断是否为编辑模式
  48. const isEdit = ref(false);
  49. onMounted(async () => {
  50. const id = route.query.id as any;
  51. if (id) {
  52. isEdit.value = true;
  53. try {
  54. const res = await getMessageInfo(id);
  55. if (res.code === 200 && res.data) {
  56. form.title = res.data.title;
  57. form.content = res.data.content;
  58. form.status = String(res.data.status);
  59. }
  60. } catch (error) {
  61. ElMessage.error('获取消息通知详情失败');
  62. }
  63. }
  64. });
  65. const handleCancel = () => {
  66. router.back();
  67. };
  68. const handleSave = async () => {
  69. const valid = await formRef.value?.validate();
  70. if (!valid) return;
  71. try {
  72. const data: any = {
  73. title: form.title,
  74. content: form.content,
  75. status: form.status
  76. };
  77. if (isEdit.value) {
  78. data.id = Number(route.query.id);
  79. await updateMessage(data);
  80. ElMessage.success('修改成功');
  81. } else {
  82. await addMessage(data);
  83. ElMessage.success('新增成功');
  84. }
  85. router.back();
  86. } catch (error) {
  87. ElMessage.error('操作失败');
  88. }
  89. };
  90. </script>
  91. <style scoped lang="scss">
  92. .message-notice-container {
  93. padding: 20px;
  94. background: #fff;
  95. min-height: 100%;
  96. flex: 1;
  97. }
  98. .page-title {
  99. font-size: 16px;
  100. font-weight: bold;
  101. display: flex;
  102. align-items: center;
  103. gap: 8px;
  104. margin-bottom: 20px;
  105. }
  106. .title-bar {
  107. display: inline-block;
  108. width: 3px;
  109. height: 16px;
  110. background: #e60012;
  111. border-radius: 2px;
  112. }
  113. .form-wrapper {
  114. margin-top: 30px;
  115. }
  116. </style>