提交 af2ff993 authored 作者: 龙菲's avatar 龙菲

feat:博物馆新增、修改

上级 144c8427
import request from '@/utils/request' import request from '@/utils/request'
// 根据id查询博物馆详情
export function getDeptDetailById(id) { export function getDeptDetailById(id) {
return request({ return request({
url: '/sys/dept/'+id, url: '/sys/dept/'+id,
method: 'get', method: 'get',
}) })
} }
// 获取博物馆列表
export function getDepList() { export function getDepList() {
return request({ return request({
url: '/sys/depts', url: '/sys/depts',
method: 'get', method: 'get',
}) })
} }
\ No newline at end of file
\ No newline at end of file
...@@ -55,3 +55,12 @@ export function deleteMuseum(id) { ...@@ -55,3 +55,12 @@ export function deleteMuseum(id) {
data data
}) })
} }
// 查询行政区划树
export function getSysRegionTree(params) {
return request({
url: `/sysRegion/tree`,
method: 'get',
params
})
}
...@@ -22,7 +22,9 @@ class Dict { ...@@ -22,7 +22,9 @@ class Dict {
nonExistentNames.push(name) //存入list中,单独进行处理调用 nonExistentNames.push(name) //存入list中,单独进行处理调用
} }
}); });
var index = nonExistentNames.indexOf('literature') var index = nonExistentNames.indexOf('literature')
if (index != -1) { if (index != -1) {
// debugger // debugger
Vue.set(this.dict, 'literature', []); Vue.set(this.dict, 'literature', []);
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
:list-type="listType" :list-type="listType"
name="files" name="files"
:accept="fileAccept" :accept="fileAccept"
ref="AutoUploader"
:http-request="httpRequest"
> >
<i v-if="listType === 'picture-card'" class="el-icon-plus"></i> <i v-if="listType === 'picture-card'" class="el-icon-plus"></i>
<el-button v-else size="small" type="primary">点击上传</el-button> <el-button v-else size="small" type="primary">点击上传</el-button>
...@@ -27,8 +29,9 @@ ...@@ -27,8 +29,9 @@
</template> </template>
<script> <script>
import { getToken } from "@/utils/auth"; import { getToken } from "@/utils/auth";
import { upload } from "@/utils/upload";
export default { export default {
name: "Uploader", name: "AutoUploader",
props: { props: {
// 值 // 值
value: [String, Object, Array], value: [String, Object, Array],
...@@ -81,7 +84,6 @@ export default { ...@@ -81,7 +84,6 @@ export default {
files: { files: {
handler: function (newVal, oldVal) { handler: function (newVal, oldVal) {
this.fileList = newVal; this.fileList = newVal;
}, },
immediate: true, immediate: true,
deep: true, deep: true,
...@@ -111,49 +113,59 @@ export default { ...@@ -111,49 +113,59 @@ export default {
this.fileList = JSON.parse(JSON.stringify(this.files)); this.fileList = JSON.parse(JSON.stringify(this.files));
}, },
methods: { methods: {
// 自定义上传实现,用于修改上传后的封面 httpRequest(file) {
uploadmany(file) { var formData = new FormData();
var formData = new FormData(); //这是由于接口数据类型规定,可以根据自己所需进行更改
formData.append("files", file.file); formData.append("files", file.file);
upload(formData).then((res) => { upload(formData).then((res) => {
if (res.code == 0) { if (res.code == 0) {
console.log(res); this.fileList = res.data;
var last = res.data.substring(res.data.lastIndexOf(".")); //将接口中返回的各文件链接进行截取,来判断属于什么格式文件 this.changeFileList(res.data)
if (last == ".pdf") {
this.fileList.push({
url: "https://img0.baidu.com/it/u=3644622474,3688361323&fm=26&fmt=auto&gp=0.jpg", //pdf封面图片
realUrl: res.data.result, //接口返回的pdf文件链接
});
} else if (
last == ".png" ||
last == ".jpg" ||
last == ".jpeg" ||
last == ".jfif"
) {
this.fileList.push({
url: res.data.result,
realurl: res.data.result,
});
} else if (last == ".doc" || last == ".docx") {
this.fileList.push({
url: "https://img1.baidu.com/it/u=1714136260,3766911961&fm=26&fmt=auto&gp=0.jpg",
realurl: res.data.result,
});
} else if (last == ".xls" || last == ".xlsx") {
this.fileList.push({
url: "https://img1.baidu.com/it/u=1123362811,2189997153&fm=26&fmt=auto&gp=0.jpg",
realurl: res.data.result,
});
}
} else {
this.$message({
message: res.data.message,
type: "error",
offset: 70,
});
} }
}); });
}, },
// // 自定义上传实现,用于修改上传后的封面
// uploadmany(file) {
// var formData = new FormData(); //这是由于接口数据类型规定,可以根据自己所需进行更改
// formData.append("files", file.file);
// upload(formData).then((res) => {
// if (res.code == 0) {
// console.log(res);
// var last = res.data.substring(res.data.lastIndexOf(".")); //将接口中返回的各文件链接进行截取,来判断属于什么格式文件
// if (last == ".pdf") {
// this.fileList.push({
// url: "https://img0.baidu.com/it/u=3644622474,3688361323&fm=26&fmt=auto&gp=0.jpg", //pdf封面图片
// realUrl: res.data.result, //接口返回的pdf文件链接
// });
// } else if (
// last == ".png" ||
// last == ".jpg" ||
// last == ".jpeg" ||
// last == ".jfif"
// ) {
// this.fileList.push({
// url: res.data.result,
// realurl: res.data.result,
// });
// } else if (last == ".doc" || last == ".docx") {
// this.fileList.push({
// url: "https://img1.baidu.com/it/u=1714136260,3766911961&fm=26&fmt=auto&gp=0.jpg",
// realurl: res.data.result,
// });
// } else if (last == ".xls" || last == ".xlsx") {
// this.fileList.push({
// url: "https://img1.baidu.com/it/u=1123362811,2189997153&fm=26&fmt=auto&gp=0.jpg",
// realurl: res.data.result,
// });
// }
// } else {
// this.$message({
// message: res.data.message,
// type: "error",
// offset: 70,
// });
// }
// });
// },
// 上传前校检格式和大小 // 上传前校检格式和大小
handleBeforeUpload(file) { handleBeforeUpload(file) {
...@@ -200,7 +212,6 @@ export default { ...@@ -200,7 +212,6 @@ export default {
console.log("res", res); console.log("res", res);
console.log("fileList", fileList); console.log("fileList", fileList);
this.$message.success("上传成功"); this.$message.success("上传成功");
this.$emit("endLoading");
this.changeFileList(fileList); this.changeFileList(fileList);
}, },
// 文件列表移除文件时的钩子 // 文件列表移除文件时的钩子
...@@ -216,16 +227,17 @@ export default { ...@@ -216,16 +227,17 @@ export default {
// 文件列表改变的时候,更新组件的v-model的文的数据 // 文件列表改变的时候,更新组件的v-model的文的数据
changeFileList(fileList) { changeFileList(fileList) {
console.log("fileList", fileList); // console.log("fileList", fileList);
const tempFileList = fileList.map((item) => { // const tempFileList = fileList.map((item) => {
let tempItem = { // let tempItem = {
name: item.name, // name: item.name,
url: item.response ? item.response.data[0].url : item.url, // url: item.response ? item.response.data[0].url : item.url,
}; // };
return tempItem; // return tempItem;
}); // });
this.$emit('input',tempFileList) debugger
this.$emit("handleFileReady", tempFileList); this.$emit("input", fileList);
// this.$emit("handleFileReady", tempFileList);
}, },
}, },
}; };
......
import { import {
getMuseumTreeV1, getMuseumTreeV1,getSysRegionTree
} from '@/api/museum' } from '@/api/org'
const getDefaultState = () => { const getDefaultState = () => {
return { return {
museumTree: [], museumTree: [],//博物馆树
regionTree:[],//行政区划树
} }
} }
...@@ -17,6 +18,9 @@ const mutations = { ...@@ -17,6 +18,9 @@ const mutations = {
SET_MUSEUM_TREE: (state, museumTree) => { SET_MUSEUM_TREE: (state, museumTree) => {
state.museumTree = museumTree state.museumTree = museumTree
}, },
SET_REGION_TREE:(state, regionTree)=>{
state.regionTree = regionTree
}
} }
const actions = { const actions = {
...@@ -36,7 +40,7 @@ const actions = { ...@@ -36,7 +40,7 @@ const actions = {
data data
} = response } = response
commit('SET_MUSEUM_TREE', data) commit('SET_MUSEUM_TREE', data)
resolve() resolve(data)
}).catch(error => { }).catch(error => {
reject(error) reject(error)
}) })
...@@ -44,7 +48,31 @@ const actions = { ...@@ -44,7 +48,31 @@ const actions = {
} }
}, },
getSysRegionTreeData({
commit
}, parentId) {
if (state.regionTree && state.regionTree.length > 0) {
return new Promise((resolve, reject) => {
resolve(state.regionTree)
})
} else {
return new Promise((resolve, reject) => {
getSysRegionTree({
parentId
}).then(response => {
const {
data
} = response
commit('SET_REGION_TREE', data)
resolve(data)
}).catch(error => {
reject(error)
})
})
}
},
} }
export default { export default {
......
...@@ -244,14 +244,14 @@ ...@@ -244,14 +244,14 @@
<script> <script>
import { getLiteratureList } from "@/api/literature"; import { getLiteratureList } from "@/api/literature";
import { addCulturalRelic, editCulturalRelic } from "@/api/culturalRelic"; import { addCulturalRelic, editCulturalRelic } from "@/api/culturalRelic";
import Uploader from "@/components/Uploader/index.vue"; import AutoUploader from "@/components/Uploader/AutoUploader.vue";
import ManualUploader from "@/components/Uploader/ManualUploader.vue"; import ManualUploader from "@/components/Uploader/ManualUploader.vue";
import { mapGetters } from "vuex"; import { mapGetters } from "vuex";
import { upload } from "@/utils/upload"; import { upload } from "@/utils/upload";
export default { export default {
name: "InfoEditDialog", name: "InfoEditDialog",
components: { components: {
Uploader, AutoUploader,
ManualUploader, ManualUploader,
}, },
props: { props: {
......
...@@ -25,22 +25,31 @@ ...@@ -25,22 +25,31 @@
style="width: 100%" style="width: 100%"
v-model="dialogForm.pid" v-model="dialogForm.pid"
:options="orgTreeData" :options="orgTreeData"
:props="{ expandTrigger: 'hover' }" :props="optionProps"
@change="handleChangeOrgTree" :show-all-levels="false"
placeholder="请选择所属部门" placeholder="请选择所属部门"
:key="pidModalKey"
> >
<template slot-scope="{ node, data }">
<span>{{ data.label }}</span>
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
</template>
</el-cascader> </el-cascader>
</el-form-item> </el-form-item>
<el-form-item label="所属地" :label-width="formLabelWidth"> <!-- <el-form-item label="所属地" :label-width="formLabelWidth">
<el-input <el-input
v-model="dialogForm.regionCode" v-model="dialogForm.regionCode"
autocomplete="off" autocomplete="off"
placeholder="请选择所属地" placeholder="请选择所属地"
></el-input> ></el-input>
</el-form-item> -->
<el-form-item label="所属地" :label-width="formLabelWidth">
<el-cascader
style="width: 100%"
v-model="dialogForm.regionCode"
:options="regionTree"
:props="regionOptionProps"
:show-all-levels="false"
placeholder="请选择所属地"
:key="regionCodeModalKey"
>
</el-cascader>
</el-form-item> </el-form-item>
<el-form-item label="经度" :label-width="formLabelWidth"> <el-form-item label="经度" :label-width="formLabelWidth">
...@@ -58,15 +67,17 @@ ...@@ -58,15 +67,17 @@
placeholder="请输入纬度" placeholder="请输入纬度"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="状态" :label-width="formLabelWidth">
<el-switch v-model="status"> </el-switch>
</el-form-item>
<el-form-item label="博物馆封面" :label-width="formLabelWidth"> <el-form-item label="博物馆封面" :label-width="formLabelWidth">
<Uploader <AutoUploader
v-model="dialogForm.faceImage" v-model="dialogForm.faceImage"
:fileLimit="1" :fileLimit="1"
:fileSize="50" :fileSize="50"
listType="picture-card" listType="picture-card"
:fileType="['png', 'jpeg', 'jpg']" :fileType="['png', 'jpeg', 'jpg']"
ref="faceImage" ref="museumFaceImage"
/> />
</el-form-item> </el-form-item>
<el-form-item label="简介" :label-width="formLabelWidth"> <el-form-item label="简介" :label-width="formLabelWidth">
...@@ -91,14 +102,13 @@ ...@@ -91,14 +102,13 @@
</template> </template>
<script> <script>
import { addMuseum, editMuseum } from "@/api/museum"; import { addMuseum, editMuseum } from "@/api/org";
import Uploader from "@/components/Uploader/index.vue"; import AutoUploader from "@/components/Uploader/AutoUploader.vue";
import { mapGetters, mapActions } from "vuex"; import { mapGetters } from "vuex";
import { upload } from "@/utils/upload";
export default { export default {
name: "InfoEditDialog", name: "InfoEditDialog",
components: { components: {
Uploader, AutoUploader,
}, },
props: { props: {
visible: { visible: {
...@@ -148,10 +158,31 @@ export default { ...@@ -148,10 +158,31 @@ export default {
form: { form: {
handler(value) { handler(value) {
this.dialogForm = { ...value }; this.dialogForm = { ...value };
if (this.dialogForm.id) {
this.status = Boolean(Number(this.dialogForm.status));
// this.pidModalKey++; //回显
// this.regionCodeModalKey++; //回显
}
}, },
immediate: true, immediate: true,
deep: true, deep: true,
}, },
orgTreeData(value) {
// 遍历,如果children为空,则直接去掉children,以免选择器中显示无结果
if (value) {
let tree = [...value];
loopTree(tree);
function loopTree(arr) {
arr.forEach((item) => {
if (item.children && item.children.length == 0) {
delete item.children;
} else {
loopTree(item.children);
}
});
}
}
},
}, },
data() { data() {
return { return {
...@@ -159,10 +190,42 @@ export default { ...@@ -159,10 +190,42 @@ export default {
...this.form, ...this.form,
}, },
formLabelWidth: "100px", formLabelWidth: "100px",
// orgTreeData: [], optionProps: {
value: "id",
label: "name",
children: "children",
// checkStrictly: true,
},
regionOptionProps: {
value: "regionId",
label: "name",
children: "children",
// checkStrictly: true,
},
regionTree: [],
status: false,
pidModalKey: 0,
regionCodeModalKey: 0,
}; };
}, },
mounted() {
let parentId = "";
this.$store.dispatch("org/getSysRegionTreeData", parentId).then((res) => {
this.regionTree = res;
loopTree(this.regionTree);
function loopTree(arr) {
if (arr && arr.length > 0) {
arr.forEach((item) => {
if (item.children && item.children.length == 0) {
delete item.children;
} else {
loopTree(item.children);
}
});
}
}
});
},
methods: { methods: {
handlePreview({ type, file }) { handlePreview({ type, file }) {
console.log(type, file); console.log(type, file);
...@@ -179,23 +242,33 @@ export default { ...@@ -179,23 +242,33 @@ export default {
async handleSubmit() { async handleSubmit() {
if (this.dialogForm.id) { if (this.dialogForm.id) {
} else { } else {
console.log(this.dialogForm); let params = { ...this.dialogForm };
const { faceImage } = this.dialogForm; const { faceImage } = params;
this.dialogForm.faceImage = faceImage.url; if (params.faceImage.length > 0) {
let res = await addMuseum(this.dialogForm); params = faceImage[0].fileId;
}
// 处理行政区划
params.regionCode = params.regionCode[params.regionCode.length - 1];
// 处理所属部门
params.pid = params.pid[params.pid.length - 1];
// 处理状态
params.status = params.status ? 1 : 0;
let res = await addMuseum(params);
if (res.code == 0) { if (res.code == 0) {
this.$message.success("添加成功!");
this.dialogForm = {}; this.dialogForm = {};
this.$emit("refresh"); this.$emit("refresh");
this.$emit("handleClose");
} }
} }
}, },
handleChangeOrgTree() {},
handleClose(done) { handleClose(done) {
this.$confirm("确认关闭?") this.$confirm("确认关闭?")
.then((_) => { .then((_) => {
done(); done();
this.$emit("handleClose"); this.$emit("handleClose");
this.dialogForm = {};
}) })
.catch((_) => {}); .catch((_) => {});
}, },
......
...@@ -78,7 +78,7 @@ import { ...@@ -78,7 +78,7 @@ import {
// getRCDetailById, // getRCDetailById,
// deleteCultralRelic, // deleteCultralRelic,
// editCulturalRelic, // editCulturalRelic,
} from "@/api/museum"; } from "@/api/org";
import InfoEditDialog from "./components/InfoEditDialog"; import InfoEditDialog from "./components/InfoEditDialog";
import SearchBar from "@/components/SearchBar"; import SearchBar from "@/components/SearchBar";
......
...@@ -2,12 +2,9 @@ ...@@ -2,12 +2,9 @@
<div class="app-container"> <div class="app-container">
<div class="top-bar"> <div class="top-bar">
<SearchBar :config="searchConfig" @search="search" @reset="reset" /> <SearchBar :config="searchConfig" @search="search" @reset="reset" />
<el-button <el-button type="primary" @click.native="handleOperation('add')">
type="primary"
@click.native="handleOperation({ type: 'add' })"
>
<i class="el-icon-s-promotion"></i> <i class="el-icon-s-promotion"></i>
发布</el-button 添加</el-button
> >
</div> </div>
...@@ -19,7 +16,6 @@ ...@@ -19,7 +16,6 @@
border border
stripe stripe
default-expand-all default-expand-all
> >
<el-table-column <el-table-column
align="center" align="center"
...@@ -31,7 +27,7 @@ ...@@ -31,7 +27,7 @@
prop="regionName" prop="regionName"
label="归属地" label="归属地"
></el-table-column> ></el-table-column>
<el-table-column align="center" prop="status" label="状态"> <!-- <el-table-column align="center" prop="status" label="状态">
<template slot-scope="scope"> <template slot-scope="scope">
<el-popconfirm <el-popconfirm
:title="getStatusTitle(scope.row.status)" :title="getStatusTitle(scope.row.status)"
...@@ -40,18 +36,28 @@ ...@@ -40,18 +36,28 @@
<el-switch slot="reference" :value="scope.row.status"></el-switch> <el-switch slot="reference" :value="scope.row.status"></el-switch>
</el-popconfirm> </el-popconfirm>
</template> </template>
</el-table-column> </el-table-column> -->
<el-table-column align="center" prop="longitude" label="经度"> <el-table-column align="center" prop="longitude" label="经度">
</el-table-column> </el-table-column>
<el-table-column align="center" prop="latitude" label="纬度"> <el-table-column align="center" prop="latitude" label="纬度">
</el-table-column> </el-table-column>
<el-table-column align="center" prop="latitude" label="纬度">
</el-table-column>
<el-table-column align="center" prop="intro" label="简介" /> <el-table-column align="center" prop="intro" label="简介" />
<el-table-column align="center" label="操作"> <el-table-column align="center" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="primary" size="mini" icon="el-icon-edit">编辑</el-button> <el-button
<el-button type="danger" size="mini" icon="el-icon-delete">删除</el-button> type="primary"
size="mini"
icon="el-icon-edit"
@click.native="handleOperation('edit', scope.row)"
>编辑</el-button
>
<el-button
type="danger"
size="mini"
icon="el-icon-delete"
@click.native="handleOperation('delete', scope.row)"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -69,12 +75,6 @@ ...@@ -69,12 +75,6 @@
import TablePage from "@/components/Table/TablePage.vue"; import TablePage from "@/components/Table/TablePage.vue";
import TableOperation from "@/components/Table/TableOperation.vue"; import TableOperation from "@/components/Table/TableOperation.vue";
import { title, operates, operations } from "./config"; import { title, operates, operations } from "./config";
import {
getMuseumList,
// getRCDetailById,
// deleteCultralRelic,
// editCulturalRelic,
} from "@/api/museum";
import InfoEditDialog from "./components/InfoEditDialog"; import InfoEditDialog from "./components/InfoEditDialog";
import SearchBar from "@/components/SearchBar"; import SearchBar from "@/components/SearchBar";
...@@ -98,21 +98,14 @@ export default { ...@@ -98,21 +98,14 @@ export default {
type: "input", type: "input",
label: "博物馆名称", label: "博物馆名称",
}, },
{ // {
prop: "status", // prop: "regionCode",
type: "select", // type: "select",
label: "状态", // label: "地区",
selectOptions: [ // selectOptions: [
{
label: "已上架", // ],
value: "1", // },
},
{
label: "已下架",
value: "0",
},
],
},
], ],
drawerVisible: false, drawerVisible: false,
isAdd: true, isAdd: true,
...@@ -127,6 +120,7 @@ export default { ...@@ -127,6 +120,7 @@ export default {
}, },
loading: false, loading: false,
orgTreeData: [], orgTreeData: [],
expandRow: [],
}; };
}, },
watch: { watch: {
...@@ -135,9 +129,10 @@ export default { ...@@ -135,9 +129,10 @@ export default {
this.dict = value; this.dict = value;
} }
}, },
// orgTreeData(value) { orgTreeData(value) {
// console.log("123", value); console.log("123", value);
// }, // setTimeout(()=>{value},500)
},
}, },
computed: { computed: {
tableTitle() { tableTitle() {
...@@ -164,18 +159,54 @@ export default { ...@@ -164,18 +159,54 @@ export default {
}, },
methods: { methods: {
async search(form) { async search(form) {
var params = { if (form.name) {
page: this.list.current, let searchValue = form.name;
limit: this.list.size, let treeData = this.orgTreeData;
...form, let handleTreeData = this.handleTreeData(treeData, searchValue);
}; // debugger;
if (params.status == "") { this.setExpandRow(handleTreeData);
delete params.status; this.expandRow = this.expandRow.join(",").split(",");
this.orgTreeData = handleTreeData;
} }
console.log("params", params); },
let res = await getMuseumList(params);
if (res.code == 0) { // 树形表格过滤
this.list = res.data; handleTreeData(treeData, searchValue) {
// debugger
if (!treeData || treeData.length === 0) {
return [];
}
const array = [];
for (let i = 0; i < treeData.length; i += 1) {
let match = false;
for (let pro in treeData[i]) {
if (typeof treeData[i][pro] == "string") {
match |= treeData[i][pro].includes(searchValue);
if (match) break;
}
}
if (
this.handleTreeData(treeData[i].children, searchValue).length > 0 ||
match
) {
array.push({
...treeData[i],
children: this.handleTreeData(treeData[i].children, searchValue),
});
}
}
return array;
},
setExpandRow(handleTreeData) {
if (handleTreeData.length) {
for (let i of handleTreeData) {
// debugger
this.expandRow.push(i.id);
if (i.children.length) {
this.setExpandRow(i.children);
}
}
} }
}, },
...@@ -186,31 +217,31 @@ export default { ...@@ -186,31 +217,31 @@ export default {
// 加载表格数据 // 加载表格数据
loadData() { loadData() {
this.$store.dispatch("org/getMuseumTreeData", "").then((res) => { this.$store.dispatch("org/getMuseumTreeData", "").then((res) => {
this.orgTreeData =res this.orgTreeData = res;
}); });
}, },
async handleOperation(value, row) { async handleOperation(type, row) {
console.log("handleOperation", value, row); console.log("handleOperation", type, row);
switch (value.type) { switch (type) {
case "add": case "add":
this.drawerVisible = true; this.drawerVisible = true;
break; break;
case "view": case "view":
break; break;
case "edit": case "edit":
let detailRes = await getRCDetailById({ crId: row.crId }); // let detailRes = await getRCDetailById({ crId: row.crId });
if (detailRes.code == 0) { // if (detailRes.code == 0) {
this.form = detailRes.data; // }
this.drawerVisible = true; this.form = row;
} this.drawerVisible = true;
break; break;
case "delete": case "delete":
let deleteRes = await deleteCultralRelic([row.crId]); // let deleteRes = await deleteCultralRelic([row.crId]);
if (deleteRes.code == 0) { // if (deleteRes.code == 0) {
this.$message.success("删除成功!"); // this.$message.success("删除成功!");
this.loadData(); // this.loadData();
} // }
break; break;
} }
}, },
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论