Commit a19a6ba1 by 吴春元

举报管理

parent f4752387
......@@ -8,7 +8,8 @@ import { ElConfigProvider } from "element-plus";
import { zhCn } from "element-plus/es/locale/index";
import { provide } from "vue";
const VITE_APP_TITLE = "太原市互联网宣传研究中心"; // 标题
const VITE_APP_TITLE =
"太原市互联网应急指挥和举报中心(太原市互联网宣传研究中心)"; // 标题
const VITE_ADDRESS = "山西省太原市杏花岭区新建路 78 号新闻大厦 8 层"; // 地址
const VITE_EMAIL = "tyhlwjbzx@163.com"; // 举报邮箱
const VITE_PHONE = "0351-8222236"; // 举报电话
......
......@@ -3,7 +3,7 @@ import request from "@/utils/request";
// 热点留言列表
export function getUpdateForm(data) {
return request({
url: "/cms/leavemessage/list",
url: "/cms/report/saveEntity",
method: "post",
data: data,
});
......
let baseImageUrl;
if (process.env.NODE_ENV === "development") {
// baseImageUrl = (path) => "http://192.168.19.142:9002" + path;
// baseImageUrl = (path) => "http://192.168.19.248:9002" + path;
baseImageUrl = (path) => "http://localhost:9002" + path;
// baseImageUrl = (path) => "http://yjzh.sxyztech.cn" + path;
} else {
......
......@@ -404,16 +404,16 @@ const activeNav = ref(0);
const handleClick = (index: number, entry: any) => {
switch (index) {
case 0:
const pyHomePageUrl = router.resolve({ name: "PyHome" }).href;
window.open(pyHomePageUrl, "_blank");
break;
case 1:
router.push({ path: "/home/jb" });
break;
case 2:
case 1:
const wmHomePageUrl = router.resolve({ name: "wm" }).href;
window.open(wmHomePageUrl, "_blank");
break;
case 2:
const pyHomePageUrl = router.resolve({ name: "PyHome" }).href;
window.open(pyHomePageUrl, "_blank");
break;
}
// 处理点击事件
};
......@@ -601,11 +601,6 @@ const slides = ref([]);
const quickEntries = [
{
title: "太原市互联网联合辟谣平台",
icon: "Message",
bg: "https://ai-public.mastergo.com/ai/img_res/36f741de94394af113bc0d3c823df49a.jpg",
},
{
title: "太原市互联网违法和不良信息举报平台",
icon: "Share",
bg: "https://ai-public.mastergo.com/ai/img_res/e3d550fe8d11531c42a774641cf3790a.jpg",
......@@ -615,6 +610,11 @@ const quickEntries = [
icon: "Link",
bg: "https://ai-public.mastergo.com/ai/img_res/c907287d38d89eb460120dc7cf6b2d17.jpg",
},
{
title: "太原市互联网联合辟谣平台",
icon: "Message",
bg: "https://ai-public.mastergo.com/ai/img_res/36f741de94394af113bc0d3c823df49a.jpg",
},
];
</script>
<style>
......
......@@ -25,35 +25,39 @@
<div class="gap-0">
<!-- 真实姓名 -->
<el-form-item label="真实姓名" prop="realName" class="mb-0">
<el-form-item label="真实姓名" prop="userName" class="mb-0">
<el-input
v-model="form.realName"
v-model="form.userName"
placeholder="请输入真实姓名"
clearable
></el-input>
</el-form-item>
<!-- 性别 -->
<el-form-item label="性别" prop="gender" class="mb-0">
<el-radio-group v-model="form.gender">
<el-radio label="1"></el-radio>
<el-radio label="2"></el-radio>
<el-form-item label="性别" prop="userSex" class="mb-0">
<el-radio-group v-model="form.userSex">
<el-radio
v-for="item in userSexOptions"
:key="item.value"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group>
</el-form-item>
<!-- 电子邮箱 -->
<el-form-item label="电子邮箱" prop="email" class="mb-0">
<el-form-item label="电子邮箱" prop="userEmail" class="mb-0">
<el-input
v-model="form.email"
v-model="form.userEmail"
placeholder="请输入电子邮箱"
clearable
></el-input>
</el-form-item>
<!-- 电话号码 -->
<el-form-item label="电话号码" prop="phone" class="mb-0">
<el-form-item label="电话号码" prop="userMobile" class="mb-0">
<el-input
v-model="form.phone"
v-model="form.userMobile"
placeholder="请输入电话号码"
clearable
></el-input>
......@@ -74,11 +78,11 @@
<!-- 通讯地址 -->
<el-form-item
label="通讯地址"
prop="address"
prop="userAddress"
class="mb-0 md:col-span-2"
>
<el-input
v-model="form.address"
v-model="form.userAddress"
type="textarea"
:rows="2"
placeholder="请输入详细通讯地址"
......@@ -101,14 +105,17 @@
v-model="form.reportType"
@change="handleReportTypeChange"
>
<el-radio label="0">网站</el-radio>
<el-radio label="1">搜索引擎类</el-radio>
<el-radio label="2">APP</el-radio>
<el-radio
v-for="item in reportTypeOptions"
:key="item.value"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group>
</el-form-item>
<!-- 网站类型 -->
<div v-if="form.reportType === '0'" class="mb-4">
<div v-if="form.reportType === 1" class="mb-4">
<el-form-item label="网址名称" prop="websiteName" class="mb-0">
<el-input
v-model="form.websiteName"
......@@ -117,9 +124,9 @@
></el-input>
</el-form-item>
<el-form-item label="被举报网址" prop="websiteUrl" class="mb-0">
<el-form-item label="被举报网址" prop="websitAddress" class="mb-0">
<el-input
v-model="form.websiteUrl"
v-model="form.websitAddress"
placeholder="请输入被举报网址"
clearable
></el-input>
......@@ -127,10 +134,10 @@
</div>
<!-- 搜索引擎类型 -->
<div v-if="form.reportType === '1'" class="space-y-4 mb-4">
<el-form-item label="搜索引擎类型" prop="searchEngineType">
<div v-if="form.reportType === 2" class="space-y-4 mb-4">
<el-form-item label="搜索引擎类型" prop="searchType">
<el-select
v-model="form.searchEngineType"
v-model="form.searchType"
placeholder="请选择搜索引擎类型"
clearable
class="w-full"
......@@ -148,11 +155,11 @@
<div class="gap-0">
<el-form-item
label="举报关键字"
prop="reportKeyword"
prop="searchKeyword"
class="mb-0"
>
<el-input
v-model="form.reportKeyword"
v-model="form.searchKeyword"
placeholder="请输入举报关键字"
clearable
></el-input>
......@@ -168,11 +175,11 @@
<el-form-item
label="被举报网址"
prop="websiteUrl"
prop="websitAddress"
class="mb-0 md:col-span-2"
>
<el-input
v-model="form.websiteUrl"
v-model="form.websitAddress"
placeholder="请输入被举报网址"
:disabled="disabled"
clearable
......@@ -182,7 +189,7 @@
</div>
<!-- APP类型 -->
<div v-if="form.reportType === '2'" class="mb-0">
<div v-if="form.reportType === 3" class="mb-0">
<el-form-item label="APP名称" prop="websiteName" class="mb-0">
<el-input
v-model="form.websiteName"
......@@ -191,9 +198,9 @@
></el-input>
</el-form-item>
<el-form-item label="APP官方地址" prop="websiteUrl" class="mb-0">
<el-form-item label="APP官方地址" prop="websitAddress" class="mb-0">
<el-input
v-model="form.websiteUrl"
v-model="form.websitAddress"
placeholder="请输入APP官方地址"
clearable
></el-input>
......@@ -201,9 +208,13 @@
</div>
<!-- 信息所在详细网址 -->
<el-form-item label="信息所在详细网址" prop="detailUrl" class="mb-4">
<el-form-item
label="信息所在详细网址"
prop="websitDetailAddress"
class="mb-4"
>
<el-input
v-model="form.detailUrl"
v-model="form.websitDetailAddress"
placeholder="请输入信息所在详细网址"
clearable
:disabled="disabled"
......@@ -234,17 +245,17 @@
v-for="item in harmTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
:value="item.label"
></el-option>
</el-select>
</el-form-item>
<!-- 附件上传 -->
<el-form-item label="附件" prop="attachmentsList" class="mb-4">
<el-upload
<el-form-item label="附件" prop="fileUrl" class="mb-4">
<!-- <el-upload
v-model:file-list="fileList"
action="#"
accept=".gif,.jpg,.png,.bmp,.jpeg,.doc,.docx,.pdf"
accept=".jpg,.png,.jpeg,.doc,.docx,.pdf"
list-type="text"
:auto-upload="false"
:limit="3"
......@@ -260,6 +271,27 @@
每个附件大小不能超过10M,最多可上传3个附件
</div>
</template>
</el-upload> -->
<el-upload
:file-list="contentImg"
:action="'/cms/upload/uploadFile'"
:limit="3"
:on-exceed="handleExceed"
:before-upload="beforeUpload"
:on-error="contentImgError"
:on-success="contentImgSuccess"
:on-remove="contentImghandleRemove"
accept=".jpg,.png,.jpeg,.doc,.docx,.pdf"
list-type="text"
name="multipartFile"
>
<el-button type="primary">点击上传</el-button>
<template #tip>
<div class="el-upload__tip text-sm text-gray-500">
每个附件大小不能超过10M,最多可上传3个附件
</div>
</template>
</el-upload>
</el-form-item>
......@@ -307,40 +339,52 @@ import Footer from "@/components/footer.vue";
const disabled = ref(false);
const fileList = ref([]);
const formRef = ref();
const contentImg = ref<any>([]);
const harmTypeOptions = [
{ label: "网络“开盒”恶意评价、侮辱谩骂及造谣污蔑等信息", value: 0 },
{ label: "网络交易环境", value: 1 },
{ label: "网上虚假宣传制售“特供酒", value: 2 },
{ label: "境外赌场招赌信息", value: 3 },
{ label: "含有病态、低俗内容的热搜榜单", value: 4 },
{ label: "生活服务类平台信息", value: 5 },
{ label: "涉企侵权信息举报", value: 6 },
{ label: "低俗", value: 7 },
{ label: "谣言", value: 8 },
{ label: "淫秽色情", value: 9 },
{ label: "赌博", value: 10 },
{ label: "诈骗", value: 11 },
{ label: "侵权", value: 12 },
{ label: "病毒", value: 13 },
{ label: "违背宪法原则", value: 14 },
{ label: "攻击党和政府", value: 15 },
{ label: "违背社会公德", value: 16 },
{ label: "其他违法和不良信息", value: 17 },
{ label: "宣扬邪教", value: 18 },
{ label: "迷信暴力", value: 19 },
{ label: "新冠肺炎疫情", value: 20 },
{ label: "侵权假冒", value: 21 },
{ label: "网络“开盒”恶意评价、侮辱谩骂及造谣污蔑等信息", value: 1 },
{ label: "网络交易环境", value: 2 },
{ label: "网上虚假宣传制售“特供酒", value: 3 },
{ label: "境外赌场招赌信息", value: 4 },
{ label: "含有病态、低俗内容的热搜榜单", value: 5 },
{ label: "生活服务类平台信息", value: 6 },
{ label: "涉企侵权信息举报", value: 7 },
{ label: "低俗", value: 8 },
{ label: "谣言", value: 9 },
{ label: "淫秽色情", value: 10 },
{ label: "赌博", value: 11 },
{ label: "诈骗", value: 12 },
{ label: "侵权", value: 13 },
{ label: "病毒", value: 14 },
{ label: "违背宪法原则", value: 15 },
{ label: "攻击党和政府", value: 16 },
{ label: "违背社会公德", value: 17 },
{ label: "其他违法和不良信息", value: 18 },
{ label: "宣扬邪教", value: 19 },
{ label: "迷信暴力", value: 20 },
{ label: "新冠肺炎疫情", value: 21 },
{ label: "侵权假冒", value: 22 },
];
const searchEngineTypeOptions = [
{ label: "其他", value: "http://" },
{ label: "百度", value: "http://www.baidu.com" },
{ label: "谷歌", value: "http://www.google.com" },
{ label: "雅虎", value: "http://www.yahoo.cn" },
{ label: "搜狗", value: "http://www.sogou.com" },
{ label: "360", value: "https://www.so.com" },
{ label: "必应", value: "https://cn.bing.com" },
{ label: "其他", url: "http://", value: 1 },
{ label: "百度", url: "http://www.baidu.com", value: 2 },
{ label: "谷歌", url: "http://www.google.com", value: 3 },
{ label: "雅虎", url: "http://www.yahoo.cn", value: 4 },
{ label: "搜狗", url: "http://www.sogou.com", value: 5 },
{ label: "360", url: "https://www.so.com", value: 6 },
{ label: "必应", url: "https://cn.bing.com", value: 7 },
];
// 被举报类型选项
const reportTypeOptions = [
{ label: "网站", value: 1 },
{ label: "搜索引擎类", value: 2 },
{ label: "APP", value: 3 },
];
const userSexOptions = [
{ label: "男", value: 1 },
{ label: "女", value: 2 },
];
// 获取城市选项
......@@ -358,51 +402,47 @@ function getCityOptions() {
// 处理区域选择变化
function handleRegionChange(val: string[]) {
if (val.length === 2) {
form.provinces = val[0];
form.citys = val[1];
form.country = val[0];
form.city = val[1];
}
}
// 表单数据
const form = reactive({
// 举报人基本信息
realName: "",
gender: "1",
email: "",
phone: "",
region: [],
provinces: "",
citys: "",
address: "",
reportType: "0", // 举报信息
websiteName: "", //网址名称
websiteUrl: "", //被举报网址
searchEngineType: "", //搜索引擎类型
reportKeyword: "", //举报关键字
// searchWebsiteName: "", //被举报网站名称
// searchWebsiteUrl: "", //被举报网址
// appName: "", //APP名称
// appOfficialUrl: "", //APP官方网址
detailUrl: "", //信息所在详细网址
reportContent: "",
harmType: "",
attachmentsList: [],
userName: "吴大大",
userSex: "1",
userEmail: "123@qq.com",
userMobile: "13800000000",
region: ["北京市", "北京市"],
country: "北京市",
city: "北京市",
userAddress: "北京市朝阳区XX路XX号",
reportType: 1, // 举报信息
websiteName: "11", //网址名称
websitAddress: "22", //被举报网址
searchType: "", //搜索引擎类型
searchKeyword: "", //举报关键字
websitDetailAddress: "111", //信息所在详细网址
reportContent: "222",
harmType: "2222",
fileUrl: "",
images: "",
captcha: "",
status: "0",
});
// 表单验证规则
const rules = reactive({
realName: [
userName: [
{ required: true, message: "请输入真实姓名", trigger: "blur" },
{ min: 2, max: 10, message: "请输入2 到 10 位真实姓名", trigger: "blur" },
],
gender: [{ required: true, message: "请选择性别", trigger: "change" }],
email: [
userSex: [{ required: true, message: "请选择性别", trigger: "change" }],
userEmail: [
{ required: true, message: "请输入邮箱地址", trigger: "blur" },
{ type: "email", message: "请输入正确的邮箱地址", trigger: "blur" },
],
phone: [
userMobile: [
{ required: true, message: "请输入电话号码", trigger: "blur" },
{
pattern: /^1[3-9]\d{9}$/,
......@@ -415,17 +455,17 @@ const rules = reactive({
{ required: true, message: "请选择被举报类型", trigger: "change" },
],
websiteName: [{ required: true, message: "请输入网址名称", trigger: "blur" }],
websiteUrl: [
websitAddress: [
{ required: true, message: "请输入被举报网址", trigger: "blur" },
// { type: "url", message: "请输入正确的网址", trigger: "blur" },
],
searchEngineType: [
searchType: [
{ required: true, message: "请选择搜索引擎类型", trigger: "change" },
],
reportKeyword: [
searchKeyword: [
{ required: true, message: "请输入举报关键字", trigger: "blur" },
],
detailUrl: [
websitDetailAddress: [
{ required: true, message: "请输入信息所在详细网址", trigger: "blur" },
// { type: "url", message: "请输入正确的网址", trigger: "blur" },
],
......@@ -434,7 +474,6 @@ const rules = reactive({
{ min: 1, max: 500, message: "举报内容不能超过500个字符", trigger: "blur" },
],
harmType: [{ required: true, message: "请选择危害类型", trigger: "change" }],
captcha: [
{
required: true,
......@@ -446,18 +485,22 @@ const rules = reactive({
// 处理举报类型变化
function handleReportTypeChange(value: string) {
form.websiteUrl = ""; //被举报网址
form.detailUrl = ""; //信息所在详细网址
form.websitAddress = ""; //被举报网址
form.websitDetailAddress = ""; //信息所在详细网址
form.websiteName = ""; //网址名称
form.searchEngineType = ""; //搜索引擎类型
form.reportKeyword = ""; //举报关键字
form.searchType = ""; //搜索引擎类型
form.searchKeyword = ""; //举报关键字
disabled.value = false;
}
// 处理搜索引擎类型变化
function handleSearchEngineTypeChange(value: string) {
form.websiteUrl = value; //被举报网址
form.detailUrl = value; //信息所在详细网址
searchEngineTypeOptions.forEach((item: any) => {
if (item.value === value) {
form.websitAddress = item.url; //被举报网址
form.websitDetailAddress = item.url; //信息所在详细网址
}
});
if (value === "http://") {
disabled.value = false;
} else {
......@@ -467,44 +510,83 @@ function handleSearchEngineTypeChange(value: string) {
// 处理文件上传超出限制
function handleExceed(files: any, fileList: any) {
ElMessage.warning(
`最多只能上传 3 个文件,当前选择了 ${files.length} 个文件,共 ${
ElMessage({
message: `最多只能上传 3 个文件,当前选择了 ${files.length} 个文件,共 ${
files.length + fileList.length
} 个文件`
);
} 个文件`,
type: "warning",
});
}
// 文件上传前的验证
function beforeUpload(file: any) {
const isLt10M = file.size / 1024 / 1024 < 10;
if (!isLt10M) {
ElMessage.error("单个附件大小不能超过 10MB!");
ElMessage({
message: "单个附件大小不能超过 10MB!",
type: "warning",
});
return false;
}
return true;
}
// 处理文件上传成功
function contentImgSuccess(response: any, file: any, fileList: any) {
if (response.result) {
contentImg.value.push({
url: file.url,
name: file.name,
path: response.data,
uid: file.uid,
});
}
debugger;
}
// 处理文件上传错误
function contentImgError(response: any, file: any, fileList: any) {
response = response.toString().replace("Error: ", "");
// debugger;
response = JSON.parse(response);
ElMessage({
message: response.msg,
type: "error",
});
}
// 移除上传文件
function removeUploadFile(file: any, fileList: any) {}
function contentImghandleRemove(file: any, fileList: any) {
var index = -1;
index = contentImg.value.findIndex(function (text: any) {
return text.uid == file.uid;
}); //查找元素下标
if (index != -1) {
contentImg.value.splice(index, 1); //删除元素
}
}
// 移除上传文件
// function removeUploadFile(file: any, fileList: any) {}
// 处理文件上传变化
function handleUploadChange(files: any, fileList: any) {
// let formData = new FormData();
// fileList.forEach((file: any) => {
// formData.append("multipartFile", file.raw); // 注意这里使用multipartFile对应后端参数
// });
// uploadFile(formData).then((res: any) => {
// if (res.code === 200) {
// form.images = res.data;
// ElMessage.success("文件上传成功!");
// } else {
// ElMessage.error("文件上传失败!");
// }
// });
}
// function handleUploadChange(files: any, fileList: any) {
// let formData = new FormData();
// fileList.forEach((file: any) => {
// formData.append("multipartFile", file.raw); // 注意这里使用multipartFile对应后端参数
// });
// uploadFile(formData).then((res: any) => {
// if (res.code === 200) {
// form.images = res.data;
// ElMessage.success("文件上传成功!");
// } else {
// ElMessage.error("文件上传失败!");
// }
// });
// }
// 处理文件上传成功
function handleUploadSuccess(res: any, file: any, fileList: any) {}
// function handleUploadSuccess(res: any, file: any, fileList: any) {}
// 提交表单
function submitForm() {
......@@ -520,38 +602,59 @@ function submitForm() {
form.captcha = "";
return;
}
if (fileList.value.length === 0) {
getUpdateForm(form).then((res) => {
if (res.code === 200) {
ElMessage.success("提交成功!");
resetForm();
} else {
ElMessage.error("提交失败!");
}
});
} else {
let formData = new FormData();
fileList.value.forEach((file: any) => {
formData.append("multipartFile", file.raw); // 注意这里使用multipartFile对应后端参数
});
uploadFile(formData).then((res: any) => {
if (res.code === 200) {
form.images = res.data;
getUpdateForm(form).then((res) => {
if (res.code === 200) {
ElMessage.success("提交成功!");
resetForm();
} else {
ElMessage.error("提交失败!");
}
});
} else {
ElMessage.error("文件上传失败!");
}
});
}
//contentImg转json赋值给form.fileUrl
form.fileUrl = JSON.stringify(contentImg.value);
getUpdateForm(form).then((res: any) => {
if (res.code === 200) {
ElMessage({
message: "提交成功!",
type: "success",
});
// 重置表单字段
resetForm();
refreshCaptcha(); // 刷新验证码
} else {
ElMessage({
message: "提交失败!",
type: "error",
});
}
});
// if (fileList.value.length === 0) {
// getUpdateForm(form).then((res) => {
// if (res.code === 200) {
// ElMessage.success("提交成功!");
// resetForm();
// } else {
// ElMessage.error("提交失败!");
// }
// });
// } else {
// let formData = new FormData();
// fileList.value.forEach((file: any) => {
// formData.append("multipartFile", file.raw); // 注意这里使用multipartFile对应后端参数
// });
// uploadFile(formData).then((res: any) => {
// if (res.code === 200) {
// form.images = res.data;
// getUpdateForm(form).then((res) => {
// if (res.code === 200) {
// ElMessage.success("提交成功!");
// resetForm();
// } else {
// ElMessage.error("提交失败!");
// }
// });
// } else {
// ElMessage.error("文件上传失败!");
// }
// });
// }
} else {
ElMessage.error("请填写完整信息!");
ElMessage({
message: "请填写完整信息!",
type: "error",
});
return false;
}
});
......@@ -559,7 +662,11 @@ function submitForm() {
// 重置表单
function resetForm() {
formRef.value.resetFields();
// ElMessage.info("表单已重置");
contentImg.value = [];
ElMessage({
message: "表单已重置",
type: "info",
});
}
const letters = Array.from("ABCDEFGHJKLMNPQRSTUVWXYZ23456789");
......
......@@ -67,7 +67,8 @@
>太原市互联网违法和不良信息举报平台</a
>
</h1>
<h2>太原市互联网举报电话:{{ inject("VITE_PHONE") }}</h2>
<h3>太原市互联网举报电话:{{ inject("VITE_PHONE") }}</h3>
<h3>太原市互联网举报邮箱:{{ inject("VITE_EMAIL") }}</h3>
<el-button
class="botton"
type="primary"
......
......@@ -32,9 +32,9 @@ export default defineConfig({
proxy: {
"/cms": {
target: "http://localhost:9002",
// target: "http://192.168.19.248:9002",
// target: "http://172.16.70.52:8081",
// target: "http://192.168.19.142:9002",
// target: "http://192.168.19.127:9002",
changeOrigin: true,
// rewrite: (path) => path.replace(/^\/cms/, "/cms"),
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment