提交三方测试版本

yfy
严飞永 1 month ago
parent 98f0335e58
commit e13792c607

@ -6,7 +6,7 @@ ENV = 'development'
# 苏州工业园区工业上楼管理系统/开发环境
# VUE_APP_BASE_API = 'http://192.168.0.108:7071'
VUE_APP_BASE_API = 'http://39.101.188.84:7071'
VUE_APP_BASE_API = 'http://36.213.9.3:7071'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

@ -10,7 +10,7 @@ ENV = 'production'
# VUE_APP_BASE_API = 'http://114.216.202.175:8008'
# 公司测试环境
VUE_APP_BASE_API = 'http://39.101.188.84:7071'
VUE_APP_BASE_API = 'http://36.213.9.3:7071'
# 正式环境
# VUE_APP_BASE_API = '/api'

@ -1,8 +1,8 @@
{
"name": "ruoyi",
"name": "suzhou",
"version": "3.8.9",
"description": "苏州工业园区工业上楼管理系统",
"author": "若依",
"author": "苏州工业园区",
"license": "MIT",
"scripts": {
"dev": "vue-cli-service serve",

@ -32,9 +32,8 @@ router.beforeEach((to, from, next) => {
const signature = params.get("signature");
const timespan = params.get("timespan");
// =============================
// 🔑 新增:处理 clienttoken 登录企业单点登录逻辑
// =============================
// 处理 clienttoken 登录企业单点登录逻辑
if (window.location.href.includes("clienttoken=")) {
const reg = /[?&]clienttoken=([^&#]+)/;
const match = window.location.href.match(reg);
@ -83,9 +82,7 @@ router.beforeEach((to, from, next) => {
}
}
// =============================
// 📦 原有政务参数处理逻辑
// =============================
// 政务参数处理逻辑
if (from.path === to.path && store.getters.token) {
next();
return;
@ -153,9 +150,8 @@ router.beforeEach((to, from, next) => {
return;
}
// =============================
// 🔐 原始本地登录逻辑
// =============================
// 本地登录逻辑
if (getToken()) {
to.meta.title && store.dispatch("settings/setTitle", to.meta.title);
/* has token*/

@ -135,13 +135,9 @@ export default {
.grid-container {
display: grid;
grid-template-columns: repeat(2, 1fr);
/* 三列 */
grid-template-rows: auto auto auto;
/* 三行 */
gap: 1rem;
/* 模块之间的间隔 */
padding: 1rem;
/* 容器内边距 */
}
.grid-item {
@ -179,10 +175,7 @@ export default {
flex-direction: column;
gap: 1rem;
}
/* 第一行:第一个模块占两列 */
.item-1 {
/* background-image: url(@/src/assets/images/allbg.png); */
background-size: 100% 100%;
background-repeat: no-repeat;
}
@ -193,10 +186,8 @@ export default {
padding: 1rem 1.5rem;
}
/* 最后一行:一个模块占一整行 */
.item-6 {
grid-column: span 3;
/* 占三列 */
}
.mainareaitem {

@ -54,31 +54,188 @@
<div class="content">
<div class="picturediv">
<!-- 图片展示 -->
<img
v-if="basicInfo.fj"
:src="baseUrl + basicInfo.fj"
alt="项目代表性照片"
/>
<el-carousel :autoplay="false" height="26rem">
<el-carousel-item v-for="(url, index) in carouselImages" :key="index">
<img
:src="url"
alt="项目图片"
style="
width: 100%;
height: 100%;
object-fit: contain;
object-position: center;
"
/>
</el-carousel-item>
</el-carousel>
</div>
<!-- 基本信息描述 -->
<div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="3" border>
<el-descriptions-item
v-for="(item, index) in descriptions"
:key="index"
:span="
item.label === '项目法人单位简介' || item.label === '所属细分产业'
? 3
: 1
"
>
<!-- 项目名称 -->
<el-descriptions-item>
<template slot="label">
<span v-if="item.required" style="color: red; margin-right: 4px"
>*</span
>
{{ item.label }}
<span style="color: red">*</span> 项目名称
</template>
{{ basicInfo.name }}
</el-descriptions-item>
<!-- 项目法人单位 -->
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 项目法人单位
</template>
{{ basicInfo.xmfrdwxz }}
</el-descriptions-item>
<!-- 项目法人单位性质 -->
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 项目法人单位性质
</template>
<dict-tag :options="dict.type.xmfrdwxz" :value="basicInfo.nature" />
</el-descriptions-item>
<!-- 施工单位 -->
<el-descriptions-item>
<template slot="label">施工单位</template>
{{ basicInfo.sgdw }}
</el-descriptions-item>
<!-- 设计单位 -->
<el-descriptions-item>
<template slot="label">设计单位</template>
{{ basicInfo.sjdw }}
</el-descriptions-item>
<!-- 总投资额万元 -->
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 总投资额万元
</template>
{{ basicInfo.ztze }}
</el-descriptions-item>
<!-- 所属功能区 -->
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 所属功能区
</template>
<dict-tag :options="dict.type.ssgnq" :value="basicInfo.ssgnq" />
</el-descriptions-item>
<!-- 建设起止时间 -->
<el-descriptions-item>
<template slot="label"
><span style="color: red">*</span>建设起止时间</template
>
{{ basicInfo.begainTime }} {{ basicInfo.endTime }}
</el-descriptions-item>
<!-- 现状分类 -->
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 现状分类
</template>
<dict-tag :options="dict.type.xzfl" :value="basicInfo.xzfl" />
</el-descriptions-item>
<!-- 建设地点 -->
<el-descriptions-item>
<template slot="label">建设地点</template>
{{ basicInfo.jsdd }}
</el-descriptions-item>
<!-- 重点发展产业 -->
<el-descriptions-item>
<template slot="label">重点发展产业</template>
{{ basicInfo.prioritize }}
</el-descriptions-item>
<!-- 建设模式 -->
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 建设模式
</template>
<dict-tag :options="dict.type.jsms" :value="basicInfo.jsms" />
</el-descriptions-item>
<!-- 项目标签 -->
<el-descriptions-item>
<template slot="label">项目标签</template>
{{ basicInfo.label }}
</el-descriptions-item>
<!-- 项目负责人 -->
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 项目负责人
</template>
{{ basicInfo.projectLeader }}
</el-descriptions-item>
<!-- 联系方式 -->
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 联系方式
</template>
{{ basicInfo.phone }}
</el-descriptions-item>
{{ item.value }}
<!-- 施工许可证发放时间 -->
<el-descriptions-item>
<template slot="label">施工许可证发放时间</template>
{{ basicInfo.issuingTime }}
</el-descriptions-item>
<!-- 竣工验收时间 -->
<el-descriptions-item>
<template slot="label">竣工验收时间</template>
{{ basicInfo.acceptanceTime }}
</el-descriptions-item>
<!-- 建设进度 -->
<el-descriptions-item>
<template slot="label"> 建设进度 </template>
{{ basicInfo.jsjd }}
</el-descriptions-item>
<!-- 统一社会信用代码 -->
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 统一社会信用代码
</template>
{{ basicInfo.tyshxydm }}
</el-descriptions-item>
<!-- 计划投资额(亿元) -->
<el-descriptions-item>
<template slot="label">计划投资额(亿元)</template>
{{ basicInfo.jhtze }}
</el-descriptions-item>
<!-- 所属产业目录 -->
<el-descriptions-item>
<template slot="label">所属产业目录</template>
<dict-tag :options="dict.type.shangloumulu" :value="basicInfo.ml" />
</el-descriptions-item>
<!-- 所属细分产业 -->
<el-descriptions-item :span="3">
<template slot="label"> 所属细分产业 </template>
<dict-tag :options="dict.type.bqlx" :value="basicInfo.xfcy" />
</el-descriptions-item>
<!-- 项目法人单位简介 -->
<el-descriptions-item :span="3">
<template slot="label">项目法人单位简介</template>
{{ basicInfo.unitIntroduction }}
</el-descriptions-item>
<!-- 项目简介 -->
<el-descriptions-item :span="3">
<template slot="label">项目简介</template>
{{ basicInfo.introduction }}
</el-descriptions-item>
</el-descriptions>
</div>
@ -257,11 +414,13 @@
</el-col>
<el-col :span="12">
<el-form-item label="施工许可证发放时间" prop="issuingTime">
<el-input
<el-date-picker
v-model="form.issuingTime"
maxlength="50"
placeholder="请输入施工许可证发放时间"
></el-input>
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择施工许可证发放时间"
style="width: 100%"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
@ -287,11 +446,13 @@
</el-col>
<el-col :span="12">
<el-form-item label="竣工验收时间" prop="acceptanceTime">
<el-input
<el-date-picker
v-model="form.acceptanceTime"
maxlength="50"
placeholder="请输入竣工验收时间"
></el-input>
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择竣工验收时间"
style="width: 100%"
></el-date-picker>
</el-form-item>
</el-col>
</el-row>
@ -409,7 +570,7 @@
placeholder="请输入项目简介"
></el-input>
</el-form-item>
<el-form-item label="项目代表性照片">
<el-form-item label="项目代表性照片" prop="fj">
<ImageUpload v-model="form.fj" />
</el-form-item>
</el-form>
@ -465,19 +626,6 @@ export default {
},
data() {
return {
requiredFields: [
"项目名称",
"项目法人单位",
"项目法人单位性质",
"建设模式",
"项目负责人",
"总投资额(万元)",
"联系方式",
"所属功能区",
"建设起止时间",
"现状分类",
"统一社会信用代码",
],
baseUrl: process.env.VUE_APP_BASE_API,
descriptions: [],
dialogImageUrl: "",
@ -590,47 +738,21 @@ export default {
},
],
},
// select
ssgnqMap: {
1: "高端制造与国际贸易区",
2: "独墅湖科教创新区",
3: "阳澄湖半岛旅游度假区",
4: "金鸡湖商务区",
5: "苏相合作区",
},
xmfrdwxzMap: {
1: "国企",
2: "外资企业",
3: "民营企业",
4: "其他",
},
jsmsMap: {
1: "工地实施",
2: "利用存量用地改扩建",
},
xzflMap: {
1: "已建",
2: "在建",
3: "拟建",
},
mlMap: {
1: "重点鼓励上楼",
2: "有条件上楼",
},
xfMap: {
1: "新一代信息技术",
2: "高端装备制造",
3: "生物医药及大健康",
4: "纳米技术应用及新材料",
5: "人工智能及数字产业",
6: "新能源及绿色产业",
},
};
},
watch: {
basicInfo: {
handler(newVal) {
this.descriptions = this.formatDescriptions(newVal);
//
if (newVal.fj) {
this.carouselImages = newVal.fj
.split(",")
.map((url) => this.baseUrl + url.trim());
} else {
this.carouselImages = [];
}
//
this.form = {
...newVal,
begainTime: newVal.begainTime ? new Date(newVal.begainTime) : "",
@ -651,7 +773,7 @@ export default {
this.form.latitude = location.lat; //
this.mapDialogVisible = false; //
},
/** 导出按钮操作 */
/* 导出按钮操作 */
handleExport() {
this.download(
"/gysl/basicInformation/export",
@ -661,47 +783,6 @@ export default {
`基本信息导出${new Date().getTime()}.xlsx`
);
},
//
formatDescriptions(data) {
const requiredFields = this.requiredFields;
return [
{ label: "项目名称", value: data.name },
{ label: "项目法人单位", value: data.xmfrdwxz },
{
label: "项目法人单位性质",
value: this.xmfrdwxzMap[data.nature] || "",
},
{ label: "施工单位", value: data.sgdw },
{ label: "设计单位", value: data.sjdw },
{ label: "总投资额(万元)", value: data.ztze },
{ label: "所属功能区", value: this.ssgnqMap[data.ssgnq] || "" },
{
label: "建设起止时间",
value: `${data.begainTime ? data.begainTime : ""}${
data.endTime ? data.endTime : ""
}`,
},
{ label: "现状分类", value: this.xzflMap[data.xzfl] || "" },
{ label: "建设地点", value: data.jsdd },
{ label: "重点发展产业", value: data.prioritize },
{ label: "建设模式", value: this.jsmsMap[data.jsms] || "" },
{ label: "项目标签", value: data.label },
{ label: "项目负责人", value: data.projectLeader },
{ label: "联系方式", value: data.phone },
{ label: "施工许可证发放时间", value: data.issuingTime },
{ label: "竣工验收时间", value: data.acceptanceTime },
{ label: "建设进度", value: data.jsjd },
{ label: "统一社会信用代码", value: data.tyshxydm },
{ label: "计划投资额(亿元)", value: data.jhtze },
{ label: "所属产业目录", value: this.mlMap[data.ml] || "" },
{ label: "所属细分产业", value: this.xfMap[data.xfcy] || "" },
{ label: "项目法人单位简介", value: data.unitIntroduction },
{ label: "项目简介", value: data.introduction },
].map((item) => ({
...item,
required: requiredFields.includes(item.label),
}));
},
//
edit() {
this.dialogVisible = true;
@ -734,14 +815,12 @@ export default {
//
const formatDate = (date) => {
if (!date) return "";
// Date
return date instanceof Date ? date.toISOString().split("T")[0] : date;
};
return {
...formData,
begainTime: formatDate(formData.begainTime), // begainTime
endTime: formatDate(formData.endTime),
endTime: formatDate(formData.endTime),
createBy: "",
createId: 0,
createTime: "",
@ -760,7 +839,6 @@ export default {
// const d = date instanceof Date ? date : new Date(date);
// return d.toISOString().split('T')[0]; // YYYY-MM-DD
// };
// return [
// formatDate(dateRange[0]), //
// formatDate(dateRange[1]) //
@ -840,8 +918,8 @@ export default {
}
.picturediv {
width: 18.31rem;
height: 25rem;
width: 24.4rem;
height: 26rem;
position: relative;
overflow: hidden;
}
@ -859,7 +937,7 @@ export default {
}
.descriptionsdiv {
width: calc(100% - 18.31rem);
width: calc(100% - 25rem);
margin-left: 1rem;
height: auto;
}

@ -571,7 +571,6 @@ export default {
buildings: {
immediate: true,
handler(newVal) {
// buildings
this.$emit("update:hasBuildingData", newVal.length > 0);
},
},
@ -840,21 +839,16 @@ export default {
align-items: center;
cursor: pointer;
border: 1px solid transparent;
/* 添加透明边框保持布局稳定 */
transition: all 0.3s ease;
/* 添加过渡效果 */
}
.tagitem.active-tag {
border: 1px solid #2b62f1;
/* 选中时的蓝色边框 */
box-shadow: 0 0 0 2px rgba(43, 98, 241, 0.2);
/* 可选的外发光效果 */
}
.tagitem:hover {
background: #f0f0f0;
/* 鼠标悬停时的背景色变化 */
}
.important-building {

@ -50,9 +50,6 @@ export default {
data() {
return {
images: [
// { src: 'https://picsum.photos/300/200?random=1', isOnline: true },
// { src: 'https://picsum.photos/300/200?random=2', isOnline: false },
// { src: 'https://picsum.photos/300/200?random=3', isOnline: true },
]
};
},
@ -65,7 +62,6 @@ export default {
}).then(() => {
this.images.splice(index, 1);
}).catch(() => {
//
});
}
}

@ -404,9 +404,7 @@ export default {
.el-textarea__inner {
height: 10rem !important;
/* 固定高度 */
resize: none;
/* 禁止调整大小 */
}
.iconguanbi {

@ -85,7 +85,6 @@ export default {
{ value: '有', label: '有' },
{ value: '无', label: '无' },
],
//
}
};
},
@ -93,9 +92,7 @@ export default {
wysmxInfo: {
immediate: true,
handler(newVal) {
// console.log(' wysmxInfo :', newVal);
this.form = newVal.map(item => ({
// id: item.id,
xmId: item.xmId,
ysmc: item.ysmc,
list: item.list.map(subItem => ({
@ -111,10 +108,8 @@ export default {
methods: {
toggleEditAll() {
if (this.isEditingAll) {
// isEditing
const cleanedForm = this.form.map(row => ({
ysmc: row.ysmc,
// id: row.id,
xmId: row.xmId,
list: row.list.map(item => ({
id: item.id,
@ -122,9 +117,8 @@ export default {
zdinfor: item.zdinfor,
}))
}));
this.$emit('updata-data', cleanedForm); //
this.$emit('updata-data', cleanedForm);
} else {
//
this.form.forEach(row => {
row.list.forEach(item => {
item.isEditing = true;
@ -134,12 +128,10 @@ export default {
this.isEditingAll = !this.isEditingAll;
},
getOptionsForItem(rowIndex, itemIndex) {
// rowIndex itemIndex
return this.optionsMap[`${rowIndex}-${itemIndex}`] || [];
}
},
created() {
// console.log('wysmxInfo :', this.wysmxInfo); //
}
};
</script>

@ -282,12 +282,10 @@ export default {
.search-input {
width: 100%;
/* max-width: 500px; */
}
.selected-place-input {
width: 100%;
/* max-width: 500px; */
}
.search-results {
@ -342,7 +340,6 @@ export default {
height: 100%;
}
/* 悬浮面板样式 */
.floating-panel {
position: absolute;
top: 20px;

@ -82,7 +82,7 @@ export default {
this.total = response.data.total;
this.loading = false;
}).catch(error => {
console.error('查询失败:', error);
// console.error(':', error);
this.loading = false;
});
},

@ -208,7 +208,7 @@ export default {
});
graphicLayer.addGraphic(polygon);
} catch (error) {
console.error('加载苏州园区数据失败:', error);
console.error('1', error);
}
},
toggleCollapse() {

@ -155,7 +155,6 @@ export default {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
gap: 1rem;
/* background-color: #fff; */
border-radius: 0.5rem;
height: 26rem;
padding: .5rem;
@ -182,7 +181,6 @@ export default {
.project-name {
color: #2B62F1;
cursor: pointer;
/* font-weight: bold; */
font-family: aliregular;
font-size: 0.8rem;
}

@ -365,8 +365,7 @@ export default {
this.loading = false;
})
.catch((error) => {
console.error("API请求错误:", error);
console.error("错误详情:", error.response);
// console.error("API:", error)
this.loading = false;
});
},

@ -496,11 +496,20 @@ export default {
// basicInformation
const basicRequiredFields = [
"name",
"xmfrdwxz",
"nature",
"ztze",
"ssgnq",
"begainTime",
"endTime",
"xzfl",
"jsms",
"projectLeader",
"phone",
"unitIntroduction",
"introduction",
"tyshxydm",
];
const basicMissingFields = basicRequiredFields.filter(
(field) => !this.basicInformation[field]

@ -1,7 +1,7 @@
<template>
<div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">若依后台管理系统</h3>
<h3 class="title">苏州工业园区工业上楼管理系统</h3>
<el-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />

@ -12,7 +12,6 @@ const name = process.env.VUE_APP_TITLE || '工业园区' // 网页标题
const port = process.env.port || process.env.npm_config_port || 80 // 端口
// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
// 这里只列一部分,具体配置参考文档
module.exports = {
// 预览docx
@ -25,8 +24,6 @@ module.exports = {
},
// 部署生产环境和开发环境下的URL。
// 默认情况下Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。
// 例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "" : "/",
// 在npm run build 或 yarn build 时 生成文件的目录名称要和baseUrl的生产环境路径一致默认dist
outputDir: 'dist',
@ -71,7 +68,7 @@ module.exports = {
}
},
plugins: [
// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
new CompressionPlugin({
cache: false, // 不启用文件缓存
test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 压缩文件格式

Loading…
Cancel
Save