|
@@ -0,0 +1,408 @@
|
|
|
|
+<template>
|
|
|
|
+ <div id="configManage">
|
|
|
|
+ <div class="functionBtn">
|
|
|
|
+ <el-select
|
|
|
|
+ v-show="proxyType!='INTEGRATION'"
|
|
|
|
+ v-model="dataType"
|
|
|
|
+ placeholder="请选择类型"
|
|
|
|
+ style="margin-right: 12px"
|
|
|
|
+ default-first-option
|
|
|
|
+ >
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="(item, index) in selectOptions"
|
|
|
|
+ :key="index"
|
|
|
|
+ :label="item.label"
|
|
|
|
+ :value="item.value"
|
|
|
|
+ ></el-option>
|
|
|
|
+ </el-select>
|
|
|
|
+ <el-button
|
|
|
|
+ type="primary"
|
|
|
|
+ round
|
|
|
|
+ @click="handleDetailVisible('Add')"
|
|
|
|
+ >新增配置</el-button>
|
|
|
|
+ <el-button
|
|
|
|
+ v-show="proxyType!='INTEGRATION'"
|
|
|
|
+ round
|
|
|
|
+ @click="viewAllModel"
|
|
|
|
+ >全部预览</el-button>
|
|
|
|
+ <el-tooltip
|
|
|
|
+ content="刷新"
|
|
|
|
+ placement="right"
|
|
|
|
+ >
|
|
|
|
+ <el-button
|
|
|
|
+ circle
|
|
|
|
+ @click="refresh"
|
|
|
|
+ ><el-icon><IconPark-refresh /></el-icon></el-button>
|
|
|
|
+ </el-tooltip>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="tableContent">
|
|
|
|
+ <el-table
|
|
|
|
+ ref="table"
|
|
|
|
+ :data="tableData"
|
|
|
|
+ :max-height="maxHeight"
|
|
|
|
+ v-loading="loading"
|
|
|
|
+ @current-change="(row)=>{this.currRow=row}"
|
|
|
|
+ border
|
|
|
|
+ stripe
|
|
|
|
+ >
|
|
|
|
+ <el-table-column
|
|
|
|
+ prop="id"
|
|
|
|
+ label="ID"
|
|
|
|
+ width="60"
|
|
|
|
+ align="center"
|
|
|
|
+ />
|
|
|
|
+ <el-table-column
|
|
|
|
+ prop="key"
|
|
|
|
+ label="标题"
|
|
|
|
+ min-width="100"
|
|
|
|
+ >
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <span style="font-weight: bold;font-family: JetBrainsMono-Regular,serif">{{scope.row.key}}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column
|
|
|
|
+ prop="content"
|
|
|
|
+ label="描述"
|
|
|
|
+ min-width="120"
|
|
|
|
+ />
|
|
|
|
+ <el-table-column
|
|
|
|
+ prop="proxyUrl"
|
|
|
|
+ label="链接"
|
|
|
|
+ min-width="180"
|
|
|
|
+ >
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <span style="font-family: JetBrainsMono-Regular,serif">{{ scope.row.proxyUrl}}</span>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ <el-table-column
|
|
|
|
+ prop="operation"
|
|
|
|
+ label="操作"
|
|
|
|
+ min-width="120"
|
|
|
|
+ >
|
|
|
|
+ <template #default="scope">
|
|
|
|
+ <el-button
|
|
|
|
+ type="primary"
|
|
|
|
+ size="small"
|
|
|
|
+ @click="handleDetailVisible('Edit', scope.row)"
|
|
|
|
+ >
|
|
|
|
+ <el-icon><IconPark-edit /></el-icon>
|
|
|
|
+ 修改
|
|
|
|
+ </el-button>
|
|
|
|
+ <el-button
|
|
|
|
+ size="small"
|
|
|
|
+ @click="deleteConfig(scope.row)"
|
|
|
|
+ >
|
|
|
|
+ <el-icon><IconPark-delete /></el-icon>
|
|
|
|
+ 删除
|
|
|
|
+ </el-button>
|
|
|
|
+ <el-button
|
|
|
|
+ v-show="proxyType!='INTEGRATION'"
|
|
|
|
+ size="small"
|
|
|
|
+ @click="view(scope.row)"
|
|
|
|
+ >
|
|
|
|
+ <el-icon><IconPark-preview-open /></el-icon>
|
|
|
|
+ 预览
|
|
|
|
+ </el-button>
|
|
|
|
+ </template>
|
|
|
|
+ </el-table-column>
|
|
|
|
+ </el-table>
|
|
|
|
+ <div class="pagination">
|
|
|
|
+ <el-pagination
|
|
|
|
+ background
|
|
|
|
+ layout="sizes, prev, pager, next, jumper, ->, total"
|
|
|
|
+ v-model:current-page="pageInfo.page"
|
|
|
|
+ v-model:page-size="pageInfo.pageSize"
|
|
|
|
+ :total="pageInfo.total"
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <ConfigDetail
|
|
|
|
+ v-model:show="detailVisible"
|
|
|
|
+ :operation="detailOperation"
|
|
|
|
+ :item="currRow"
|
|
|
|
+ :is-edit="detailIsEdit"
|
|
|
|
+ :select-options="selectOptions"
|
|
|
|
+ :proxy-type="proxyType"
|
|
|
|
+ :data-type="dataType"
|
|
|
|
+ :refresh="getData"
|
|
|
|
+ >
|
|
|
|
+ </ConfigDetail>
|
|
|
|
+
|
|
|
|
+ <CesiumMap
|
|
|
|
+ v-if="isMapShow"
|
|
|
|
+ :is-show="isMapShow"
|
|
|
|
+ :type="mapType"
|
|
|
|
+ :close="closeMap"
|
|
|
|
+ :item="mapItem"
|
|
|
|
+ >
|
|
|
|
+ </CesiumMap>
|
|
|
|
+
|
|
|
|
+ <AllCesiumMap
|
|
|
|
+ v-if="isAllMapShow"
|
|
|
|
+ :is-show="isAllMapShow"
|
|
|
|
+ :type="allMapType"
|
|
|
|
+ :close="closeMap"
|
|
|
|
+ :item="tableData"
|
|
|
|
+ >
|
|
|
|
+ </AllCesiumMap>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+import ConfigDetail from "./dialog/ConfigDetail.vue";
|
|
|
|
+import CesiumMap from "./dialog/CesiumMap.vue";
|
|
|
|
+import AllCesiumMap from "./dialog/AllCesiumMap.vue";
|
|
|
|
+
|
|
|
|
+import api from "@/api/data/publish"
|
|
|
|
+
|
|
|
|
+export default {
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ maxHeight: 450,
|
|
|
|
+ loading: false,
|
|
|
|
+ configData: [],
|
|
|
|
+ tableData: [],
|
|
|
|
+ currRow: {},
|
|
|
|
+ pageInfo: {
|
|
|
|
+ page: 1,
|
|
|
|
+ pageSize: 10,
|
|
|
|
+ total: 0,
|
|
|
|
+ },
|
|
|
|
+ proxyType: "",
|
|
|
|
+ dataType: "",
|
|
|
|
+ selectOptions: [],
|
|
|
|
+ dataTypes: {
|
|
|
|
+ 99: {
|
|
|
|
+ label: "数据",
|
|
|
|
+ value: "UNKNOWN",
|
|
|
|
+ },
|
|
|
|
+ 0: {
|
|
|
|
+ label: "全部",
|
|
|
|
+ value: "ALL",
|
|
|
|
+ },
|
|
|
|
+ 1: {
|
|
|
|
+ label: "地图",
|
|
|
|
+ value: "MAP",
|
|
|
|
+ },
|
|
|
|
+ 2: {
|
|
|
|
+ label: "三维模型",
|
|
|
|
+ value: "MODEL",
|
|
|
|
+ },
|
|
|
|
+ 3: {
|
|
|
|
+ label: "GLTF模型",
|
|
|
|
+ value: "GLTF",
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ routerParam: {
|
|
|
|
+ publish_twoD: {
|
|
|
|
+ proxyType: "PUBLISH",
|
|
|
|
+ dataTypes: [1],
|
|
|
|
+ },
|
|
|
|
+ publish_threeD: {
|
|
|
|
+ proxyType: "PUBLISH",
|
|
|
|
+ dataTypes: [2, 3],
|
|
|
|
+ },
|
|
|
|
+ integration_data: {
|
|
|
|
+ proxyType: "INTEGRATION",
|
|
|
|
+ dataTypes: [99],
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ mapTypes: {
|
|
|
|
+ MODEL: 1,
|
|
|
|
+ GLTF: 2,
|
|
|
|
+ MAP: 4,
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ detailVisible: false,
|
|
|
|
+ detailOperation: "",
|
|
|
|
+ detailIsEdit: false,
|
|
|
|
+
|
|
|
|
+ isMapShow: false,
|
|
|
|
+ mapType: 0,
|
|
|
|
+ mapItem: {},
|
|
|
|
+
|
|
|
|
+ allMapType: -1,
|
|
|
|
+ isAllMapShow: false,
|
|
|
|
+ };
|
|
|
|
+ },
|
|
|
|
+ watch: {
|
|
|
|
+ "pageInfo.page": function () {
|
|
|
|
+ this.renderTable();
|
|
|
|
+ },
|
|
|
|
+ "pageInfo.pageSize": function () {
|
|
|
|
+ this.renderTable();
|
|
|
|
+ },
|
|
|
|
+ dataType: function () {
|
|
|
|
+ this.refresh();
|
|
|
|
+ },
|
|
|
|
+ "$route.name": function (val) {
|
|
|
|
+ if (val) {
|
|
|
|
+ this.initType();
|
|
|
|
+ this.refresh();
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ components: {
|
|
|
|
+ ConfigDetail,
|
|
|
|
+ CesiumMap,
|
|
|
|
+ AllCesiumMap,
|
|
|
|
+ },
|
|
|
|
+ created() {
|
|
|
|
+ this.initType();
|
|
|
|
+ },
|
|
|
|
+ mounted() {
|
|
|
|
+ let container = document.getElementById("configManage");
|
|
|
|
+ this.maxHeight = container.clientHeight * 0.85;
|
|
|
|
+ this.getData();
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ initType() {
|
|
|
|
+ // let obj = this.routerParam[this.$route.name];
|
|
|
|
+ let obj = this.routerParam["publish_twoD"];
|
|
|
|
+ if (!obj) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ this.proxyType = obj.proxyType;
|
|
|
|
+ this.dataType = "";
|
|
|
|
+ this.selectOptions = [];
|
|
|
|
+ //this.selectOptions.push(this.dataTypes[0])
|
|
|
|
+ for (let index of obj.dataTypes) {
|
|
|
|
+ this.selectOptions.push(this.dataTypes[index]);
|
|
|
|
+ }
|
|
|
|
+ if (this.selectOptions.length > 0) {
|
|
|
|
+ this.dataType = this.selectOptions[0].value;
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ refresh() {
|
|
|
|
+ this.pageInfo.page = 1;
|
|
|
|
+ this.pageInfo.pageSize = 10;
|
|
|
|
+ this.pageInfo.total = 0;
|
|
|
|
+ this.getData();
|
|
|
|
+ },
|
|
|
|
+ getData() {
|
|
|
|
+ if (!this.dataType || this.dataType == "") {
|
|
|
|
+ this.configData = [];
|
|
|
|
+ this.tableData = [];
|
|
|
|
+ this.pageInfo.total = 0;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ let that = this;
|
|
|
|
+ that.loading = true;
|
|
|
|
+
|
|
|
|
+ let params = {
|
|
|
|
+ proxyType: this.proxyType,
|
|
|
|
+ dataType: this.dataType,
|
|
|
|
+ };
|
|
|
|
+ api.getList(params)
|
|
|
|
+ .then((res) => {
|
|
|
|
+ that.configData = [];
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
+ let num = 0;
|
|
|
|
+ that.configData = [];
|
|
|
|
+ that.pageInfo.total = 0;
|
|
|
|
+ if (res.content) {
|
|
|
|
+ that.configData = JSON.parse(JSON.stringify(res.content));
|
|
|
|
+ that.configData.forEach((i) => {
|
|
|
|
+ i.id = num++;
|
|
|
|
+ i.proxyUrl = systemConfig.proxyUrl.replace("{PROXYURL}", i.key);
|
|
|
|
+ });
|
|
|
|
+ that.pageInfo.total = that.configData.length;
|
|
|
|
+ }
|
|
|
|
+ this.renderTable();
|
|
|
|
+ }
|
|
|
|
+ that.loading = false;
|
|
|
|
+ })
|
|
|
|
+ .catch((err) => {
|
|
|
|
+ that.loading = false;
|
|
|
|
+ that.$message({ message: err.message, type: "error" });
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ renderTable() {
|
|
|
|
+ let start = (this.pageInfo.page - 1) * this.pageInfo.pageSize;
|
|
|
|
+ let end = this.pageInfo.page * this.pageInfo.pageSize;
|
|
|
|
+ this.tableData = this.configData.slice(start, end);
|
|
|
|
+ },
|
|
|
|
+ handleDetailVisible(operation, item) {
|
|
|
|
+ this.detailOperation = operation;
|
|
|
|
+ this.detailVisible = true;
|
|
|
|
+ this.detailIsEdit = true;
|
|
|
|
+ if (operation === "Add") {
|
|
|
|
+ this.currRow = { title: "", url: "" };
|
|
|
|
+ this.detailIsEdit = false;
|
|
|
|
+ } else {
|
|
|
|
+ this.currRow = JSON.parse(JSON.stringify(item));
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ viewAllModel() {
|
|
|
|
+ let type = this.mapTypes[this.dataType];
|
|
|
|
+ if (type) {
|
|
|
|
+ this.allMapType = type;
|
|
|
|
+ this.isAllMapShow = true;
|
|
|
|
+ } else {
|
|
|
|
+ this.$message.error("该类型暂不支持预览");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ view(item) {
|
|
|
|
+ // 0-GeoJson、1-3DTiles、2-gltf/glb、3-水面、4-地图
|
|
|
|
+ this.mapItem = JSON.parse(JSON.stringify(item));
|
|
|
|
+ let type = this.mapTypes[this.dataType];
|
|
|
|
+ if (type) {
|
|
|
|
+ this.mapType = type;
|
|
|
|
+ this.isMapShow = true;
|
|
|
|
+ } else {
|
|
|
|
+ this.$message.error("该类型暂不支持预览");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ closeMap() {
|
|
|
|
+ this.isMapShow = false;
|
|
|
|
+ this.isAllMapShow = false;
|
|
|
|
+ },
|
|
|
|
+ deleteConfig(item) {
|
|
|
|
+ let that = this;
|
|
|
|
+ this.$msgbox.confirm("确定要删除:" + item.key + "吗?").then(() => {
|
|
|
|
+ let params = {
|
|
|
|
+ proxyType: this.proxyType,
|
|
|
|
+ dataType: this.dataType,
|
|
|
|
+ index: item.id,
|
|
|
|
+ };
|
|
|
|
+ api
|
|
|
|
+ .delItem(params)
|
|
|
|
+ .then((res) => {
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
+ that.$message({ message: "删除成功", type: "success" });
|
|
|
|
+ that.getData();
|
|
|
|
+ } else {
|
|
|
|
+ that.$message({ message: res.content, type: "error" });
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ .catch((err) => {
|
|
|
|
+ that.$message({ message: err.message, type: "error" });
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style lang="less" scoped>
|
|
|
|
+#configManage {
|
|
|
|
+ width: 98%;
|
|
|
|
+ height: 100%;
|
|
|
|
+ margin-left: 20px;
|
|
|
|
+
|
|
|
|
+ .tableContent {
|
|
|
|
+ margin-top: 1%;
|
|
|
|
+ .pagination {
|
|
|
|
+ margin-top: 1%;
|
|
|
|
+ position: relative;
|
|
|
|
+ float: right;
|
|
|
|
+ padding-bottom: 5%;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+</style>
|