fixed 修改产品类型和新闻导入导出

This commit is contained in:
lwh 2023-06-29 10:33:00 +08:00
parent b8366d732e
commit a3ed8d0a73
6 changed files with 295 additions and 232 deletions

View File

@ -12,11 +12,17 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻标题" prop="news_title">
<el-input v-model='formData.news_title' type="text" placeholder='请输入新闻标题'></el-input>
</el-form-item>
</el-col>
<el-col :span='24'>
<el-form-item :label-width='labelWidth' label='新闻封面' prop='news_cover'>
<UploadImage ref='uploadRef' v-model='formData.news_cover' :data=uoloadData :limit='1' :fileSize='5'
:drag='true' :isShowTip='false' />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻简介" prop="news_intro">
<el-input v-model='formData.news_intro' type="textarea" :rows="5" placeholder='请输入新闻简介'></el-input>
@ -34,13 +40,12 @@
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="发布日期" prop="news_issue_date">
<el-date-picker v-model="formData.news_issue_date" type="datetime" value-format="YYYY-MM-DD HH:mm"
placeholder="发布日期" />
<el-date-picker v-model="formData.news_issue_date" type="date" value-format="YYYY-MM-DD" placeholder="发布日期" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="浏览次数" prop="news_views_num">
<el-input-number v-model='formData.news_views_num' controls-position='right' :min='1'></el-input-number>
<el-input-number v-model='formData.news_views_num' controls-position='right' :min='0'></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
@ -50,6 +55,9 @@
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻内容" prop="news_content">
<div class="copy-btn-box">
<el-button @click="handleCopyRichText" class="copy-btn">获取富文本内容</el-button>
</div>
<RichText v-model='formData.news_content' :min-height='196'></RichText>
</el-form-item>
</el-col>
@ -70,6 +78,7 @@
import { reactive, ref, watch } from "vue";
import { addNews, getDictionary } from "~/service/news";
import { useLoginStore } from "~/store";
import { ElMessage } from "element-plus";
// --
@ -85,6 +94,11 @@ async function get_news_type() {
})
}
//
async function handleCopyRichText() {
let text = await navigator.clipboard.writeText(formData.news_content);
ElMessage.success("富文本内容复制成功")
}
@ -127,6 +141,12 @@ const rules = reactive({
message: '新闻标题不能为空'
}
],
news_cover: [
{
required: true,
message: '新闻封面不能为空'
}
],
news_sort: [
{
required: true,
@ -175,4 +195,11 @@ const handleResetClick = async (formEl) => {
};
</script>
<style lang="less" scoped></style>
<style lang="less" scoped>
.copy-btn-box {
width: 100%;
display: flex;
justify-content: right;
margin-bottom: 15px;
}
</style>

View File

@ -1,68 +1,65 @@
<template>
<el-dialog v-model="props.modelValue" title="新闻详情" width="900px" @closed="closeDialog" @open="openDialog">
<el-dialog v-model="props.modelValue" title="新闻详情" width="900px" @closed="closeDialog" @open="openDialog">
<el-form ref="formRef" :model="formData" :disabled="true">
<el-row>
<el-col :span="12">
<el-form-item label="新闻类型" prop="news_type">
<el-select v-model="formData.news_type" clearable placeholder="请选择">
<el-option
v-for="item in news_type"
:key="item.dictionary_guid" :label="item.dictionary_name"
:value="item.dictionary_value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="新闻标题" prop="news_title">
<el-input v-model='formData.news_title' type="text" placeholder='请输入新闻标题'></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻简介" prop="news_intro">
<el-input v-model='formData.news_intro' type="textarea" :rows="5" placeholder='请输入新闻简介'></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="文章来源" prop="news_source">
<el-input v-model='formData.news_source' type="text" placeholder='请输入文章来源'></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="跳转链接" prop="news_link">
<el-input v-model='formData.news_link' type="text" placeholder='请输入跳转链接'></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
:label-width="labelWidth"
label="发布日期" prop="news_issue_date"
>
<el-date-picker
v-model="formData.news_issue_date"
type="datetime"
value-format="YYYY-MM-DD HH:mm"
placeholder="发布日期"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="浏览次数" prop="news_views_num">
<el-input-number v-model='formData.news_views_num' controls-position='right' :min='1'></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="新闻排序" prop="news_sort">
<el-input-number v-model='formData.news_sort' controls-position='right' :min='1'></el-input-number>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻内容" prop="news_content">
<RichText v-model='formData.news_content' :min-height='196'></RichText>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="新闻类型" prop="news_type">
<el-select v-model="formData.news_type" clearable>
<el-option v-for="item in news_type" :key="item.dictionary_guid" :label="item.dictionary_name"
:value="item.dictionary_value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻标题" prop="news_title">
<el-input v-model='formData.news_title' type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span='24'>
<el-form-item :label-width='labelWidth' label='新闻封面' prop='news_cover'>
<UploadImage ref='uploadRef' v-model='formData.news_cover' :data=uoloadData :limit='1' :fileSize='5'
:drag='true' :isShowTip='false' />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻简介" prop="news_intro">
<el-input v-model='formData.news_intro' type="textarea" :rows="5"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="文章来源" prop="news_source">
<el-input v-model='formData.news_source' type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="跳转链接" prop="news_link">
<el-input v-model='formData.news_link' type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="发布日期" prop="news_issue_date">
<el-date-picker v-model="formData.news_issue_date" type="date" value-format="YYYY-MM-DD" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="浏览次数" prop="news_views_num">
<el-input-number v-model='formData.news_views_num' controls-position='right' :min='0'></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="新闻排序" prop="news_sort">
<el-input-number v-model='formData.news_sort' controls-position='right' :min='1'></el-input-number>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻内容" prop="news_content">
<!-- <div class="copy-btn-box">
<el-button @click="handleCopyRichText" class="copy-btn" >获取富文本内容</el-button>
</div> -->
<RichText v-model='formData.news_content' :min-height='196'></RichText>
</el-form-item>
</el-col>
</el-row>
</el-form>
@ -71,24 +68,34 @@
<script setup>
import { reactive, ref, watch } from "vue";
import { isEmptyObject } from "~/utils/index";
import { getDictionary } from '~/service/news';
//
const openDialog = async () => {
await get_news_type()
};
// --
// --
//
const news_type = ref([]);
async function get_news_type() {
await getDictionary({ dictionary_value: 'news_type'}).then((res) => {
news_type.value = res
})
}
//
const news_type = ref([]);
async function get_news_type() {
await getDictionary({ dictionary_value: 'news_type' }).then((res) => {
news_type.value = res
})
}
//
async function handleCopyRichText() {
let text = await navigator.clipboard.writeText(formData.news_content);
ElMessage.success("富文本内容复制成功")
}
// --
const formRef = ref();
@ -108,16 +115,9 @@ const formData = ref({
// --
watch(props, (v) => {
formData.value = v.data;
});
//
const openDialog = () => {
get_news_type()
};
});
const closeDialog = () => {
emits("update:modelValue", false);
@ -125,5 +125,10 @@ const closeDialog = () => {
</script>
<style lang="less" scoped>
.copy-btn-box {
width: 100%;
display: flex;
justify-content: right;
margin-bottom: 15px;
}
</style>

View File

@ -2,67 +2,65 @@
<el-dialog v-model="props.modelValue" title="编辑新闻" width="900px" @closed="closeDialog" @open="openDialog">
<el-form ref="formRef" :model="formData" :rules="rules">
<el-row>
<el-col :span="12">
<el-form-item label="新闻类型" prop="news_type">
<el-select v-model="formData.news_type" clearable placeholder="请选择">
<el-option
v-for="item in news_type"
:key="item.dictionary_guid" :label="item.dictionary_name"
:value="item.dictionary_value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="新闻标题" prop="news_title">
<el-input v-model='formData.news_title' type="text" placeholder='请输入新闻标题'></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻简介" prop="news_intro">
<el-input v-model='formData.news_intro' type="textarea" :rows="5" placeholder='请输入新闻简介'></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="文章来源" prop="news_source">
<el-input v-model='formData.news_source' type="text" placeholder='请输入文章来源'></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="跳转链接" prop="news_link">
<el-input v-model='formData.news_link' type="text" placeholder='请输入跳转链接'></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
:label-width="labelWidth"
label="发布日期" prop="news_issue_date"
>
<el-date-picker
v-model="formData.news_issue_date"
type="datetime"
value-format="YYYY-MM-DD HH:mm"
placeholder="发布日期"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="浏览次数" prop="news_views_num">
<el-input-number v-model='formData.news_views_num' controls-position='right' :min='1'></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="新闻排序" prop="news_sort">
<el-input-number v-model='formData.news_sort' controls-position='right' :min='1'></el-input-number>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻内容" prop="news_content">
<RichText v-model='formData.news_content' :min-height='196'></RichText>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="新闻类型" prop="news_type">
<el-select v-model="formData.news_type" clearable placeholder="请选择">
<el-option v-for="item in news_type" :key="item.dictionary_guid" :label="item.dictionary_name"
:value="item.dictionary_value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻标题" prop="news_title">
<el-input v-model='formData.news_title' type="text" placeholder='请输入新闻标题'></el-input>
</el-form-item>
</el-col>
<el-col :span='24'>
<el-form-item :label-width='labelWidth' label='新闻封面' prop='news_cover'>
<UploadImage ref='uploadRef' v-model='formData.news_cover' :data=uoloadData :limit='1' :fileSize='5'
:drag='true' :isShowTip='false' />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻简介" prop="news_intro">
<el-input v-model='formData.news_intro' type="textarea" :rows="5" placeholder='请输入新闻简介'></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="文章来源" prop="news_source">
<el-input v-model='formData.news_source' type="text" placeholder='请输入文章来源'></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="跳转链接" prop="news_link">
<el-input v-model='formData.news_link' type="text" placeholder='请输入跳转链接'></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="发布日期" prop="news_issue_date">
<el-date-picker v-model="formData.news_issue_date" type="date" value-format="YYYY-MM-DD" placeholder="发布日期" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="浏览次数" prop="news_views_num">
<el-input-number v-model='formData.news_views_num' controls-position='right' :min='0'></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label-width="labelWidth" label="新闻排序" prop="news_sort">
<el-input-number v-model='formData.news_sort' controls-position='right' :min='1'></el-input-number>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label-width="labelWidth" label="新闻内容" prop="news_content">
<div class="copy-btn-box">
<el-button @click="handleCopyRichText" class="copy-btn">获取富文本内容</el-button>
</div>
<RichText v-model='formData.news_content' :min-height='196'></RichText>
</el-form-item>
</el-col>
</el-row>
</el-form>
@ -77,7 +75,7 @@
<script setup>
import { reactive, ref, watch } from "vue";
import { editNews , getDictionary } from "~/service/news";
import { editNews, getDictionary } from "~/service/news";
import { useLoginStore } from "~/store";
// --
@ -86,15 +84,19 @@ import { useLoginStore } from "~/store";
// --
//
const news_type = ref([]);
async function get_news_type() {
await getDictionary({ dictionary_value: 'news_type'}).then((res) => {
news_type.value = res
})
}
//
const news_type = ref([]);
async function get_news_type() {
await getDictionary({ dictionary_value: 'news_type' }).then((res) => {
news_type.value = res
})
}
//
async function handleCopyRichText() {
let text = await navigator.clipboard.writeText(formData.news_content);
ElMessage.success("富文本内容复制成功")
}
// --
@ -123,14 +125,14 @@ const uoloadData = ref({
// --
watch(props, (v) => {
formData.value = v.data;
});
//
const openDialog = () => {
get_news_type()
};
const closeDialog = () => {
@ -140,24 +142,30 @@ const closeDialog = () => {
const rules = reactive({
news_type: [
{
required: true,
message: '新闻类型不能为空'
}
],
news_title: [
{
required: true,
message: '新闻标题不能为空'
}
],
news_sort: [
{
required: true,
message: '新闻排序不能为空'
}
],
{
required: true,
message: '新闻类型不能为空'
}
],
news_title: [
{
required: true,
message: '新闻标题不能为空'
}
],
news_cover: [
{
required: true,
message: '新闻封面不能为空'
}
],
news_sort: [
{
required: true,
message: '新闻排序不能为空'
}
],
});
const handleEditClick = async (formEl) => {
@ -169,7 +177,7 @@ const handleEditClick = async (formEl) => {
}
isBtnLod.value = true;
const { code } = await editNews(formData.value);
if (code == 0) {
closeDialog();
@ -185,5 +193,10 @@ const handleResetClick = async (formEl) => {
</script>
<style lang="less" scoped>
.copy-btn-box {
width: 100%;
display: flex;
justify-content: right;
margin-bottom: 15px;
}
</style>

View File

@ -65,6 +65,12 @@
<dict-tag :options='news_type' :value='scope.row.news_type' />
</template>
<template #news_cover="scope">
<el-image v-if="scope.row.news_cover" :src="scope.row.news_cover.split(',')[0]" lazy
:preview-src-list="scope.row.news_cover.split(',')" :preview-teleported="true" :hide-on-click-modal="true"
fit="contain" class="el-avatar"></el-image>
<template v-else>暂无图片</template>
</template>
<!-- 排序 -->
<template #news_sort='scope'>
@ -146,16 +152,23 @@ const column = [
prop: "news_type",
label: '新闻类型',
},
{
prop: "news_cover",
label: '新闻封面',
width: "200",
},
{
prop: "news_title",
label: '新闻标题',
showOverflowTooltip: true,
width: "500",
},
{
prop: "news_intro",
label: '新闻简介',
showOverflowTooltip: true,
},
// {
// prop: "news_intro",
// label: '',
// showOverflowTooltip: true,
// width: "400",
// },
{
prop: "news_issue_date",
label: '发布日期',
@ -164,11 +177,13 @@ const column = [
{
prop: "news_views_num",
label: '浏览次数',
sortable: true
sortable: true,
width: "150",
},
{
prop: "news_sort",
label: '新闻排序',
width: "180",
sortable: true
},
{

View File

@ -23,18 +23,17 @@
<el-button type="primary" @click="addProductTypeDialogVisible = true"> 添加 </el-button>
</el-col>
<!-- 导出 -->
<!-- <el-button icon="ElIconDocument" @click="exportExcel(params)">导出</el-button> -->
<!-- 导入 -->
<!-- <el-upload class="upload-demo" :action="importExcel" :headers="headers" :on-success="handleExcelSuccess"
<el-upload class="upload-demo" :action="importExcel" :headers="headers" :on-success="handleExcelSuccess"
:on-progress="uploadLoading" :on-error="closeUploadLoading" style="margin-left: 10px" :show-file-list="false">
<el-button type="primary">导入</el-button>
</el-upload> -->
</el-upload>
<!-- 导出 -->
<el-button icon="ElIconDocument" @click="exportExcel(params)">导出</el-button>
<!-- 下载导入模板 -->
<!-- <el-button icon="ElIconDownload" @click="downloadTemplate()">下载导入模板</el-button> -->
<el-button icon="ElIconDownload" @click="downloadTemplate()">下载导入模板</el-button>
<!-- 下拉操作 -->
@ -57,7 +56,8 @@
:tree-props="{ children: 'children' }">
<el-table-column type="selection" width="50" align="center" />
<el-table-column prop="product_type_name" width="200" label="产品类目名称" :show-overflow-tooltip="true"> </el-table-column>
<el-table-column prop="product_type_title" width="200" label="产品类目标题" :show-overflow-tooltip="true"> </el-table-column>
<el-table-column prop="product_type_title" width="200" label="产品类目标题" :show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="product_type_icon" width="200" label="产品类目图标" :show-overflow-tooltip="true">
<template #default="scope">
<el-image :src="scope.row.product_type_icon" :preview-src-list="[scope.row.product_type_icon]"
@ -82,7 +82,8 @@
</el-table>
<!-- 添加产品类目 -->
<AddProductTypeDialog v-model="addProductTypeDialogVisible" :data="AddProductTypeDialogRow" :done="() => getList()"></AddProductTypeDialog>
<AddProductTypeDialog v-model="addProductTypeDialogVisible" :data="AddProductTypeDialogRow" :done="() => getList()">
</AddProductTypeDialog>
<!-- 编辑产品类目 -->
<EditProductTypeDialog v-model="EditProductTypeDialogVisible" :data="EditProductTypeDialogRow" :done="() => getList()">
</EditProductTypeDialog>
@ -125,7 +126,6 @@ const headers = {
//
const params = reactive({
product_type_name: "",
});
const handleCommand = ({ type, row }) => {

View File

@ -1,47 +1,50 @@
import { api, downloadFile, createApiUrl} from '~/utils/axios';
import {
api,
downloadFile,
createApiUrl
} from '~/utils/axios';
/**
* 导出新闻
* @param {Object} data
* @return {Promise} api
*/
export function exportExcel(data) {
downloadFile(createApiUrl('News.News/exportExcel'), data);
}
/**
* 下载新闻模板
* @param {Object} data
* @return {Promise} api
*/
export function downloadTemplate(data) {
downloadFile(createApiUrl('News.News/downloadTemplate'), data);
}
/**
* 导入新闻
* @param {Object} data
* @return {Promise} api
*/
export const importExcel = createApiUrl('News.News/importExcel');
/**
* 导出新闻
* @param {Object} data
* @return {Promise} api
*/
export function exportExcel(data) {
downloadFile(createApiUrl('News.News/exportExcel'), data);
}
/**
* 下载新闻模板
* @param {Object} data
* @return {Promise} api
*/
export function downloadTemplate(data) {
downloadFile(createApiUrl('News.News/downloadTemplate'), data);
}
/**
* 导入新闻
* @param {Object} data
* @return {Promise} api
*/
export const importExcel = createApiUrl('News.News/importExcel');
/**
* 获取字典值
* @param {Object} data
* @return {Promise} api
*/
export function getDictionary(data) {
return api.post('Dictionary.Dictionary/getDictionary', data, {
});
}
/**
* 获取字典值
* @param {Object} data
* @return {Promise} api
*/
export function getDictionary(data) {
return api.post('Dictionary.Dictionary/getDictionary', data, {});
}
/**
* 获取新闻列表
@ -88,4 +91,4 @@ export function editNews(data) {
isShowSuccessMessage: true,
errorMessageText: '编辑失败'
});
}
}