Sfoglia il codice sorgente

完善录入新闻

nahida 1 anno fa
parent
commit
38f36d5b57

+ 1 - 0
.env.development

@@ -6,3 +6,4 @@ VITE_APP_ENV = 'development'
 
 # 若依管理系统/开发环境
 VITE_APP_BASE_API = '/dev-api'
+VITE_MINIO_BASE_API = 'http://47.107.107.47:9000/zksy-file'

BIN
src/assets/images/login-background.jpg


BIN
src/assets/images/login-background2.jpg


+ 5 - 5
src/views/login.vue

@@ -166,11 +166,11 @@ getCookie();
   align-items: center;
   height: 100%;
   background-image:
-      linear-gradient(
-              to right,
-              rgb(100, 189, 255),   /* 左侧完全不透明 */
-              rgba(255, 255, 255, 0)    /* 右侧完全透明 */
-      ),
+      //linear-gradient(
+      //        to right,
+      //        rgb(100, 189, 255),   /* 左侧完全不透明 */
+      //        rgba(255, 255, 255, 0)    /* 右侧完全透明 */
+      //),
       url("../assets/images/login-background.jpg");
   background-size: 100% 100%;
   background-repeat: no-repeat;

+ 1 - 1
src/views/register.vue

@@ -160,7 +160,7 @@ getCode();
   justify-content: center;
   align-items: center;
   height: 100%;
