Browse Source

Merge branch 'release-sy-v1.0.0' of ssh://gitlab.datameta.com:2224/project/water/shuili-vue into release-sy-v1.0.0

sy-water-data-board-ui
panyuyi 4 months ago
parent
commit
facadb8137
  1. 105
      src/api/aiSupervision/layerConfigApi.js
  2. 184
      src/views/aiSupervision/layerManage/resource/LayerDetails.vue
  3. 118
      vue.config.js

105
src/api/aiSupervision/layerConfigApi.js

@ -1,24 +1,24 @@
import request from '@/utils/request.js'; import request from "@/utils/request.js";
import axios from 'axios'; import axios from "axios";
export function addOrEditDirectoryApi(options) { export function addOrEditDirectoryApi(options) {
return request({ return request({
url: `/map/layerDir/saveDir`, url: `/map/layerDir/saveDir`,
method: 'post', method: "post",
params: { params: {
id: options.id || '', id: options.id || "",
name: options.name, name: options.name,
orderNm: -1, orderNm: -1,
parentId: 'root' parentId: "root",
} },
}); });
} }
export function getDirectoryApi(data) { export function getDirectoryApi(data) {
return request({ return request({
url: `/map/layerDir/getAllTreeDir`, url: `/map/layerDir/getAllTreeDir`,
method: 'post', method: "post",
data data,
}); });
} }
// 通过id查找 单个图层目录 // 通过id查找 单个图层目录
@ -28,43 +28,43 @@ export function getDirectoryByIdApi(id) {
pageSize: 1, pageSize: 1,
ids: null, ids: null,
data: { data: {
id id,
}, },
params: { params: {
orderBy: 'pub_date', orderBy: "pub_date",
sortBy: 'asc' sortBy: "asc",
} },
}; };
return request({ return request({
url: `/map/layerDir/getAllTreeDir`, url: `/map/layerDir/getAllTreeDir`,
method: 'post', method: "post",
data data,
}); });
} }
export function deleteDirectoryApi(id) { export function deleteDirectoryApi(id) {
return request({ return request({
url: `/map/layerDir/deleteDir`, url: `/map/layerDir/deleteDir`,
method: 'delete', method: "delete",
params: { params: {
dirId: id dirId: id,
} },
}); });
} }
export function getStyleListApi(data) { export function getStyleListApi(data) {
return request({ return request({
url: `/map/layer/style/layerStylePage`, url: `/map/layer/style/layerStylePage`,
method: 'post', method: "post",
data data,
}); });
} }
export function getSceneList(data) { export function getSceneList(data) {
return request({ return request({
url: `/map/scene/sceneList`, url: `/map/scene/sceneList`,
method: 'post', method: "post",
data data,
}); });
} }
@ -72,11 +72,11 @@ export function getSceneList(data) {
export function saveOrUpdateLayerApi(paramInfo) { export function saveOrUpdateLayerApi(paramInfo) {
return request({ return request({
url: `/map/layer/saveOrUpdateLayer`, url: `/map/layer/saveOrUpdateLayer`,
method: 'post', method: "post",
headers: { headers: {
'Content-Type': 'application/json' "Content-Type": "application/json",
}, },
data: paramInfo data: paramInfo,
}); });
} }
@ -84,30 +84,30 @@ export function saveOrUpdateLayerApi(paramInfo) {
export function getLayerListApi(data) { export function getLayerListApi(data) {
return request({ return request({
url: `/map/layer/getLayers`, url: `/map/layer/getLayers`,
method: 'post', method: "post",
data data,
}); });
} }
export function saveOrUpdateScene(data) { export function saveOrUpdateScene(data) {
return request({ return request({
url: `/map/scene/saveOrUpdateScene`, url: `/map/scene/saveOrUpdateScene`,
method: 'post', method: "post",
data data,
}); });
} }
export function getSceneDetail(id) { export function getSceneDetail(id) {
return request({ return request({
url: `/map/scene/findSceneById/${id}`, url: `/map/scene/findSceneById/${id}`,
method: 'get' method: "get",
}); });
} }
export function getLayerTreeBySceneId(sceneId) { export function getLayerTreeBySceneId(sceneId) {
return request({ return request({
url: `/map/scene/getLayerTree/${sceneId}`, url: `/map/scene/getLayerTree/${sceneId}`,
method: 'get' method: "get",
}); });
} }
@ -115,7 +115,7 @@ export function getLayerTreeBySceneId(sceneId) {
export function getLayerDirsBySceneId(sceneId) { export function getLayerDirsBySceneId(sceneId) {
return request({ return request({
url: `/map/scene/getRelationSceneInfo/${sceneId}`, url: `/map/scene/getRelationSceneInfo/${sceneId}`,
method: 'get' method: "get",
}); });
} }
@ -123,10 +123,10 @@ export function getLayerDirsBySceneId(sceneId) {
export function updateSceneLayerDirs(data) { export function updateSceneLayerDirs(data) {
return request({ return request({
url: `/map/scene/dir/saveSceneDirRelation`, url: `/map/scene/dir/saveSceneDirRelation`,
method: 'post', method: "post",
params: { params: {
...data ...data,
} },
}); });
} }
@ -134,7 +134,7 @@ export function updateSceneLayerDirs(data) {
export function getSceneConfig(sceneId) { export function getSceneConfig(sceneId) {
return request({ return request({
url: `/map/scene/config/findConfigBySceneId/${sceneId}`, url: `/map/scene/config/findConfigBySceneId/${sceneId}`,
method: 'get' method: "get",
}); });
} }
@ -142,8 +142,8 @@ export function getSceneConfig(sceneId) {
export function updateSceneConfig(data) { export function updateSceneConfig(data) {
return request({ return request({
url: `/map/scene/config/saveOrUpdateConfig`, url: `/map/scene/config/saveOrUpdateConfig`,
method: 'post', method: "post",
data data,
}); });
} }
@ -151,28 +151,28 @@ export function updateSceneConfig(data) {
export function deleteLayerApi(id) { export function deleteLayerApi(id) {
return request({ return request({
url: `/map/layer/deleteLayer/${id}`, url: `/map/layer/deleteLayer/${id}`,
method: 'delete' method: "delete",
}); });
} }
export function deleteSceneById(id) { export function deleteSceneById(id) {
return request({ return request({
url: `/map/scene/deleteScene/${id}`, url: `/map/scene/deleteScene/${id}`,
method: 'delete' method: "delete",
}); });
} }
export function getLayerStyle(id) { export function getLayerStyle(id) {
return request({ return request({
url: `map/layer/style/${id}`, url: `map/layer/style/${id}`,
method: 'get' method: "get",
}); });
} }
// 获取图层详情 // 获取图层详情
export function queryServiceInfoApi(url, layer) { export function queryServiceInfoApi(url, layer) {
switch (layer.type) { switch (layer.type) {
case '021102': { case "021102": {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const result = await axios.get(`${url}.json`); const result = await axios.get(`${url}.json`);
if (result.status === 200 && result.data) { if (result.status === 200 && result.data) {
@ -184,43 +184,44 @@ export function queryServiceInfoApi(url, layer) {
} }
}); });
} }
case '081100': case "081100":
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const name = layer.name; const name = layer.name;
const nameArr = name.split(':'); const nameArr = name.split(":");
const splitUrl = url?.split('map-')[0]; const splitUrl = url?.split("/rest/")[0];
const newUrl = `${splitUrl}data-supermap_shuili/rest/data/datasources/shuili/datasets/${nameArr[1]}/fields.json`; const token = layer.token;
const newUrl = `${splitUrl.replace("/map-", "/data-")}/rest/data/datasources/${nameArr[0]}/datasets/${nameArr[1]}/fields.json?k=${token}`;
const result = await axios.get(newUrl); const result = await axios.get(newUrl);
if (result.status === 200 && result.data) { if (result.status === 200 && result.data) {
const fields = result.data.fieldNames.map((item) => { const fields = result.data.fieldNames.map((item) => {
return { return {
name: item, name: item,
alias: item, alias: item,
type: '-' type: "-",
}; };
}); });
resolve({ fields }); resolve({ fields });
} }
}); });
case '030300': case "030300":
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const result = await axios.get( const result = await axios.get(
`${url}?service=wfs&version=2.0.0&request=DescribeFeatureType&typeNames=${layer.index}` `${url}?service=wfs&version=2.0.0&request=DescribeFeatureType&typeNames=${layer.index}`,
); );
if (result.status === 200 && result.data) { if (result.status === 200 && result.data) {
const xmlDom = new window.DOMParser().parseFromString(result.data, 'text/xml'); const xmlDom = new window.DOMParser().parseFromString(result.data, "text/xml");
const elements = xmlDom.getElementsByTagName('xs:element'); const elements = xmlDom.getElementsByTagName("xs:element");
let fields = []; let fields = [];
for (let i = 0; i < elements.length; i++) { for (let i = 0; i < elements.length; i++) {
const item = elements[i]; const item = elements[i];
const nillable = item.attributes?.nillable; const nillable = item.attributes?.nillable;
if (nillable) { if (nillable) {
const name = item.attributes.name.value; const name = item.attributes.name.value;
const type = item.attributes.type.value.split(':')?.[1]; const type = item.attributes.type.value.split(":")?.[1];
fields.push({ fields.push({
name, name,
alias: name, alias: name,
type type,
}); });
} }
} }

184
src/views/aiSupervision/layerManage/resource/LayerDetails.vue

@ -24,8 +24,12 @@
<el-form :model="editDataInfoForm"> <el-form :model="editDataInfoForm">
<el-form-item label="服务类型" style="font-size: 1rem" :label-width="'120px'"> <el-form-item label="服务类型" style="font-size: 1rem" :label-width="'120px'">
<el-select style="width: 80%" v-model="editDataInfoForm.serviceType" placeholder="请选择"> <el-select style="width: 80%" v-model="editDataInfoForm.serviceType" placeholder="请选择">
<el-option v-for="item in serviceTypeOptions" :key="item.value" :label="item.label" <el-option
:value="item.value" /> v-for="item in serviceTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -41,29 +45,49 @@
<el-form-item label="服务token" prop="serviceToken" style="font-size: 1rem" :label-width="'120px'"> <el-form-item label="服务token" prop="serviceToken" style="font-size: 1rem" :label-width="'120px'">
<el-input v-model.trim="editDataInfoForm.serviceToken" style="width: 80%"></el-input> <el-input v-model.trim="editDataInfoForm.serviceToken" style="width: 80%"></el-input>
</el-form-item> </el-form-item>
<el-form-item v-if="editDataInfoForm.serviceType === '030300'" label="服务索引" prop="serviceIndex" <el-form-item
style="font-size: 1rem" :label-width="'120px'"> v-if="editDataInfoForm.serviceType === '030300'"
label="服务索引"
prop="serviceIndex"
style="font-size: 1rem"
:label-width="'120px'"
>
<el-input v-model="editDataInfoForm.serviceIndex" style="width: 80%"></el-input> <el-input v-model="editDataInfoForm.serviceIndex" style="width: 80%"></el-input>
</el-form-item> </el-form-item>
<el-form-item v-show="['030300'].includes(editDataInfoForm.serviceType)" label="样式选择" <el-form-item
style="font-size: 1rem" :label-width="'120px'"> v-show="['030300'].includes(editDataInfoForm.serviceType)"
label="样式选择"
style="font-size: 1rem"
:label-width="'120px'"
>
<div class="styleBtn"> <div class="styleBtn">
<el-tag type="info" effect="plain" class="style-button" :class="{ <el-tag
'style-button-none': editDataInfoForm.relationStyleName, type="info"
}" @click="handleLayerStyleTypeChange"> effect="plain"
{{ class="style-button"
editDataInfoForm.relationStyleName :class="{
? editDataInfoForm.relationStyleName 'style-button-none': editDataInfoForm.relationStyleName,
: "点击选择样式" }"
}} @click="handleLayerStyleTypeChange"
>
{{ editDataInfoForm.relationStyleName ? editDataInfoForm.relationStyleName : "点击选择样式" }}
</el-tag> </el-tag>
<el-button style="margin-left: 15px" :disabled="editDataInfoForm.relationStyleName === ''" @click=" <el-button
editDataInfoForm.relationStyleName = ''; style="margin-left: 15px"
editDataInfoForm.relationStyleId = ''; :disabled="editDataInfoForm.relationStyleName === ''"
">取消选择样式</el-button> @click="
editDataInfoForm.relationStyleName = '';
editDataInfoForm.relationStyleId = '';
"
>取消选择样式</el-button
>
</div> </div>
<styleListDialogVue :visible="styleDialogVisible" :$currentStyleId="editDataInfoForm.relationStyleId" <styleListDialogVue
@closeDialog="styleDialogVisible = false" @confirm="handleConfirm"></styleListDialogVue> :visible="styleDialogVisible"
:$currentStyleId="editDataInfoForm.relationStyleId"
@closeDialog="styleDialogVisible = false"
@confirm="handleConfirm"
></styleListDialogVue>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
@ -91,14 +115,38 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" width="200"> <el-table-column label="操作" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="scope.row.isEdit" type="primary" icon="el-icon-success" size="mini" <el-button
@click="saveRow(scope.$index)">保存</el-button> v-if="scope.row.isEdit"
<el-button v-if="scope.row.isEdit" type="warning" icon="el-icon-error" size="mini" type="primary"
@click="cancelRow(scope.$index)">取消</el-button> icon="el-icon-success"
<el-button v-if="!scope.row.isEdit" type="primary" icon="el-icon-edit" size="mini" size="mini"
@click="editRow(scope.$index)">编辑</el-button> @click="saveRow(scope.$index)"
<el-button v-if="!scope.row.isEdit" type="danger" icon="el-icon-delete-solid" size="mini" >保存</el-button
@click="deleteRow(scope.$index)">删除</el-button> >
<el-button
v-if="scope.row.isEdit"
type="warning"
icon="el-icon-error"
size="mini"
@click="cancelRow(scope.$index)"
>取消</el-button
>
<el-button
v-if="!scope.row.isEdit"
type="primary"
icon="el-icon-edit"
size="mini"
@click="editRow(scope.$index)"
>编辑</el-button
>
<el-button
v-if="!scope.row.isEdit"
type="danger"
icon="el-icon-delete-solid"
size="mini"
@click="deleteRow(scope.$index)"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -113,15 +161,13 @@
</div> </div>
<el-table max-height="400px" :data="fieldsTable" border> <el-table max-height="400px" :data="fieldsTable" border>
<el-table-column type="index" width="50" align="center"></el-table-column> <el-table-column type="index" width="50" align="center"></el-table-column>
<el-table-column prop="field" label="字段名称"> <el-table-column prop="field" label="字段名称"> </el-table-column>
</el-table-column>
<el-table-column prop="fieldName" label="字段别名"> <el-table-column prop="fieldName" label="字段别名">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input v-model="scope.row.fieldName"></el-input> <el-input v-model="scope.row.fieldName"></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="fieldType" label="字段类型"> <el-table-column prop="fieldType" label="字段类型"> </el-table-column>
</el-table-column>
<el-table-column prop="isShow" label="支持查询" width="80" align="center"> <el-table-column prop="isShow" label="支持查询" width="80" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-checkbox v-model="scope.row.isShow" :true-label="1" :false-label="0"></el-checkbox> <el-checkbox v-model="scope.row.isShow" :true-label="1" :false-label="0"></el-checkbox>
@ -137,20 +183,21 @@
</div> </div>
</el-dialog> </el-dialog>
<div class="keyword-filter"> <div class="keyword-filter">
<el-input class="keyword-input" placeholder="请输入内容" v-model="keyword" clearable> <el-input class="keyword-input" placeholder="请输入内容" v-model="keyword" clearable> </el-input>
</el-input>
<el-button class="search-btn">搜索</el-button> <el-button class="search-btn">搜索</el-button>
</div> </div>
</div> </div>
<div class="content"> <div class="content">
<el-table :data="tableData" stripe style="width: 100%"> <el-table :data="tableData" stripe style="width: 100%">
<el-table-column type="index" :index="(index) => <el-table-column
index + (pageOptions.pageNum - 1) * pageOptions.pageSize + 1 type="index"
" label="序号" width="50" header-align="center"></el-table-column> :index="(index) => index + (pageOptions.pageNum - 1) * pageOptions.pageSize + 1"
<el-table-column prop="id" label="图层资源目录编号" width="350"> label="序号"
</el-table-column> width="50"
<el-table-column prop="serviceNameAlias" label="图层资源名称"> header-align="center"
</el-table-column> ></el-table-column>
<el-table-column prop="id" label="图层资源目录编号" width="350"> </el-table-column>
<el-table-column prop="serviceNameAlias" label="图层资源名称"> </el-table-column>
<el-table-column prop="pubDate" label="创建时间"> </el-table-column> <el-table-column prop="pubDate" label="创建时间"> </el-table-column>
<el-table-column prop="createUser" label="创建人"> </el-table-column> <el-table-column prop="createUser" label="创建人"> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
@ -160,8 +207,14 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination background layout="prev, pager, next" :current-page.sync="pageOptions.pageNum" <el-pagination
:total="pageOptions.total" :page-size="pageOptions.pageSize" @current-change="getLayerList"> background
layout="prev, pager, next"
:current-page.sync="pageOptions.pageNum"
:total="pageOptions.total"
:page-size="pageOptions.pageSize"
@current-change="getLayerList"
>
</el-pagination> </el-pagination>
</div> </div>
</el-container> </el-container>
@ -255,6 +308,7 @@ export default {
"editDataInfoForm.serviceUrl"(val) { "editDataInfoForm.serviceUrl"(val) {
if (val) { if (val) {
if (!this.queryServiceUrlMap.has(val)) { if (!this.queryServiceUrlMap.has(val)) {
debugger;
this.queryLayerByUrl(val); this.queryLayerByUrl(val);
} else { } else {
this.fieldsTable = this.queryServiceUrlMap.get(val); this.fieldsTable = this.queryServiceUrlMap.get(val);
@ -277,13 +331,9 @@ export default {
methods: { methods: {
searchField() { searchField() {
if (this.fieldValue === "") { if (this.fieldValue === "") {
this.fieldsTable = this.queryServiceUrlMap.get( this.fieldsTable = this.queryServiceUrlMap.get(this.editDataInfoForm.serviceUrl);
this.editDataInfoForm.serviceUrl
);
} else { } else {
this.fieldsTable = this.fieldsTable.filter((item) => this.fieldsTable = this.fieldsTable.filter((item) => item.field.includes(this.fieldValue));
item.field.includes(this.fieldValue)
);
} }
}, },
goBack() { goBack() {
@ -306,15 +356,11 @@ export default {
}, },
handleDelete(row) { handleDelete(row) {
this.$confirm( this.$confirm("删除图层将同时删除该图层资源以及关联的图层数据,删除后将不可恢复,是否继续删除?", "提示", {
"删除图层将同时删除该图层资源以及关联的图层数据,删除后将不可恢复,是否继续删除?", confirmButtonText: "确定",
"提示", cancelButtonText: "取消",
{ type: "warning",
confirmButtonText: "确定", })
cancelButtonText: "取消",
type: "warning",
}
)
.then(async () => { .then(async () => {
const res = await deleteLayerApi(row.id); const res = await deleteLayerApi(row.id);
if (res.success) { if (res.success) {
@ -356,8 +402,7 @@ export default {
if (!reg.test(this.editDataInfoForm.serviceName)) { if (!reg.test(this.editDataInfoForm.serviceName)) {
this.$message({ this.$message({
type: "info", type: "info",
message: message: "格式有误,目录名称仅支持中文、数字、字母、下划线、冒号,最大长度不超过100",
"格式有误,目录名称仅支持中文、数字、字母、下划线、冒号,最大长度不超过100",
}); });
return; return;
} }
@ -366,10 +411,7 @@ export default {
extendData: JSON.stringify(this.extendTable), extendData: JSON.stringify(this.extendTable),
fields: this.fieldsTable, fields: this.fieldsTable,
}; };
this.queryServiceUrlMap.set( this.queryServiceUrlMap.set(this.editDataInfoForm.serviceUrl, this.fieldsTable);
this.editDataInfoForm.serviceUrl,
this.fieldsTable
);
await saveOrUpdateLayerApi(params); await saveOrUpdateLayerApi(params);
this.getLayerList(); this.getLayerList();
this.dialogFormVisible = false; this.dialogFormVisible = false;
@ -427,9 +469,7 @@ export default {
if (index !== undefined) { if (index !== undefined) {
this.extendTable.splice(index, 1); this.extendTable.splice(index, 1);
} else { } else {
this.extendTable = this.extendTable.filter( this.extendTable = this.extendTable.filter((item) => !this.multipleSelection.includes(item));
(item) => !this.multipleSelection.includes(item)
);
} }
}) })
.catch(() => { .catch(() => {
@ -455,9 +495,7 @@ export default {
} }
// //
const name = this.extendTable[index].field; const name = this.extendTable[index].field;
const isRepeat = this.extendTable.some( const isRepeat = this.extendTable.some((item, i) => item.field === name && i !== index);
(item, i) => item.field === name && i !== index
);
if (isRepeat) { if (isRepeat) {
this.$message({ this.$message({
type: "info", type: "info",
@ -471,16 +509,16 @@ export default {
this.multipleSelection = val; this.multipleSelection = val;
}, },
showFieldExtend() { showFieldExtend() {
return ["021102", "081100", "030300"].includes( return ["021102", "081100", "030300"].includes(this.editDataInfoForm.serviceType);
this.editDataInfoForm.serviceType
);
}, },
queryLayerByUrl(url) { queryLayerByUrl(url) {
debugger;
queryServiceInfoApi(url, { queryServiceInfoApi(url, {
type: this.editDataInfoForm.serviceType, type: this.editDataInfoForm.serviceType,
url: url, url: url,
index: this.editDataInfoForm.serviceIndex, index: this.editDataInfoForm.serviceIndex,
name: this.editDataInfoForm.serviceName, name: this.editDataInfoForm.serviceName,
token: this.editDataInfoForm.serviceToken,
alias: this.editDataInfoForm.serviceNameAlias, alias: this.editDataInfoForm.serviceNameAlias,
}).then((res) => { }).then((res) => {
this.fieldsTable = this.fieldsTable =

118
vue.config.js

@ -1,13 +1,13 @@
'use strict'; "use strict";
const path = require('path'); const path = require("path");
const defaultSettings = require('./src/settings.js'); const defaultSettings = require("./src/settings.js");
// const httpConfig = require('./public/config') // const httpConfig = require('./public/config')
const webpack = require('webpack'); const webpack = require("webpack");
function resolve(dir) { function resolve(dir) {
return path.join(__dirname, dir); return path.join(__dirname, dir);
} }
const name = defaultSettings.title || '智慧水利水工程应用v24.3.0'; // 标题 const name = defaultSettings.title || "智慧水利水工程应用v24.3.0"; // 标题
const port = process.env.port || process.env.npm_config_port || 80; // 端口 const port = process.env.port || process.env.npm_config_port || 80; // 端口
@ -18,18 +18,18 @@ module.exports = {
// 部署生产环境和开发环境下的URL。 // 部署生产环境和开发环境下的URL。
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: './', publicPath: "./",
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
outputDir: 'dist', outputDir: "dist",
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir: 'static', assetsDir: "static",
// 是否开启eslint保存检测,有效值:true | false | 'error' // 是否开启eslint保存检测,有效值:true | false | 'error'
lintOnSave: process.env.NODE_ENV === 'development', lintOnSave: process.env.NODE_ENV === "development",
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
productionSourceMap: false, productionSourceMap: false,
// webpack-dev-server 相关配置 // webpack-dev-server 相关配置
devServer: { devServer: {
host: '0.0.0.0', host: "0.0.0.0",
// host: '192.168.1.104', // host: '192.168.1.104',
// host: '127.0.0.1', // host: '127.0.0.1',
port: 80, port: 80,
@ -68,18 +68,18 @@ module.exports = {
// } // }
// }, // },
["profile"]: { ["profile"]: {
target: 'http://shuili-admin.product.dev.com:30115', target: "http://shuili-admin.product.dev.com:30115",
changeOrigin: true changeOrigin: true,
}, },
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
target: 'http://shuili-admin.product.dev.com:30115', target: "http://shuili-admin.product.dev.com:30115",
// target: 'http://172.16.34.59:18082', // target: 'http://172.16.34.59:18082',
// target: "http://172.16.34.27:18082", // target: "http://172.16.34.27:18082",
// target: "http://127.0.0.1:18082", // target: "http://127.0.0.1:18082",
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: '/tianhui-admin-web' ["^" + process.env.VUE_APP_BASE_API]: "/tianhui-admin-web",
} },
}, },
'/iserver': { '/iserver': {
target: 'http://172.16.34.41:8090', target: 'http://172.16.34.41:8090',
@ -89,90 +89,90 @@ module.exports = {
// '^/iserver': '' // '^/iserver': ''
// } // }
}, },
'/mapserver': { "/mapserver": {
target: 'http://172.16.32.63/tiles', target: "http://172.16.32.63/tiles",
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
'^/mapserver': '' "^/mapserver": "",
} },
} },
}, },
disableHostCheck: true disableHostCheck: true,
}, },
configureWebpack: { configureWebpack: {
name: name, name: name,
resolve: { resolve: {
alias: { alias: {
'@': resolve('src') "@": resolve("src"),
} },
}, },
plugins: [ plugins: [
new webpack.ProvidePlugin({ new webpack.ProvidePlugin({
$: 'jquery', $: "jquery",
jQuery: 'jquery', jQuery: "jquery",
'window.jQuery': 'jquery', "window.jQuery": "jquery",
'window.$': 'jquery', "window.$": "jquery",
Popper: ['popper.js', 'default'] Popper: ["popper.js", "default"],
}) }),
] ],
}, },
chainWebpack(config) { chainWebpack(config) {
config.plugins.delete('preload'); // TODO: need test config.plugins.delete("preload"); // TODO: need test
config.plugins.delete('prefetch'); // TODO: need test config.plugins.delete("prefetch"); // TODO: need test
// set svg-sprite-loader // set svg-sprite-loader
config.module.rule('svg').exclude.add(resolve('src/assets/icons')).end(); config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end();
config.module config.module
.rule('icons') .rule("icons")
.test(/\.svg$/) .test(/\.svg$/)
.include.add(resolve('src/assets/icons')) .include.add(resolve("src/assets/icons"))
.end() .end()
.use('svg-sprite-loader') .use("svg-sprite-loader")
.loader('svg-sprite-loader') .loader("svg-sprite-loader")
.options({ .options({
symbolId: 'icon-[name]' symbolId: "icon-[name]",
}) })
.end(); .end();
config.when(process.env.NODE_ENV !== 'development', (config) => { config.when(process.env.NODE_ENV !== "development", (config) => {
config config
.plugin('ScriptExtHtmlWebpackPlugin') .plugin("ScriptExtHtmlWebpackPlugin")
.after('html') .after("html")
.use('script-ext-html-webpack-plugin', [ .use("script-ext-html-webpack-plugin", [
{ {
// `runtime` must same as runtimeChunk name. default is `runtime` // `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/ inline: /runtime\..*\.js$/,
} },
]) ])
.end(); .end();
config.optimization.splitChunks({ config.optimization.splitChunks({
chunks: 'all', chunks: "all",
cacheGroups: { cacheGroups: {
libs: { libs: {
name: 'chunk-libs', name: "chunk-libs",
test: /[\\/]node_modules[\\/]/, test: /[\\/]node_modules[\\/]/,
priority: 10, priority: 10,
chunks: 'initial' // only package third parties that are initially dependent chunks: "initial", // only package third parties that are initially dependent
}, },
elementUI: { elementUI: {
name: 'chunk-elementUI', // split elementUI into a single package name: "chunk-elementUI", // split elementUI into a single package
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
}, },
commons: { commons: {
name: 'chunk-commons', name: "chunk-commons",
test: resolve('src/components'), // can customize your rules test: resolve("src/components"), // can customize your rules
minChunks: 3, // minimum common number minChunks: 3, // minimum common number
priority: 5, priority: 5,
reuseExistingChunk: true reuseExistingChunk: true,
} },
} },
}); });
config.optimization.runtimeChunk('single'), config.optimization.runtimeChunk("single"),
{ {
from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件 from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件
to: './' //到根目录下 to: "./", //到根目录下
}; };
}); });
} },
}; };

Loading…
Cancel
Save