Commit 57104fe8 authored by liyang's avatar liyang

fix:修复若干bug

parent 9d43fca6
...@@ -10,20 +10,35 @@ ...@@ -10,20 +10,35 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['aboutSts:edit']" v-hasPermi="['aboutSts:edit']"
>新增</el-button> >新增</el-button
>
</el-col> </el-col>
</el-row> </el-row>
<el-table v-loading="loading" :data="list" border> <el-table v-loading="loading" :data="list" border>
<el-table-column label="序号" type="index" align="center" width="55" /> <el-table-column label="序号" type="index" align="center" width="55" />
<el-table-column label="排序" align="center" prop="sortOrder" width="80" /> <el-table-column
<el-table-column label="标题" align="center" prop="title" show-overflow-tooltip /> label="标题"
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> align="center"
prop="title"
show-overflow-tooltip
/>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180"> <el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
...@@ -31,14 +46,16 @@ ...@@ -31,14 +46,16 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['aboutSts:edit']" v-hasPermi="['aboutSts:edit']"
>修改</el-button> >修改</el-button
>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['aboutSts:edit']" v-hasPermi="['aboutSts:edit']"
>删除</el-button> >删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -47,7 +64,12 @@ ...@@ -47,7 +64,12 @@
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="排序" prop="sortOrder"> <el-form-item label="排序" prop="sortOrder">
<el-input-number v-model="form.sortOrder" :min="0" controls-position="right" style="width: 100%" /> <el-input-number
v-model="form.sortOrder"
:min="0"
controls-position="right"
style="width: 100%"
/>
</el-form-item> </el-form-item>
<el-form-item label="标题" prop="title"> <el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" /> <el-input v-model="form.title" placeholder="请输入标题" />
...@@ -65,13 +87,19 @@ ...@@ -65,13 +87,19 @@
</template> </template>
<script> <script>
import { listAboutSts, getAboutSts, addAboutSts, updateAboutSts, delAboutSts } from "@/api/aboutSts" import {
import Editor from "@/components/Editor" listAboutSts,
getAboutSts,
addAboutSts,
updateAboutSts,
delAboutSts,
} from "@/api/aboutSts";
import Editor from "@/components/Editor";
export default { export default {
name: "AboutSts", name: "AboutSts",
components: { components: {
Editor Editor,
}, },
data() { data() {
return { return {
...@@ -81,86 +109,90 @@ export default { ...@@ -81,86 +109,90 @@ export default {
open: false, open: false,
form: { form: {
id: undefined, id: undefined,
title: '', title: "",
content: '', content: "",
sortOrder: 0 sortOrder: 0,
}, },
rules: { rules: {
title: [ title: [{ required: true, message: "标题不能为空", trigger: "blur" }],
{ required: true, message: "标题不能为空", trigger: "blur" } },
] };
}
}
}, },
created() { created() {
this.getList() this.getList();
}, },
methods: { methods: {
getList() { getList() {
this.loading = true this.loading = true;
listAboutSts().then(response => { listAboutSts()
this.list = response.data || [] .then((response) => {
this.loading = false this.list = response.data || [];
}).catch(() => { this.loading = false;
this.loading = false
}) })
.catch(() => {
this.loading = false;
});
}, },
cancel() { cancel() {
this.open = false this.open = false;
this.resetForm() this.resetForm();
}, },
handleAdd() { handleAdd() {
this.resetForm() this.resetForm();
this.open = true this.open = true;
this.title = "添加关于STS" this.title = "添加关于STS";
}, },
handleUpdate(row) { handleUpdate(row) {
this.resetForm() this.resetForm();
const id = row.id || this.ids const id = row.id || this.ids;
getAboutSts(id).then(response => { getAboutSts(id).then((response) => {
this.form = response.data this.form = response.data;
this.open = true this.open = true;
this.title = "修改关于STS" this.title = "修改关于STS";
}) });
}, },
handleDelete(row) { handleDelete(row) {
this.$modal.confirm('是否确认删除标题为"' + row.title + '"的数据项?').then(() => { this.$modal
return delAboutSts(row.id) .confirm('是否确认删除标题为"' + row.title + '"的数据项?')
}).then(() => { .then(() => {
this.getList() return delAboutSts(row.id);
this.$modal.msgSuccess("删除成功") })
}).catch(() => {}) .then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
}, },
submitForm() { submitForm() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
if (this.form.id) { if (this.form.id) {
updateAboutSts(this.form).then(() => { updateAboutSts(this.form).then(() => {
this.$modal.msgSuccess("修改成功") this.$modal.msgSuccess("修改成功");
this.open = false this.open = false;
this.getList() this.getList();
}) });
} else { } else {
addAboutSts(this.form).then(() => { addAboutSts(this.form).then(() => {
this.$modal.msgSuccess("新增成功") this.$modal.msgSuccess("新增成功");
this.open = false this.open = false;
this.getList() this.getList();
}) });
} }
} }
}) });
}, },
resetForm() { resetForm() {
this.form = { this.form = {
id: undefined, id: undefined,
title: '', title: "",
content: '', content: "",
sortOrder: 0 sortOrder: 0,
} };
if (this.$refs.form) { if (this.$refs.form) {
this.$refs.form.resetFields() this.$refs.form.resetFields();
} }
} },
} },
} };
</script> </script>
...@@ -5,32 +5,70 @@ ...@@ -5,32 +5,70 @@
<el-card> <el-card>
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>介绍详情</span> <span>介绍详情</span>
<el-button type="primary" size="mini" @click="enterEdit" v-hasPermi="['homepage:introduction:edit']">编辑</el-button> <el-button
type="primary"
size="mini"
@click="enterEdit"
v-hasPermi="['homepage:introduction:edit']"
>编辑</el-button
>
</div> </div>
<el-descriptions :column="1" border> <el-form ref="detailForm" :model="form" label-width="80px">
<el-descriptions-item label="标题"> <el-row>
{{ form.title || '未设置' }} <el-col :span="24">
</el-descriptions-item> <el-form-item label="标题">
<el-descriptions-item label="简介"> <span class="detail-value">{{ form.title || "未设置" }}</span>
{{ form.summary || '未设置' }} </el-form-item>
</el-descriptions-item> </el-col>
<el-descriptions-item label="图片"> <el-col :span="24">
<el-form-item label="简介">
<span class="detail-value">{{ form.summary || "未设置" }}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="图片">
<div v-if="form.images && form.images.length"> <div v-if="form.images && form.images.length">
<img v-for="(img, index) in form.images" :key="index" :src="img" style="max-width: 200px; max-height: 150px; margin-right: 10px;" /> <img
v-for="(img, index) in form.images.split(',')"
:key="index"
:src="img"
style="
max-width: 200px;
max-height: 150px;
margin-right: 10px;
"
/>
</div> </div>
<span v-else>未设置</span> <span v-else class="detail-value">未设置</span>
</el-descriptions-item> </el-form-item>
<el-descriptions-item label="状态"> </el-col>
<el-col :span="24">
<el-form-item label="状态">
<el-tag :type="form.status === '0' ? 'success' : 'danger'"> <el-tag :type="form.status === '0' ? 'success' : 'danger'">
{{ form.status ? dict.type.sys_normal_disable.find(item => item.value === form.status).label : '未知' }} {{
form.status
? dict.type.sys_normal_disable.find(
(item) => item.value === form.status
).label
: "未知"
}}
</el-tag> </el-tag>
</el-descriptions-item> </el-form-item>
</el-descriptions> </el-col>
</el-row>
</el-form>
</el-card> </el-card>
</div> </div>
<!-- 编辑视图 --> <!-- 编辑视图 -->
<el-form v-else ref="form" :model="form" :rules="rules" label-width="80px" v-loading="loading"> <el-form
v-else
ref="form"
:model="form"
:rules="rules"
label-width="80px"
v-loading="loading"
>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="标题" prop="title"> <el-form-item label="标题" prop="title">
...@@ -39,12 +77,16 @@ ...@@ -39,12 +77,16 @@
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="简介" prop="summary"> <el-form-item label="简介" prop="summary">
<el-input v-model="form.summary" type="textarea" placeholder="请输入简介" /> <el-input
v-model="form.summary"
type="textarea"
placeholder="请输入简介"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="图片" prop="images"> <el-form-item label="图片" prop="images">
<image-upload v-model="form.images" :multiple="true"/> <image-upload v-model="form.images" :multiple="true" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
...@@ -54,13 +96,19 @@ ...@@ -54,13 +96,19 @@
v-for="dict in dict.type.sys_normal_disable" v-for="dict in dict.type.sys_normal_disable"
:key="dict.value" :key="dict.value"
:label="dict.value" :label="dict.value"
>{{dict.label}}</el-radio> >{{ dict.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitForm" v-hasPermi="['homepage:introduction:edit']">保 存</el-button> <el-button
type="primary"
@click="submitForm"
v-hasPermi="['homepage:introduction:edit']"
>保 存</el-button
>
<el-button @click="cancelEdit">取消</el-button> <el-button @click="cancelEdit">取消</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -68,11 +116,15 @@ ...@@ -68,11 +116,15 @@
</template> </template>
<script> <script>
import { getIntroduction, addIntroduction, updateIntroduction } from "@/api/homepage/introduction" import {
getIntroduction,
addIntroduction,
updateIntroduction,
} from "@/api/homepage/introduction";
export default { export default {
name: "Introduction", name: "Introduction",
dicts: ['sys_normal_disable'], dicts: ["sys_normal_disable"],
data() { data() {
return { return {
loading: true, loading: true,
...@@ -82,73 +134,87 @@ export default { ...@@ -82,73 +134,87 @@ export default {
title: undefined, title: undefined,
summary: undefined, summary: undefined,
images: undefined, images: undefined,
status: "0" status: "0",
}, },
rules: { rules: {
title: [ title: [{ required: true, message: "标题不能为空", trigger: "blur" }],
{ required: true, message: "标题不能为空", trigger: "blur" } summary: [{ required: true, message: "简介不能为空", trigger: "blur" }],
], },
summary: [ };
{ required: true, message: "简介不能为空", trigger: "blur" }
]
}
}
}, },
created() { created() {
this.getIntroductionData() this.getIntroductionData();
}, },
methods: { methods: {
getIntroductionData() { getIntroductionData() {
this.loading = true this.loading = true;
getIntroduction().then(response => { getIntroduction()
.then((response) => {
if (response.data) { if (response.data) {
this.form = response.data this.form = response.data;
} else { } else {
this.form = { this.form = {
introId: undefined, introId: undefined,
title: undefined, title: undefined,
summary: undefined, summary: undefined,
images: undefined, images: undefined,
status: "0" status: "0",
};
} }
} this.loading = false;
this.loading = false })
}).catch(() => { .catch(() => {
this.form = { this.form = {
introId: undefined, introId: undefined,
title: undefined, title: undefined,
summary: undefined, summary: undefined,
images: undefined, images: undefined,
status: "0" status: "0",
} };
this.loading = false this.loading = false;
}) });
}, },
enterEdit() { enterEdit() {
this.editing = true this.editing = true;
}, },
cancelEdit() { cancelEdit() {
this.editing = false this.editing = false;
}, },
submitForm: function() { submitForm: function () {
this.$refs["form"].validate(valid => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
if (this.form.introId != undefined) { if (this.form.introId != undefined) {
updateIntroduction(this.form).then(() => { updateIntroduction(this.form).then(() => {
this.$modal.msgSuccess("保存成功") this.$modal.msgSuccess("保存成功");
this.getIntroductionData() this.getIntroductionData();
this.editing = false this.editing = false;
}) });
} else { } else {
addIntroduction(this.form).then(() => { addIntroduction(this.form).then(() => {
this.$modal.msgSuccess("保存成功") this.$modal.msgSuccess("保存成功");
this.getIntroductionData() this.getIntroductionData();
this.editing = false this.editing = false;
}) });
} }
} }
}) });
} },
},
};
</script>
<style lang="scss" scoped>
.detail-value {
color: #606266;
line-height: 32px;
}
.clearfix {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
&::after {
display: none;
} }
} }
</script> </style>
...@@ -5,34 +5,71 @@ ...@@ -5,34 +5,71 @@
<el-card> <el-card>
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>概况详情</span> <span>概况详情</span>
<el-button type="primary" size="mini" @click="enterEdit" v-hasPermi="['homepage:overview:edit']">编辑</el-button> <el-button
type="primary"
size="mini"
@click="enterEdit"
v-hasPermi="['homepage:overview:edit']"
>编辑</el-button
>
</div> </div>
<el-descriptions :column="1" border> <el-form ref="detailForm" :model="form" label-width="80px">
<el-descriptions-item label="标题"> <el-row>
{{ form.title || '未设置' }} <el-col :span="24">
</el-descriptions-item> <el-form-item label="标题">
<el-descriptions-item label="简介"> <span class="detail-value">{{ form.title || "未设置" }}</span>
{{ form.summary || '未设置' }} </el-form-item>
</el-descriptions-item> </el-col>
<el-descriptions-item label="图片"> <el-col :span="24">
<img v-if="form.image" :src="form.image" style="max-width: 300px; max-height: 200px;" /> <el-form-item label="简介">
<span v-else>未设置</span> <span class="detail-value">{{ form.summary || "未设置" }}</span>
</el-descriptions-item> </el-form-item>
<el-descriptions-item label="视频"> </el-col>
<a v-if="form.video" :href="form.video" target="_blank">查看视频</a> <el-col :span="24">
<span v-else>未设置</span> <el-form-item label="图片">
</el-descriptions-item> <img
<el-descriptions-item label="状态"> v-if="form.image"
:src="form.image"
style="max-width: 300px; max-height: 200px"
/>
<span v-else class="detail-value">未设置</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="视频">
<a v-if="form.video" :href="form.video" target="_blank"
>查看视频</a
>
<span v-else class="detail-value">未设置</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="状态">
<el-tag :type="form.status === '0' ? 'success' : 'danger'"> <el-tag :type="form.status === '0' ? 'success' : 'danger'">
{{ form.status ? dict.type.sys_normal_disable.find(item => item.value === form.status).label : '未知' }} {{
form.status
? dict.type.sys_normal_disable.find(
(item) => item.value === form.status
).label
: "未知"
}}
</el-tag> </el-tag>
</el-descriptions-item> </el-form-item>
</el-descriptions> </el-col>
</el-row>
</el-form>
</el-card> </el-card>
</div> </div>
<!-- 编辑视图 --> <!-- 编辑视图 -->
<el-form v-else ref="form" :model="form" :rules="rules" label-width="80px" v-loading="loading"> <el-form
v-else
ref="form"
:model="form"
:rules="rules"
label-width="80px"
v-loading="loading"
>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="标题" prop="title"> <el-form-item label="标题" prop="title">
...@@ -41,12 +78,16 @@ ...@@ -41,12 +78,16 @@
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="简介" prop="summary"> <el-form-item label="简介" prop="summary">
<el-input v-model="form.summary" type="textarea" placeholder="请输入简介" /> <el-input
v-model="form.summary"
type="textarea"
placeholder="请输入简介"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="图片" prop="image"> <el-form-item label="图片" prop="image">
<image-upload v-model="form.image"/> <image-upload v-model="form.image" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
...@@ -66,13 +107,19 @@ ...@@ -66,13 +107,19 @@
v-for="dict in dict.type.sys_normal_disable" v-for="dict in dict.type.sys_normal_disable"
:key="dict.value" :key="dict.value"
:label="dict.value" :label="dict.value"
>{{dict.label}}</el-radio> >{{ dict.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitForm" v-hasPermi="['homepage:overview:edit']">保 存</el-button> <el-button
type="primary"
@click="submitForm"
v-hasPermi="['homepage:overview:edit']"
>保 存</el-button
>
<el-button @click="cancelEdit">取消</el-button> <el-button @click="cancelEdit">取消</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -80,15 +127,19 @@ ...@@ -80,15 +127,19 @@
</template> </template>
<script> <script>
import { getOverview, addOverview, updateOverview } from "@/api/homepage/overview" import {
import FileUpload from "@/components/FileUpload" getOverview,
addOverview,
updateOverview,
} from "@/api/homepage/overview";
import FileUpload from "@/components/FileUpload";
export default { export default {
name: "Overview", name: "Overview",
components: { components: {
FileUpload FileUpload,
}, },
dicts: ['sys_normal_disable'], dicts: ["sys_normal_disable"],
data() { data() {
return { return {
loading: true, loading: true,
...@@ -99,24 +150,23 @@ export default { ...@@ -99,24 +150,23 @@ export default {
summary: undefined, summary: undefined,
image: undefined, image: undefined,
video: undefined, video: undefined,
status: "0" status: "0",
}, },
rules: { rules: {
title: [ title: [{ required: true, message: "标题不能为空", trigger: "blur" }],
{ required: true, message: "标题不能为空", trigger: "blur" } },
] };
}
}
}, },
created() { created() {
this.getOverviewData() this.getOverviewData();
}, },
methods: { methods: {
getOverviewData() { getOverviewData() {
this.loading = true this.loading = true;
getOverview().then(response => { getOverview()
.then((response) => {
if (response.data) { if (response.data) {
this.form = response.data this.form = response.data;
} else { } else {
this.form = { this.form = {
overviewId: undefined, overviewId: undefined,
...@@ -124,47 +174,66 @@ export default { ...@@ -124,47 +174,66 @@ export default {
summary: undefined, summary: undefined,
image: undefined, image: undefined,
video: undefined, video: undefined,
status: "0" status: "0",
} };
} }
this.loading = false this.loading = false;
}).catch(() => { })
.catch(() => {
this.form = { this.form = {
overviewId: undefined, overviewId: undefined,
title: undefined, title: undefined,
summary: undefined, summary: undefined,
image: undefined, image: undefined,
video: undefined, video: undefined,
status: "0" status: "0",
} };
this.loading = false this.loading = false;
}) });
}, },
enterEdit() { enterEdit() {
this.editing = true this.editing = true;
}, },
cancelEdit() { cancelEdit() {
this.editing = false this.editing = false;
}, },
submitForm: function() { submitForm: function () {
this.$refs["form"].validate(valid => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
if (this.form.overviewId != undefined) { if (this.form.overviewId != undefined) {
updateOverview(this.form).then(() => { updateOverview(this.form).then(() => {
this.$modal.msgSuccess("保存成功") this.$modal.msgSuccess("保存成功");
this.getOverviewData() this.getOverviewData();
this.editing = false this.editing = false;
}) });
} else { } else {
addOverview(this.form).then(() => { addOverview(this.form).then(() => {
this.$modal.msgSuccess("保存成功") this.$modal.msgSuccess("保存成功");
this.getOverviewData() this.getOverviewData();
this.editing = false this.editing = false;
}) });
} }
} }
}) });
} },
},
};
</script>
<style lang="scss" scoped>
.detail-value {
color: #606266;
line-height: 32px;
}
.clearfix {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
&::after {
display: none;
} }
} }
</script> </style>
...@@ -10,20 +10,35 @@ ...@@ -10,20 +10,35 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:sciencePlan:add']" v-hasPermi="['system:sciencePlan:add']"
>新增</el-button> >新增</el-button
>
</el-col> </el-col>
</el-row> </el-row>
<el-table v-loading="loading" :data="list" border> <el-table v-loading="loading" :data="list" border>
<el-table-column label="序号" type="index" align="center" width="55" /> <el-table-column label="序号" type="index" align="center" width="55" />
<el-table-column label="排序" align="center" prop="sortOrder" width="80" /> <el-table-column
<el-table-column label="标题" align="center" prop="title" show-overflow-tooltip /> label="标题"
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> align="center"
prop="title"
show-overflow-tooltip
/>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180"> <el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
...@@ -31,14 +46,16 @@ ...@@ -31,14 +46,16 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:sciencePlan:edit']" v-hasPermi="['system:sciencePlan:edit']"
>修改</el-button> >修改</el-button
>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:sciencePlan:remove']" v-hasPermi="['system:sciencePlan:remove']"
>删除</el-button> >删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -47,7 +64,12 @@ ...@@ -47,7 +64,12 @@
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="排序" prop="sortOrder"> <el-form-item label="排序" prop="sortOrder">
<el-input-number v-model="form.sortOrder" :min="0" controls-position="right" style="width: 100%" /> <el-input-number
v-model="form.sortOrder"
:min="0"
controls-position="right"
style="width: 100%"
/>
</el-form-item> </el-form-item>
<el-form-item label="标题" prop="title"> <el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" /> <el-input v-model="form.title" placeholder="请输入标题" />
...@@ -65,13 +87,19 @@ ...@@ -65,13 +87,19 @@
</template> </template>
<script> <script>
import { listSciencePlan, getSciencePlan, addSciencePlan, updateSciencePlan, delSciencePlan } from "@/api/system/sciencePlan" import {
import Editor from "@/components/Editor" listSciencePlan,
getSciencePlan,
addSciencePlan,
updateSciencePlan,
delSciencePlan,
} from "@/api/system/sciencePlan";
import Editor from "@/components/Editor";
export default { export default {
name: "SciencePlan", name: "SciencePlan",
components: { components: {
Editor Editor,
}, },
data() { data() {
return { return {
...@@ -81,86 +109,90 @@ export default { ...@@ -81,86 +109,90 @@ export default {
open: false, open: false,
form: { form: {
id: undefined, id: undefined,
title: '', title: "",
content: '', content: "",
sortOrder: 0 sortOrder: 0,
}, },
rules: { rules: {
title: [ title: [{ required: true, message: "标题不能为空", trigger: "blur" }],
{ required: true, message: "标题不能为空", trigger: "blur" } },
] };
}
}
}, },
created() { created() {
this.getList() this.getList();
}, },
methods: { methods: {
getList() { getList() {
this.loading = true this.loading = true;
listSciencePlan().then(response => { listSciencePlan()
this.list = response.data || [] .then((response) => {
this.loading = false this.list = response.data || [];
}).catch(() => { this.loading = false;
this.loading = false
}) })
.catch(() => {
this.loading = false;
});
}, },
cancel() { cancel() {
this.open = false this.open = false;
this.resetForm() this.resetForm();
}, },
handleAdd() { handleAdd() {
this.resetForm() this.resetForm();
this.open = true this.open = true;
this.title = "添加科研计划与国际合作" this.title = "添加科研计划与国际合作";
}, },
handleUpdate(row) { handleUpdate(row) {
this.resetForm() this.resetForm();
const id = row.id || this.ids const id = row.id || this.ids;
getSciencePlan(id).then(response => { getSciencePlan(id).then((response) => {
this.form = response.data this.form = response.data;
this.open = true this.open = true;
this.title = "修改科研计划与国际合作" this.title = "修改科研计划与国际合作";
}) });
}, },
handleDelete(row) { handleDelete(row) {
this.$modal.confirm('是否确认删除标题为"' + row.title + '"的数据项?').then(() => { this.$modal
return delSciencePlan(row.id) .confirm('是否确认删除标题为"' + row.title + '"的数据项?')
}).then(() => { .then(() => {
this.getList() return delSciencePlan(row.id);
this.$modal.msgSuccess("删除成功") })
}).catch(() => {}) .then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
}, },
submitForm() { submitForm() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
if (this.form.id) { if (this.form.id) {
updateSciencePlan(this.form).then(() => { updateSciencePlan(this.form).then(() => {
this.$modal.msgSuccess("修改成功") this.$modal.msgSuccess("修改成功");
this.open = false this.open = false;
this.getList() this.getList();
}) });
} else { } else {
addSciencePlan(this.form).then(() => { addSciencePlan(this.form).then(() => {
this.$modal.msgSuccess("新增成功") this.$modal.msgSuccess("新增成功");
this.open = false this.open = false;
this.getList() this.getList();
}) });
} }
} }
}) });
}, },
resetForm() { resetForm() {
this.form = { this.form = {
id: undefined, id: undefined,
title: '', title: "",
content: '', content: "",
sortOrder: 0 sortOrder: 0,
} };
if (this.$refs.form) { if (this.$refs.form) {
this.$refs.form.resetFields() this.$refs.form.resetFields();
} }
} },
} },
} };
</script> </script>
...@@ -198,23 +198,46 @@ ...@@ -198,23 +198,46 @@
</el-dialog> </el-dialog>
<el-dialog title="查看详情" :visible.sync="viewOpen" width="780px" append-to-body> <el-dialog title="查看详情" :visible.sync="viewOpen" width="780px" append-to-body>
<el-descriptions :column="1" border> <el-form ref="viewForm" :model="viewData" label-width="80px">
<el-descriptions-item label="标题">{{ viewData.title }}</el-descriptions-item> <el-row>
<el-descriptions-item label="图片"> <el-col :span="24">
<el-form-item label="标题">
<span class="detail-value">{{ viewData.title }}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="图片">
<el-image <el-image
v-if="viewData.image" v-if="viewData.image"
style="width: 200px; height: 200px" style="width: 200px; height: 200px"
:src="viewData.image" :src="viewData.image"
:preview-src-list="[viewData.image]" :preview-src-list="[viewData.image]"
/> />
</el-descriptions-item> <span v-else class="detail-value">未设置</span>
<el-descriptions-item label="概述">{{ viewData.summary }}</el-descriptions-item> </el-form-item>
<el-descriptions-item label="富文本"> </el-col>
<div v-html="viewData.content"></div> <el-col :span="24">
</el-descriptions-item> <el-form-item label="概述">
<el-descriptions-item label="发布时间">{{ parseTime(viewData.publishTime) }}</el-descriptions-item> <span class="detail-value">{{ viewData.summary }}</span>
<el-descriptions-item label="发布人">{{ viewData.publishBy }}</el-descriptions-item> </el-form-item>
</el-descriptions> </el-col>
<el-col :span="24">
<el-form-item label="富文本">
<div class="detail-content" v-html="viewData.content"></div>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="发布时间">
<span class="detail-value">{{ parseTime(viewData.publishTime) }}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="发布人">
<span class="detail-value">{{ viewData.publishBy }}</span>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="viewOpen = false">关 闭</el-button> <el-button @click="viewOpen = false">关 闭</el-button>
</div> </div>
...@@ -351,3 +374,16 @@ export default { ...@@ -351,3 +374,16 @@ export default {
} }
} }
</script> </script>
<style lang="scss" scoped>
.detail-value {
color: #606266;
line-height: 32px;
}
.detail-content {
color: #606266;
line-height: 1.6;
max-height: 300px;
overflow-y: auto;
}
</style>
...@@ -5,8 +5,6 @@ ...@@ -5,8 +5,6 @@
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<span>项目实施进展</span> <span>项目实施进展</span>
<el-button type="primary" size="small" @click="toggleEdit" v-if="!isEditing">编辑</el-button>
<el-button type="success" size="small" @click="handleSave" v-if="isEditing">保存</el-button>
</div> </div>
</template> </template>
...@@ -17,7 +15,6 @@ ...@@ -17,7 +15,6 @@
<el-input <el-input
v-model="form.title" v-model="form.title"
placeholder="请输入标题" placeholder="请输入标题"
:disabled="!isEditing"
maxlength="50" maxlength="50"
show-word-limit show-word-limit
></el-input> ></el-input>
...@@ -27,10 +24,13 @@ ...@@ -27,10 +24,13 @@
<el-form-item label="详细介绍" prop="content"> <el-form-item label="详细介绍" prop="content">
<editor <editor
v-model="form.content" v-model="form.content"
:disabled="!isEditing"
></editor> ></editor>
</el-form-item> </el-form-item>
<div class="button-center">
<el-button type="primary" size="small" @click="handleSave">保存</el-button>
</div>
</el-card> </el-card>
</el-form> </el-form>
</div> </div>
</template> </template>
...@@ -111,4 +111,9 @@ export default { ...@@ -111,4 +111,9 @@ export default {
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.button-center {
display: flex;
justify-content: center;
margin-top: 20px;
}
</style> </style>
...@@ -15,17 +15,41 @@ ...@@ -15,17 +15,41 @@
</el-button> </el-button>
</div> </div>
<div class="project-intro"> <div class="project-intro">
<el-descriptions :column="2" border> <el-form ref="viewForm" :model="form" label-width="120px">
<el-descriptions-item label="项目名称">{{ form.projectName }}</el-descriptions-item> <el-row>
<el-descriptions-item label="实施周期">{{ form.implementationPeriod }}</el-descriptions-item> <el-col :span="12">
<el-descriptions-item label="牵头单位">{{ form.leadUnit }}</el-descriptions-item> <el-form-item label="项目名称">
<el-descriptions-item label="核心参与单位">{{ form.coreUnits }}</el-descriptions-item> <span class="form-view-text">{{ form.projectName }}</span>
<el-descriptions-item label="项目背景" :span="2">{{ form.projectBackground }}</el-descriptions-item> </el-form-item>
<el-descriptions-item label="总体目标" :span="2">{{ form.overallGoal }}</el-descriptions-item> </el-col>
<el-descriptions-item label="项目详情" :span="2"> <el-col :span="12">
<div v-html="form.projectDetail"></div> <el-form-item label="实施周期">
</el-descriptions-item> <span class="form-view-text">{{ form.implementationPeriod }}</span>
</el-descriptions> </el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="牵头单位">
<span class="form-view-text">{{ form.leadUnit }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="核心参与单位">
<span class="form-view-text">{{ form.coreUnits }}</span>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="项目背景">
<span class="form-view-text">{{ form.projectBackground }}</span>
</el-form-item>
<el-form-item label="总体目标">
<span class="form-view-text">{{ form.overallGoal }}</span>
</el-form-item>
<el-form-item label="项目详情">
<div class="form-view-text" v-html="form.projectDetail"></div>
</el-form-item>
</el-form>
</div> </div>
</el-card> </el-card>
...@@ -162,4 +186,8 @@ export default { ...@@ -162,4 +186,8 @@ export default {
.project-intro { .project-intro {
padding: 20px; padding: 20px;
} }
.form-view-text {
color: #606266;
}
</style> </style>
...@@ -41,6 +41,12 @@ export const constantRoutes = [ ...@@ -41,6 +41,12 @@ export const constantRoutes = [
component: () => import('@/views/portal/Achievement'), component: () => import('@/views/portal/Achievement'),
meta: { title: '科研成果' } meta: { title: '科研成果' }
}, },
{
path: 'achievement/detail',
name: 'PortalAchievementDetail',
component: () => import('@/views/portal/AchievementDetail'),
meta: { title: '科研成果详情' }
},
{ {
path: 'application', path: 'application',
name: 'PortalApplication', name: 'PortalApplication',
......
This diff is collapsed.
...@@ -62,5 +62,5 @@ pagehelper: ...@@ -62,5 +62,5 @@ pagehelper:
# 防止XSS攻击 # 防止XSS攻击
xss: xss:
enabled: true enabled: true
excludes: /system/notice excludes: /system/notice,/system/sciencePlan
urlPatterns: /system/*,/monitor/*,/tool/* urlPatterns: /system/*,/monitor/*,/tool/*
...@@ -99,7 +99,8 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper ...@@ -99,7 +99,8 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
private String cleanJsonString(String json) private String cleanJsonString(String json)
{ {
json = json.replaceAll("\\\\", ""); // 移除反斜杠会影响JSON转义字符(如\n换行符),改为只移除特定的危险字符
// json = json.replaceAll("\\\\", "");
json = json.replaceAll("`", ""); json = json.replaceAll("`", "");
return json; return json;
} }
......
...@@ -361,7 +361,7 @@ public class SysMenuServiceImpl implements ISysMenuService ...@@ -361,7 +361,7 @@ public class SysMenuServiceImpl implements ISysMenuService
public boolean checkRouteConfigUnique(SysMenu menu) public boolean checkRouteConfigUnique(SysMenu menu)
{ {
Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
Long parentId = menu.getParentId(); Long parentId = StringUtils.isNull(menu.getParentId()) ? MENU_ROOT_ID : menu.getParentId();
String path = menu.getPath(); String path = menu.getPath();
String routeName = StringUtils.isEmpty(menu.getRouteName()) ? path : menu.getRouteName(); String routeName = StringUtils.isEmpty(menu.getRouteName()) ? path : menu.getRouteName();
List<SysMenu> sysMenuList = menuMapper.selectMenusByPathOrRouteName(path, routeName); List<SysMenu> sysMenuList = menuMapper.selectMenusByPathOrRouteName(path, routeName);
......
...@@ -30,8 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -30,8 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</sql> </sql>
<select id="selectSysAchievementList" parameterType="SysAchievement" resultMap="SysAchievementResult"> <select id="selectSysAchievementList" parameterType="SysAchievement" resultMap="SysAchievementResult">
select id, achievement_name, thumbnail, achievement_category, research_field, research_unit, researchers, publish_time, publisher, sort, status, create_by, create_time, update_by, update_time, remark <include refid="selectSysAchievementVo"/>
from sys_achievement
<where> <where>
<if test="achievementName != null and achievementName != ''"> <if test="achievementName != null and achievementName != ''">
AND achievement_name like concat('%', #{achievementName}, '%') AND achievement_name like concat('%', #{achievementName}, '%')
...@@ -59,8 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -59,8 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectSysAchievementById" parameterType="Long" resultMap="SysAchievementResult"> <select id="selectSysAchievementById" parameterType="Long" resultMap="SysAchievementResult">
select id, achievement_name, thumbnail, achievement_category, research_field, research_unit, researchers, publish_time, publisher, sort, status, create_by, create_time, update_by, update_time, remark <include refid="selectSysAchievementVo"/>
from sys_achievement
where id = #{id} where id = #{id}
</select> </select>
......
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