-  background-image: url("../assets/images/login-background.jpg");
+  background-image: url("../assets/images/login-background2.jpg");
   background-size: cover;
 }
 .title {

+ 49 - 4
src/views/xyjsxx/zwxxfb/components/MyEdit.vue

@@ -1,13 +1,15 @@
-<script setup lang="ts">
+<script setup>
 import {AiEditor} from "aieditor";
 import "aieditor/dist/style.css"
 import {onMounted, onUnmounted, ref} from "vue";
 
 const divRef = ref();
-let aiEditor: AiEditor | null = null;
+const baseUrl = import.meta.env.VITE_APP_BASE_API;
+const minioUrl = import.meta.env.VITE_MINIO_BASE_API;
+let aiEditor = null;
 onMounted(() => {
   aiEditor = new AiEditor({
-    element: divRef.value as Element,
+    element: divRef.value,
     placeholder: "点击输入内容...",
     content: '',
     toolbarKeys: ["undo", "redo", "brush", "eraser",
@@ -22,7 +24,47 @@ onMounted(() => {
     textSelectionBubbleMenu:{
       enable: true,
       items: ["Bold", "Italic", "Underline", "Strike", "code", "comment"],
-    }
+    },
+    image: {
+      allowBase64: true,
+      defaultSize: 350,
+      uploadUrl: baseUrl+"/xcrFile/save",
+      uploadFormName: "file",
+      uploader: (file, uploadUrl, headers, formName) => {
+        const formData = new FormData();
+        formData.append(formName, file);
+        formData.append('moduleName', '性与暴力');
+        return new Promise((resolve, reject) => {
+          fetch(uploadUrl, {
+            method: "post",
+            headers: {'Accept': 'application/json', ...headers},
+            body: formData,
+          }).then((resp) => resp.json())
+              .then(json => {
+                resolve(json);
+              }).catch((error) => {
+            reject(error);
+          })
+        });
+      },
+      uploaderEvent:{
+        onSuccess(file, res){
+          if(res.code !== 200){
+            Elmessage({ message: res.msg, type: 'warning' });
+            return false;
+          }
+          return {
+            "errorCode": 0,
+            "data": {
+              "src": minioUrl+res.data.fileUrl,
+              "alt": "富文本图片",
+              "id": res.data.id
+            }
+          }
+        },
+      },
+      bubbleMenuItems: ["AlignLeft", "AlignCenter", "AlignRight","delete"]
+    },
   })
 })
 
@@ -30,6 +72,9 @@ defineExpose({
   getContent() {
     return aiEditor.getHtml()
   },
+  setContent(content) {
+    aiEditor.setContent(content)
+  }
 })
 
 onUnmounted(() => {

+ 81 - 9
src/views/xyjsxx/zwxxfb/index.vue

@@ -18,6 +18,7 @@ import {
 } from 'element-plus';
 import { newsMap } from "./newsMap.js";
 import MyEdit from "@/views/xyjsxx/zwxxfb/components/MyEdit.vue";
+import {Plus} from "@element-plus/icons-vue";
 
 const tableData = ref([]);
 const currentPage = ref(1);
@@ -29,6 +30,9 @@ const multipleSelection = ref([]);
 const specialColumns = ref([]);
 const dialogVisible = ref(false);
 const myEdit = ref(null);
+const imageUrl = ref({id: '',imagesUrl:''});
+const baseUrl = import.meta.env.VITE_APP_BASE_API;
+const minioUrl = import.meta.env.VITE_MINIO_BASE_API;
 const form = ref({
   title: '',
   specialColumn: '',
@@ -41,7 +45,12 @@ const previewDialogVisible = ref(false);
 const previewContent = ref('');
 
 const getList = async () => {
-  const conditionJson = [];
+  const conditionJson = [
+    {
+      column: 'create_time',
+      type: 'orderByDesc'
+    }
+  ];
   if (searchTitle.value) {
     conditionJson.push({
       column: 'title',
@@ -135,22 +144,44 @@ const handleSelectionChange = (val) => {
 };
 
 const handleAdd = () => {
+  form.value = {
+    title: '',
+    specialColumn: '',
+    date: '',
+    content: '',
+    dataSource: '',
+    introduce: ''
+  };
+  imageUrl.value.imagesUrl = '';
+  imageUrl.value.id = '';
+  nextTick(()=>{
+    myEdit.value.setContent('');
+  })
   dialogVisible.value = true;
 };
 
 const handleAddSubmit = async () => {
   try {
     form.value.content = myEdit.value.getContent();
-    await request.post('/xcrNewsRelease/save', form.value);
-    ElMessage.success('新增成功');
+    form.value.files = [{id:imageUrl.value.id}];
+    if (form.value.id) {
+      // 修改
+      await request.post('/xcrNewsRelease/updateById', form.value);
+      ElMessage.success('修改成功');
+    } else {
+      // 新增
+      await request.post('/xcrNewsRelease/save', form.value);
+      ElMessage.success('新增成功');
+    }
     dialogVisible.value = false;
     getList();
   } catch (error) {
-    ElMessage.error('新增失败');
+    ElMessage.error('操作失败');
   }
 };
 
 const handleAddCancel = () => {
+  console.log(form.value);
   ElMessageBox.confirm('确定退出编辑页面吗?')
       .then(() => {
         dialogVisible.value = false;
@@ -162,6 +193,33 @@ const handlePreview = (content) => {
   previewDialogVisible.value = true;
 };
 
+const handleModify = async (id) => {
+  try {
+    const res = await request.get(`/xcrNewsRelease/getById/${id}`);
+    form.value = res.data;
+    // console.log(res.data);
+    if(res.data.files.length>0){
+      imageUrl.value.imagesUrl = minioUrl+res.data.files[0].fileUrl;
+      imageUrl.value.id = res.data.files[0].id;
+    }else {
+      imageUrl.value.imagesUrl = '';
+      imageUrl.value.id = '';
+    }
+    nextTick(()=>{
+      myEdit.value.setContent(res.data.content);
+    })
+    dialogVisible.value = true;
+  } catch (error) {
+    ElMessage.error('获取数据失败');
+  }
+};
+
+const handleSuccess = (res)=>{
+  imageUrl.value.imagesUrl = minioUrl+res.data.fileUrl;
+  imageUrl.value.id = res.data.id;
+}
+
+
 onMounted(() => {
   newsMap.forEach((k, v) => {
     specialColumns.value.push({ value: v, label: k });
@@ -213,20 +271,21 @@ onMounted(() => {
       </el-table-column>
       <el-table-column prop="date" label="发布时间" width="180" :show-overflow-tooltip="true"/>
       <el-table-column prop="content" label="内容" :show-overflow-tooltip="true"/>
-      <el-table-column prop="dataSource" label="数据来源" width="180" :show-overflow-tooltip="true"/>
+      <el-table-column prop="dataSource" label="数据来源" :show-overflow-tooltip="true"/>
       <el-table-column prop="introduce" label="介绍" :show-overflow-tooltip="true"/>
       <el-table-column prop="createBy" label="创建者" width="180" :show-overflow-tooltip="true"/>
       <el-table-column prop="createTime" label="创建时间" width="180" :show-overflow-tooltip="true"/>
       <el-table-column prop="updateBy" label="更新者" width="180" :show-overflow-tooltip="true"/>
       <el-table-column prop="updateTime" label="更新时间" width="180" :show-overflow-tooltip="true"/>
-      <el-table-column label="预览" width="180">
+      <el-table-column label="预览">
         <template #default="{ row }">
           <el-button type="primary" size="small" @click="handlePreview(row.content)">预览</el-button>
         </template>
       </el-table-column>
-      <el-table-column label="操作" width="120">
+      <el-table-column label="操作" width="180">
         <template #default="{ row }">
           <el-button type="danger" size="small" @click="handleDelete(row.id)">删除</el-button>
+          <el-button type="warning" size="small" @click="handleModify(row.id)">修改</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -240,7 +299,7 @@ onMounted(() => {
         :page-sizes="[10, 20, 30, 50]"
     />
     <el-dialog
-        title="新增记录"
+        :title="form.value?.id ? '修改记录' : '新增记录'"
         v-model="dialogVisible"
         width="50%"
         :before-close="handleAddCancel"
@@ -267,6 +326,19 @@ onMounted(() => {
         <el-form-item label="介绍">
           <el-input v-model="form.introduce" type="textarea" placeholder="请输入介绍"/>
         </el-form-item>
+        <el-form-item label="封面">
+          <el-upload
+              class="avatar-uploader"
+              :action="imageUrl.id?baseUrl+'/xcrFile/updateById':baseUrl+'/xcrFile/save'"
+              :on-success="handleSuccess"
+              :show-file-list="false"
+              :limit="100"
+              :data="{id:imageUrl.id,moduleName:'封面图'}"
+          >
+            <img alt="封面" v-if="imageUrl" :src="imageUrl.imagesUrl" class="w-100px h-a" />
+            <el-icon v-else class="w-100px h-a "><Plus /></el-icon>
+          </el-upload>
+        </el-form-item>
         <el-form-item label="数据来源">
           <el-input v-model="form.dataSource" placeholder="请输入数据来源"/>
         </el-form-item>
@@ -292,7 +364,7 @@ onMounted(() => {
         :before-close="() => previewDialogVisible = false"
         destroy-on-close
     >
-      <div v-html="previewContent"></div>
+      <pre v-html="previewContent"></pre>
     </el-dialog>
   </div>
 </template>

+ 2 - 2
src/views/xyjsxx/zwxxfb/newsMap.js

@@ -2,8 +2,8 @@ export const newsMap = new Map();
 newsMap.set('static_news', '首页不动的新闻')
 newsMap.set('big_news', '首页轮播新闻')
 newsMap.set('financial_need', '政府项目资金需求发布及链接')
-newsMap.set('financing_loans', '园区企业融资贷款')
-newsMap.set('notification_announcement', '园区动态通告')
+newsMap.set('financing_loans', '企业融资贷款')
+newsMap.set('notification_announcement', '动态通告')
 newsMap.set('outsideProvincialDynamics', '全国动态')
 newsMap.set('provincialDynamics', '省内动态')
 newsMap.set('currentCityDynamics', '本市动态')