正式环境

main
严飞永 4 weeks ago
parent 2302cedee6
commit 658e3f9b60

@ -10,7 +10,7 @@ ENV = 'production'
# VUE_APP_BASE_API = 'http://114.216.202.175:8008' # 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://39.101.188.84:7071'
# 正式环境 # 正式环境
# VUE_APP_BASE_API = '/api' VUE_APP_BASE_API = '/api'

@ -8,7 +8,7 @@
</div> </div>
<div class="right-menu"> <div class="right-menu">
<!-- <bearicon /> --> <!-- <bearicon /> -->
<!-- <div class="avatar-container right-menu-item hover-effect" style="display: flex;"> <div class="avatar-container right-menu-item hover-effect" style="display: flex;">
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<div v-if="checkRole(['common','gov'])"> <div v-if="checkRole(['common','gov'])">
<span>{{ name }}</span> <span>{{ name }}</span>
@ -21,8 +21,8 @@
<router-link to="/user/profile" style="margin-left: 10px;margin-top: 1px;" v-if="checkRole(['admin'])"> <router-link to="/user/profile" style="margin-left: 10px;margin-top: 1px;" v-if="checkRole(['admin'])">
<i class="el-icon-user-solid"></i> <i class="el-icon-user-solid"></i>
</router-link> </router-link>
</div> --> </div>
<el-dropdown <!-- <el-dropdown
class="avatar-container right-menu-item hover-effect" class="avatar-container right-menu-item hover-effect"
trigger="click" trigger="click"
> >
@ -37,14 +37,11 @@
<router-link to="/user/profile"> <router-link to="/user/profile">
<el-dropdown-item>个人中心</el-dropdown-item> <el-dropdown-item>个人中心</el-dropdown-item>
</router-link> </router-link>
<!-- <el-dropdown-item @click.native="setting = true">
<span>布局设置</span>
</el-dropdown-item> -->
<el-dropdown-item divided @click.native="logout"> <el-dropdown-item divided @click.native="logout">
<span>退出登录</span> <span>退出登录</span>
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown> -->
</div> </div>
</div> </div>
</template> </template>
@ -66,7 +63,7 @@ export default {
return { return {
username: "", username: "",
messages: [], messages: [],
counts: 0, // counts: 0,
}; };
}, },
computed: { computed: {

@ -13,7 +13,7 @@ import { governmentGetInfo } from "@/api/login/index";
NProgress.configure({ showSpinner: false }); NProgress.configure({ showSpinner: false });
const whiteList = ["/login", "/entLogin", "/register"]; // 白名单路径 const whiteList = ["/login", "/entLogin", "/register"];
const isWhiteList = (path) => { const isWhiteList = (path) => {
return whiteList.some((pattern) => isPathMatch(pattern, path)); return whiteList.some((pattern) => isPathMatch(pattern, path));
@ -25,14 +25,15 @@ router.beforeEach((to, from, next) => {
} }
NProgress.start(); NProgress.start();
const search = window.location.search || window.location.hash.split("?")[1] || ""; const search =
window.location.search || window.location.hash.split("?")[1] || "";
const params = new URLSearchParams(search); const params = new URLSearchParams(search);
const userToken = params.get("userToken"); const userToken = params.get("userToken");
const signature = params.get("signature"); const signature = params.get("signature");
const timespan = params.get("timespan"); const timespan = params.get("timespan");
// ============================= // =============================
// 🔑 新增:处理 clienttoken 登录逻辑 // 🔑 新增:处理 clienttoken 登录企业单点登录逻辑
// ============================= // =============================
if (window.location.href.includes("clienttoken=")) { if (window.location.href.includes("clienttoken=")) {
const reg = /[?&]clienttoken=([^&#]+)/; const reg = /[?&]clienttoken=([^&#]+)/;
@ -41,21 +42,27 @@ router.beforeEach((to, from, next) => {
if (clienttoken) { if (clienttoken) {
// 清除 clienttoken 避免死循环 // 清除 clienttoken 避免死循环
let modifiedUrl = window.location.href.replace(/[?&]clienttoken=[^&#]+/, ''); let modifiedUrl = window.location.href.replace(
if (modifiedUrl.endsWith('?') || modifiedUrl.endsWith('&')) { /[?&]clienttoken=[^&#]+/,
modifiedUrl = modifiedUrl.slice(0, -1); // 去掉末尾多余的符号 ""
);
if (modifiedUrl.endsWith("?") || modifiedUrl.endsWith("&")) {
modifiedUrl = modifiedUrl.slice(0, -1);
} }
// 如果 roles 还未加载,则拉取用户信息 // 如果 roles 还未加载,则拉取用户信息
if (store.getters.roles.length === 0) { if (store.getters.roles.length === 0) {
isRelogin.show = true; isRelogin.show = true;
store.dispatch("SingleSignOnGetInfo", { clientToken: clienttoken }) store
.dispatch("SingleSignOnGetInfo", { clientToken: clienttoken })
.then(() => { .then(() => {
isRelogin.show = false; isRelogin.show = false;
console.log("✅ 单点登录成功");
console.log("当前 token:", getToken());
console.log("当前角色:", store.getters.roles);
// 清除 URL 中的 clienttoken 并刷新页面 // 清除 URL 中的 clienttoken 并刷新页面
window.history.replaceState({}, '', modifiedUrl); window.history.replaceState({}, "", modifiedUrl);
// 获取用户权限并生成路由 // 获取用户权限并生成路由
return store.dispatch("GenerateRoutes"); return store.dispatch("GenerateRoutes");
@ -67,12 +74,13 @@ router.beforeEach((to, from, next) => {
.catch((err) => { .catch((err) => {
// console.error("单点登录失败:", err); // console.error("单点登录失败:", err);
store.dispatch("LogOut").then(() => { store.dispatch("LogOut").then(() => {
// Message.error("单点登录失败,请重试"); Message.error("单点登录失败,请重试");
window.location.href = "https://qytt.sipac.gov.cn/ecobrainportal/index.html"; // window.location.href =
// "https://qytt.sipac.gov.cn/ecobrainportal/index.html";
}); });
}); });
return; return;
} }
} }
} }
@ -85,7 +93,7 @@ router.beforeEach((to, from, next) => {
return; return;
} }
if (userToken && signature && timespan && to.path !== "/login") { if (userToken && signature && timespan && !isPathMatch("/login", to.path)) {
next({ next({
path: "/login", path: "/login",
query: { userToken, signature, timespan }, query: { userToken, signature, timespan },
@ -150,22 +158,26 @@ router.beforeEach((to, from, next) => {
// ============================= // =============================
// 🔐 原始本地登录逻辑 // 🔐 原始本地登录逻辑
// ============================= // =============================
const token = getToken(); if (getToken()) {
if (token) {
to.meta.title && store.dispatch("settings/setTitle", to.meta.title); to.meta.title && store.dispatch("settings/setTitle", to.meta.title);
if (to.path === "/login") { /* has token*/
if (to.path === "/entLogin") {
next({ path: "/" }); next({ path: "/" });
NProgress.done(); NProgress.done();
} else if (isWhiteList(to.path)) { } else if (whiteList.indexOf(to.path) !== -1) {
next(); next({ path: "/" });
NProgress.done();
// next();
} else { } else {
if (store.getters.roles.length === 0) { if (store.getters.roles.length === 0) {
isRelogin.show = true; isRelogin.show = true;
// 判断当前用户是否已拉取完user_info信息
store store
.dispatch("GetInfo") .dispatch("GetInfo")
.then(() => { .then(() => {
isRelogin.show = false; isRelogin.show = false;
store.dispatch("GenerateRoutes").then((accessRoutes) => { store.dispatch("GenerateRoutes").then((accessRoutes) => {
// 根据roles权限生成可访问的路由表
router.addRoutes(accessRoutes); router.addRoutes(accessRoutes);
next({ ...to, replace: true }); next({ ...to, replace: true });
}); });
@ -173,7 +185,7 @@ router.beforeEach((to, from, next) => {
.catch((err) => { .catch((err) => {
store.dispatch("LogOut").then(() => { store.dispatch("LogOut").then(() => {
Message.error(err); Message.error(err);
next("/"); next({ path: "/" });
}); });
}); });
} else { } else {
@ -181,14 +193,16 @@ router.beforeEach((to, from, next) => {
} }
} }
} else { } else {
if (isWhiteList(to.path)) { // 没有token
if (whiteList.indexOf(to.path) !== -1) {
// 在免登录白名单,直接进入
next(); next();
} else { } else {
next(`/login?redirect=${encodeURIComponent(to.fullPath)}`); next(`/entLogin?redirect=${encodeURIComponent(to.fullPath)}`);
NProgress.done();
} }
} }
}); });
router.afterEach(() => { router.afterEach(() => {
NProgress.done(); NProgress.done();
}); });

@ -44,9 +44,14 @@ export const constantRoutes = [
{ {
path: "/login", path: "/login",
// 正式环境登录页 // 正式环境登录页
// component: () => import("@/views/login"), component: () => import("@/views/login"),
// 测试 // 测试
component: () => import("@/views/login_v1"), // component: () => import("@/views/login_v1"),
hidden: true,
},
{
path: "/entLogin",
component: () => import("@/views/entLogin"),
hidden: true, hidden: true,
}, },
{ {

@ -54,31 +54,189 @@
<div class="content"> <div class="content">
<div class="picturediv"> <div class="picturediv">
<!-- 图片展示 --> <!-- 图片展示 -->
<img <el-carousel :autoplay="false" height="26rem">
v-if="basicInfo.fj" <el-carousel-item v-for="(url, index) in carouselImages" :key="index">
:src="baseUrl + basicInfo.fj" <img
alt="项目代表性照片" :src="url"
/> alt="项目图片"
style="
width: 100%;
height: 100%;
object-fit: contain;
object-position: center;
"
/>
</el-carousel-item>
</el-carousel>
</div> </div>
<div class="descriptionsdiv"> <div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="3" border> <el-descriptions class="margin-top" :column="3" border>
<el-descriptions-item <el-descriptions-item>
v-for="(item, index) in descriptions"
:key="index"
:span="
item.label === '项目法人单位简介' || item.label === '所属细分产业'
? 3
: 1
"
>
<template slot="label"> <template slot="label">
<span v-if="item.required" style="color: red; margin-right: 4px" <span style="color: red">*</span> 项目名称
>*</span </template>
> {{ basicInfo.name }}
{{ item.label }} </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">
<span style="color: red">*</span> 施工单位
</template>
{{ basicInfo.sgdw }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 设计单位
</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">
<span style="color: red">*</span> 建设地点
</template>
{{ basicInfo.jsdd }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 重点发展产业
</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">
<span style="color: red">*</span> 项目标签
</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>
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 施工许可证发放时间
</template>
{{ basicInfo.issuingTime }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 竣工验收时间
</template>
{{ basicInfo.acceptanceTime }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 建设进度
</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">
<span style="color: red">*</span> 计划投资额(亿元)
</template> </template>
{{ basicInfo.jhtze }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<span style="color: red">*</span> 所属产业目录
</template>
<dict-tag :options="dict.type.shangloumulu" :value="basicInfo.ml" />
</el-descriptions-item>
<el-descriptions-item :span="3">
<template slot="label">
<span style="color: red">*</span> 所属细分产业
</template>
<dict-tag :options="dict.type.bqlx" :value="basicInfo.xfcy" />
</el-descriptions-item>
<el-descriptions-item :span="3">
<template slot="label">
<span style="color: red">*</span> 项目法人单位简介
</template>
{{ basicInfo.unitIntroduction }}
</el-descriptions-item>
{{ item.value }} <el-descriptions-item :span="3">
<template slot="label">
<span style="color: red">*</span> 项目简介
</template>
{{ basicInfo.introduction }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
@ -409,7 +567,7 @@
placeholder="请输入项目简介" placeholder="请输入项目简介"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="项目代表性照片"> <el-form-item label="项目代表性照片" prop="fj">
<ImageUpload v-model="form.fj" /> <ImageUpload v-model="form.fj" />
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -465,19 +623,6 @@ export default {
}, },
data() { data() {
return { return {
requiredFields: [
"项目名称",
"项目法人单位",
"项目法人单位性质",
"建设模式",
"项目负责人",
"总投资额(万元)",
"联系方式",
"所属功能区",
"建设起止时间",
"现状分类",
"统一社会信用代码",
],
baseUrl: process.env.VUE_APP_BASE_API, baseUrl: process.env.VUE_APP_BASE_API,
descriptions: [], descriptions: [],
dialogImageUrl: "", dialogImageUrl: "",
@ -529,6 +674,12 @@ export default {
trigger: "change", trigger: "change",
}, },
], ],
sgdw: [
{ required: true, message: "施工单位不能为空", trigger: "blur" },
],
sjdw: [
{ required: true, message: "设计单位不能为空", trigger: "blur" },
],
ztze: [ ztze: [
{ required: true, message: "总投资额不能为空", trigger: "blur" }, { required: true, message: "总投资额不能为空", trigger: "blur" },
{ type: "number", message: "总投资额必须是数字", trigger: "blur" }, { type: "number", message: "总投资额必须是数字", trigger: "blur" },
@ -553,9 +704,18 @@ export default {
xzfl: [ xzfl: [
{ required: true, message: "现状分类不能为空", trigger: "change" }, { required: true, message: "现状分类不能为空", trigger: "change" },
], ],
jsdd: [
{ required: true, message: "建设地点不能为空", trigger: "blur" },
],
prioritize: [
{ required: true, message: "重点发展产业不能为空", trigger: "blur" },
],
jsms: [ jsms: [
{ required: true, message: "建设模式不能为空", trigger: "change" }, { required: true, message: "建设模式不能为空", trigger: "change" },
], ],
label: [
{ required: true, message: "项目标签不能为空", trigger: "blur" },
],
projectLeader: [ projectLeader: [
{ required: true, message: "项目负责人不能为空", trigger: "blur" }, { required: true, message: "项目负责人不能为空", trigger: "blur" },
], ],
@ -567,8 +727,55 @@ export default {
trigger: "blur", trigger: "blur",
}, },
], ],
issuingTime: [
{
required: true,
message: "施工许可证发放时间不能为空",
trigger: "blur",
},
],
acceptanceTime: [
{ required: true, message: "竣工验收时间不能为空", trigger: "blur" },
],
jsjd: [
{ required: true, message: "建设进度不能为空", trigger: "blur" },
],
tyshxydm: [
{
required: true,
message: "统一社会信用代码不能为空",
trigger: "blur",
},
{
pattern: /^[a-zA-Z0-9]{18}$/,
message: "请输入正确格式的18位统一社会信用代码",
trigger: "blur",
},
],
jhtze: [
{
required: true,
message: "计划投资额(亿元)不能为空",
trigger: "blur",
},
],
ml: [
{
required: true,
message: "所属产业目录不能为空",
trigger: "change",
},
],
xfcy: [
{
required: true,
message: "所属细分产业不能为空",
trigger: "change",
},
],
unitIntroduction: [ unitIntroduction: [
{ {
required: true,
max: 1000, max: 1000,
message: "项目法人单位简介长度不能超过1000个字", message: "项目法人单位简介长度不能超过1000个字",
trigger: "blur", trigger: "blur",
@ -576,61 +783,48 @@ export default {
], ],
introduction: [ introduction: [
{ {
required: true,
max: 1000, max: 1000,
message: "项目简介长度不能超过1000个字", message: "项目简介长度不能超过1000个字",
trigger: "blur", trigger: "blur",
}, },
], ],
tyshxydm: [ fj: [
{ required: true, message: "请填写", trigger: "blur" },
{ {
pattern: /^[a-zA-Z0-9]{18}$/, required: true,
message: "请输入正确格式的18位统一社会信用代码", message: "请上传至少一张项目代表性照片",
trigger: "blur", trigger: "change",
},
{
validator: (rule, value, callback) => {
if (
!value ||
value.split(",").filter((url) => url.trim() !== "").length === 0
) {
callback(new Error("请上传至少一张项目代表性照片"));
} else {
callback();
}
},
trigger: "change",
}, },
], ],
}, },
// 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: { watch: {
basicInfo: { basicInfo: {
handler(newVal) { 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 = { this.form = {
...newVal, ...newVal,
begainTime: newVal.begainTime ? new Date(newVal.begainTime) : "", begainTime: newVal.begainTime ? new Date(newVal.begainTime) : "",
@ -651,7 +845,7 @@ export default {
this.form.latitude = location.lat; // this.form.latitude = location.lat; //
this.mapDialogVisible = false; // this.mapDialogVisible = false; //
}, },
/** 导出按钮操作 */ /* 导出按钮操作 */
handleExport() { handleExport() {
this.download( this.download(
"/gysl/basicInformation/export", "/gysl/basicInformation/export",
@ -661,47 +855,6 @@ export default {
`基本信息导出${new Date().getTime()}.xlsx` `基本信息导出${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() { edit() {
this.dialogVisible = true; this.dialogVisible = true;
@ -741,7 +894,7 @@ export default {
return { return {
...formData, ...formData,
begainTime: formatDate(formData.begainTime), // begainTime begainTime: formatDate(formData.begainTime), // begainTime
endTime: formatDate(formData.endTime), endTime: formatDate(formData.endTime),
createBy: "", createBy: "",
createId: 0, createId: 0,
createTime: "", createTime: "",
@ -840,8 +993,8 @@ export default {
} }
.picturediv { .picturediv {
width: 18.31rem; width: 24.4rem;
height: 25rem; height: 26rem;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
} }
@ -859,7 +1012,7 @@ export default {
} }
.descriptionsdiv { .descriptionsdiv {
width: calc(100% - 18.31rem); width: calc(100% - 25rem);
margin-left: 1rem; margin-left: 1rem;
height: auto; height: auto;
} }

@ -18,7 +18,8 @@
style=" style="
border: none; border: none;
background-color: rgba(43, 98, 241, 0.1); background-color: rgba(43, 98, 241, 0.1);
color: #2b62f1;" color: #2b62f1;
"
@click="addBuildingTag" @click="addBuildingTag"
> >
<img <img
@ -130,70 +131,113 @@
<el-descriptions class="margin-top" :column="4" border> <el-descriptions class="margin-top" :column="4" border>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
<span style="color: red;">*</span> <span style="color: red">*</span>是否为重要楼栋
是否为重要楼栋</template> </template>
{{ getTextForBoolean(selectedBuilding.sfwzyld) }} {{ getTextForBoolean(selectedBuilding.sfwzyld) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
<span style="color: red;">*</span>层数</template> <span style="color: red">*</span>层数
</template>
{{ selectedBuilding.floor }} {{ selectedBuilding.floor }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
<span style="color: red;">*</span>总建筑高度</template> <span style="color: red">*</span>总建筑高度
</template>
{{ selectedBuilding.totalBuildingHeight }} {{ selectedBuilding.totalBuildingHeight }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"><span style="color: red;">*</span>首层高度平方米</template> <template slot="label">
<span style="color: red">*</span>首层高度
</template>
{{ selectedBuilding.scgd }} {{ selectedBuilding.scgd }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label">2至4层层高</template> <template slot="label">
<span style="color: red">*</span>2至4层层高
</template>
{{ selectedBuilding.twoAndFourCg }} {{ selectedBuilding.twoAndFourCg }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label">4层以上层高()</template> <template slot="label">
<span style="color: red">*</span>4层以上层高()
</template>
{{ selectedBuilding.fourYscg }} {{ selectedBuilding.fourYscg }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"><span style="color: red;">*</span>首层地面荷载(/)</template> <template slot="label">
<span style="color: red">*</span>首层地面荷载(/平方米)
</template>
{{ selectedBuilding.scdmhz }} {{ selectedBuilding.scdmhz }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label">二至三层楼面荷载(/平方米)</template> <template slot="label">
<span style="color: red">*</span>二至三层楼面荷载(/平方米)
</template>
{{ selectedBuilding.twoAndThreeLmhz }} {{ selectedBuilding.twoAndThreeLmhz }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"><span style="color: red;">*</span>标准层面积(千平方米)</template> <template slot="label">
<span style="color: red">*</span>标准层面积(千平方米)
</template>
{{ selectedBuilding.bzcmj }} {{ selectedBuilding.bzcmj }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label">柱距</template> <template slot="label">
<span style="color: red">*</span>柱距
</template>
{{ selectedBuilding.zj }} {{ selectedBuilding.zj }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label">是否有吊装口</template> <template slot="label">
<span style="color: red">*</span>是否有吊装口
</template>
{{ getTextForBoolean(selectedBuilding.sfydzk) }} {{ getTextForBoolean(selectedBuilding.sfydzk) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label">是否有汽车盘道</template> <template slot="label">
<span style="color: red">*</span>是否有汽车盘道
</template>
{{ getTextForBoolean(selectedBuilding.sfyqcpd) }} {{ getTextForBoolean(selectedBuilding.sfyqcpd) }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label">四层及以上楼面荷载(/平方米)</template> <template slot="label">
<span style="color: red">*</span>四层及以上楼面荷载(/平方米)
</template>
{{ selectedBuilding.fourYslmhz }} {{ selectedBuilding.fourYslmhz }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> 地基基础等级</template> <template slot="label">
<span style="color: red">*</span>地基基础等级
</template>
{{ selectedBuilding.djjcdj }} {{ selectedBuilding.djjcdj }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> 吊车情况</template> <template slot="label">
<span style="color: red">*</span>吊车情况
</template>
{{ selectedBuilding.dcqk }} {{ selectedBuilding.dcqk }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> 货梯情况</template> <template slot="label">
<span style="color: red">*</span>货梯情况
</template>
{{ selectedBuilding.htqk }} {{ selectedBuilding.htqk }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
@ -275,7 +319,7 @@
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="2至4层层高" porp="twoAndFourCg"> <el-form-item label="2至4层层高" prop="twoAndFourCg">
<el-input <el-input
v-model="buildingForm.twoAndFourCg" v-model="buildingForm.twoAndFourCg"
placeholder="请输入2至4层层高" placeholder="请输入2至4层层高"
@ -547,6 +591,14 @@ export default {
trigger: "blur", trigger: "blur",
}, },
], ],
fourYscg: [
{
required: true,
message: "请输入4层以上层高",
trigger: "blur",
},
],
zj: [{ required: true, message: "请输入柱距", trigger: "blur" }],
scdmhz: [ scdmhz: [
{ {
required: true, required: true,
@ -554,6 +606,13 @@ export default {
trigger: "blur", trigger: "blur",
}, },
], ],
twoAndThreeLmhz: [
{
required: true,
message: "请输入二至三层楼面荷载(吨/平方米)",
trigger: "blur",
},
],
bzcmj: [ bzcmj: [
{ {
required: true, required: true,
@ -561,6 +620,28 @@ export default {
trigger: "blur", trigger: "blur",
}, },
], ],
sfydzk: [
{ required: true, message: "请选择是否有吊装口", trigger: "change" },
],
sfyqcpd: [
{
required: true,
message: "请选择是否有汽车盘道",
trigger: "change",
},
],
fourYslmhz: [
{
required: true,
message: "请输入四层及以上楼面荷载(吨/平方米)",
trigger: "blur",
},
],
djjcdj: [
{ required: true, message: "请输入地基基础等级", trigger: "blur" },
],
dcqk: [{ required: true, message: "请输入吊车情况", trigger: "blur" }],
htqk: [{ required: true, message: "请输入货梯情况", trigger: "blur" }],
}, },
}; };
}, },

@ -128,7 +128,7 @@
<span v-else>{{ scope.row.jyfw }}</span> <span v-else>{{ scope.row.jyfw }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="zzjgdm" label='组织机构代码'> <!-- <el-table-column prop="zzjgdm" label='组织机构代码'>
<template slot-scope="scope"> <template slot-scope="scope">
<el-input v-if="scope.row.isEditing" v-model.number="scope.row.zzjgdm"></el-input> <el-input v-if="scope.row.isEditing" v-model.number="scope.row.zzjgdm"></el-input>
<span v-else>{{ scope.row.zzjgdm }}</span> <span v-else>{{ scope.row.zzjgdm }}</span>
@ -139,7 +139,7 @@
<el-input v-if="scope.row.isEditing" v-model.number="scope.row.swdjhm"></el-input> <el-input v-if="scope.row.isEditing" v-model.number="scope.row.swdjhm"></el-input>
<span v-else>{{ scope.row.swdjhm }}</span> <span v-else>{{ scope.row.swdjhm }}</span>
</template> </template>
</el-table-column> </el-table-column> -->
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="scope.row.isEditing" size="medium" type="text" icon="el-icon-check" <el-button v-if="scope.row.isEditing" size="medium" type="text" icon="el-icon-check"

@ -3,28 +3,70 @@
<!-- 顶部信息 --> <!-- 顶部信息 -->
<div class="containertop"> <div class="containertop">
<div class="topleft"> <div class="topleft">
<img src="@/assets/images/detailsicon/1.png" alt=""> <img src="@/assets/images/detailsicon/1.png" alt="" />
<span>其他信息</span> <span>其他信息</span>
</div> </div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'"> <div
<el-button type="primary" size="medium" plain v-if="checkRole(['admin', 'common','gov'])" class="topright"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="openDialog('add')"> v-if="action === 'fill' || !action || action === 'okay'"
<img src="@/assets/images/detailsicon/icon-bj@2x.png" alt="新增" >
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;"> <el-button
type="primary"
size="medium"
plain
v-if="checkRole(['admin', 'common', 'gov'])"
style="
border: none;
background-color: rgba(43, 98, 241, 0.1);
color: #2b62f1;
"
@click="openDialog('add')"
>
<img
src="@/assets/images/detailsicon/icon-bj@2x.png"
alt="新增"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px"
/>
新增 新增
</el-button> </el-button>
<el-button type="primary" size="medium" plain v-if="action === 'fill' || !action || action === 'okay'" <el-button
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="toggleEditMode" type="primary"
:loading="saveLoading"> size="medium"
<img src="@/assets/images/detailsicon/icon-bj@2x.png" alt="编辑" plain
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;"> v-if="action === 'fill' || !action || action === 'okay'"
{{ isEditMode ? '保存' : '编辑' }} style="
border: none;
background-color: rgba(43, 98, 241, 0.1);
color: #2b62f1;
"
@click="toggleEditMode"
:loading="saveLoading"
>
<img
src="@/assets/images/detailsicon/icon-bj@2x.png"
alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px"
/>
{{ isEditMode ? "保存" : "编辑" }}
</el-button> </el-button>
<el-button type="primary" size="medium" plain v-if="checkRole(['admin', 'common','gov'])" <el-button
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleExport"> type="primary"
<img src="@/assets/images/detailsicon/icon-dc@2x.png" alt="导出" size="medium"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;"> plain
导出 v-if="checkRole(['admin', 'common', 'gov'])"
style="
border: none;
background-color: rgba(43, 98, 241, 0.1);
color: #2b62f1;
"
@click="handleExport"
>
<img
src="@/assets/images/detailsicon/icon-dc@2x.png"
alt="导出"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px"
/>
导出
</el-button> </el-button>
</div> </div>
</div> </div>
@ -33,16 +75,30 @@
<div class="tagdiv"> <div class="tagdiv">
<div class="descriptionsdiv"> <div class="descriptionsdiv">
<el-descriptions class="margin-top" :column="5" border> <el-descriptions class="margin-top" :column="5" border>
<el-descriptions-item v-for="(item, index) in anotherInfo" :key="index" :label="item.zdname"> <el-descriptions-item
v-for="(item, index) in anotherInfo"
:key="index"
:label="item.zdname"
>
<template v-if="isEditMode"> <template v-if="isEditMode">
<el-input v-model="item.zdinfor" size="small" @change="handleFieldChange(item)" <el-input
style="width:7rem;"></el-input> v-model="item.zdinfor"
size="small"
@change="handleFieldChange(item)"
style="width: 7rem"
></el-input>
</template> </template>
<template v-else> <template v-else>
{{ item.zdinfor }} {{ item.zdinfor }}
</template> </template>
<el-button v-if="checkRole(['admin', 'common','gov']) && isEditMode" type="text" size="small" @click="handleDeleteField(item)" <el-button
style="margin-left: 1rem;color: #F25353;">删除</el-button> v-if="checkRole(['admin', 'common', 'gov']) && isEditMode"
type="text"
size="small"
@click="handleDeleteField(item)"
style="margin-left: 1rem; color: #f25353"
>删除</el-button
>
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
@ -52,10 +108,16 @@
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="30%"> <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="30%">
<el-form :model="form" label-width="80px"> <el-form :model="form" label-width="80px">
<el-form-item label="字段名称"> <el-form-item label="字段名称">
<el-input v-model="form.zdname" placeholder="请输入字段名称"></el-input> <el-input
v-model="form.zdname"
placeholder="请输入字段名称"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="字段内容"> <el-form-item label="字段内容">
<el-input v-model="form.zdinfor" placeholder="请输入字段内容 "></el-input> <el-input
v-model="form.zdinfor"
placeholder="请输入字段内容 "
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
@ -75,29 +137,29 @@ export default {
anotherInfo: { anotherInfo: {
type: Array, type: Array,
required: true, required: true,
default: () => [] default: () => [],
}, },
action: { action: {
type: String, type: String,
required: true required: true,
}, },
xmId: { xmId: {
type: Number, type: Number,
default: 0 default: 0,
} },
}, },
created() { }, created() {},
data() { data() {
return { return {
dialogVisible: false, // dialogVisible: false, //
dialogTitle: '', // dialogTitle: "", //
form: { form: {
zdname: '', zdname: "",
zdinfor: '' zdinfor: "",
}, },
isEditMode: false, // isEditMode: false, //
saveLoading: false, // saveLoading: false, //
editedData: [] // editedData: [], //
}; };
}, },
methods: { methods: {
@ -106,11 +168,11 @@ export default {
// //
openDialog(type) { openDialog(type) {
if (type === 'add') { if (type === "add") {
this.dialogTitle = '新增信息'; this.dialogTitle = "新增信息";
this.form = { this.form = {
zdname: '', zdname: "",
zdinfor: '' zdinfor: "",
}; };
this.dialogVisible = true; this.dialogVisible = true;
} }
@ -131,7 +193,7 @@ export default {
// //
handleFieldChange(item) { handleFieldChange(item) {
const index = this.editedData.findIndex(i => i.zdname === item.zdname); const index = this.editedData.findIndex((i) => i.zdname === item.zdname);
if (index !== -1) { if (index !== -1) {
this.editedData[index] = { ...item }; this.editedData[index] = { ...item };
} }
@ -139,26 +201,28 @@ export default {
// //
saveChanges() { saveChanges() {
this.editedData = JSON.parse(JSON.stringify(this.anotherInfo));
this.saveLoading = true; this.saveLoading = true;
try { try {
// //
const updatedData = this.editedData.map(item => ({ const updatedData = this.editedData.map((item) => ({
...item, ...item,
})); }));
// //
this.$emit('update-info', updatedData); this.$emit("update-info", updatedData);
// anotherInfo // anotherInfo
this.anotherInfo = updatedData; this.anotherInfo = updatedData;
// 退 // 退
this.isEditMode = false; this.isEditMode = false;
this.$message.success('保存成功'); this.$message.success("保存成功");
} catch (error) { } catch (error) {
console.error('保存失败:', error); console.error("保存失败:", error);
this.$message.error('保存失败: ' + (error.message || '请检查网络连接')); this.$message.error("保存失败: " + (error.message || "请检查网络连接"));
} finally { } finally {
this.saveLoading = false; this.saveLoading = false;
} }
@ -175,91 +239,58 @@ export default {
}, },
// //
async handleDeleteField(item) { async handleDeleteField(item) {
this.$confirm(`确定要删除字段 "${item.zdname}" 吗?`, '提示', { const confirmed = await this.$confirm(
confirmButtonText: '确定', `确定要删除字段 "${item.zdname}" 吗?`,
cancelButtonText: '取消', "提示",
type: 'warning' {
}).then(async () => { confirmButtonText: "确定",
try { cancelButtonText: "取消",
// API type: "warning",
await deletexmqt([item.id]);
// editedData
if (this.isEditMode) {
this.editedData = this.editedData.filter(i => i.id !== item.id);
}
// anotherInfo
this.anotherInfo = this.anotherInfo.filter(i => i.id !== item.id);
//
this.$emit('delete-info', item.id);
this.$message.success('删除成功');
} catch (error) {
this.$message.error('删除失败: ' + (error.message || '请检查网络连接'));
} }
}).catch(() => { ).catch(() => false);
this.$message.info('已取消删除');
}); if (!confirmed) {
this.$message.info("已取消删除");
return;
}
try {
// 1.
await deletexmqt([item.id]);
// 2.
this.$emit("refresh-data");
this.$message.success("删除成功");
} catch (error) {
this.$message.error("删除失败: " + (error.message || "请检查网络连接"));
}
}, },
// //
async submitForm() { async submitForm() {
if (!this.form.zdname || !this.form.zdinfor) {
this.$message.warning('请填写完整的字段名称和内容');
return;
}
try { try {
//
const requestData = { const requestData = {
xmId: this.xmId, // 使ID xmId: this.xmId,
zdname: this.form.zdname, zdname: this.form.zdname,
zdinfor: this.form.zdinfor, zdinfor: this.form.zdinfor,
// 使
createBy: "",
createId: 0,
createTime: "",
updateBy: "",
updateId: 0,
updateTime: ""
}; };
// API
const response = await addxmqt(requestData); const response = await addxmqt(requestData);
console.log('新增成功:', response);
// anotherInfo console.log("新增成功:", response);
this.anotherInfo.push({
id: response.data.id, //
zdname: this.form.zdname, this.$emit("refresh-data");
zdinfor: this.form.zdinfor
});
//
this.dialogVisible = false; this.dialogVisible = false;
this.$message.success('新增成功'); this.$message.success("新增成功");
} catch (error) { } catch (error) {
this.$message.error('新增失败: ' + (error.message || '请检查网络连接')); this.$message.error("新增失败: " + (error.message || "请检查网络连接"));
} }
}, },
},
// };
deleteData() {
this.$confirm('确定要删除这些信息吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$emit('delete-info');
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
}
}
}
</script> </script>
<style scoped> <style scoped>
@ -267,7 +298,7 @@ export default {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
background-color: #FFFFFF; background-color: #ffffff;
box-shadow: 0rem 0.13rem 0.63rem 0rem rgba(177, 177, 177, 0.1); box-shadow: 0rem 0.13rem 0.63rem 0rem rgba(177, 177, 177, 0.1);
border-radius: 0.5rem 0.5rem 0.5rem 0.5rem; border-radius: 0.5rem 0.5rem 0.5rem 0.5rem;
} }
@ -278,19 +309,19 @@ export default {
} }
.containertop { .containertop {
height: auto; height: auto;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding: .5rem; padding: 0.5rem;
border-bottom: 1px solid #E5E5E5; border-bottom: 1px solid #e5e5e5;
} }
.topleft { .topleft {
height: 2rem; height: 2rem;
width: 8rem; width: 8rem;
display: flex; display: flex;
gap: 0.4rem; gap: 0.4rem;
align-items: center; align-items: center;
} }
.topleft img { .topleft img {
@ -304,7 +335,7 @@ export default {
font-family: aliregular; font-family: aliregular;
font-weight: 500; font-weight: 500;
font-size: 1rem; font-size: 1rem;
color: #3D424C; color: #3d424c;
line-height: 1rem; line-height: 1rem;
text-align: right; text-align: right;
font-style: normal; font-style: normal;
@ -340,4 +371,4 @@ export default {
justify-content: space-between; justify-content: space-between;
margin-top: 1rem; margin-top: 1rem;
} }
</style> </style>

@ -3,26 +3,68 @@
<!-- 顶部信息 --> <!-- 顶部信息 -->
<div class="containertop"> <div class="containertop">
<div class="topleft"> <div class="topleft">
<img src="@/assets/images/detailsicon/1.png" alt=""> <img src="@/assets/images/detailsicon/1.png" alt="" />
<span>规划信息</span> <span>规划信息</span>
</div> </div>
<div class="topright" v-if="action === 'fill' || !action || action === 'okay'"> <div
<el-button v-if="!isEditing" type="primary" size="medium" plain class="topright"
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="edit"> v-if="action === 'fill' || !action || action === 'okay'"
<img src="@/assets/images/detailsicon/icon-bj@2x.png" alt="编辑" >
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;"> <el-button
v-if="!isEditing"
type="primary"
size="medium"
plain
style="
border: none;
background-color: rgba(43, 98, 241, 0.1);
color: #2b62f1;
"
@click="edit"
>
<img
src="@/assets/images/detailsicon/icon-bj@2x.png"
alt="编辑"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px"
/>
编辑 编辑
</el-button> </el-button>
<el-button v-else type="primary" size="medium" plain <el-button
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="save"> v-else
<img src="@/assets/images/detailsicon/icon-bj@2x.png" alt="保存" type="primary"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;"> size="medium"
plain
style="
border: none;
background-color: rgba(43, 98, 241, 0.1);
color: #2b62f1;
"
@click="save"
>
<img
src="@/assets/images/detailsicon/icon-bj@2x.png"
alt="保存"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px"
/>
保存 保存
</el-button> </el-button>
<el-button type="primary" size="medium" plain v-if="checkRole(['admin', 'common','gov'])" <el-button
style="border: none;background-color: rgba(43,98,241,0.1);color: #2B62F1;" @click="handleExport"> type="primary"
<img src="@/assets/images/detailsicon/icon-dc@2x.png" alt="导出" size="medium"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px;"> plain
v-if="checkRole(['admin', 'common', 'gov'])"
style="
border: none;
background-color: rgba(43, 98, 241, 0.1);
color: #2b62f1;
"
@click="handleExport"
>
<img
src="@/assets/images/detailsicon/icon-dc@2x.png"
alt="导出"
style="width: 0.6rem; height: 0.6rem; margin-right: 4px"
/>
导出 导出
</el-button> </el-button>
</div> </div>
@ -33,100 +75,200 @@
<el-descriptions class="margin-top" :column="4" border> <el-descriptions class="margin-top" :column="4" border>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
<span style="color: red;">*</span> <span style="color: red">*</span>总用地面积(平方米)
总用地面积(平方米)
</template> </template>
<el-input v-if="isEditing" v-model="form.zydmj" style="width: 100%;"></el-input> <el-input
v-if="isEditing"
v-model="form.zydmj"
style="width: 100%"
/>
<span v-else>{{ form.zydmj }}</span> <span v-else>{{ form.zydmj }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
<span style="color: red;">*</span> <span style="color: red">*</span>容积率
容积率
</template> </template>
<el-input v-if="isEditing" v-model="form.rjl" style="width: 100%;"></el-input> <el-input v-if="isEditing" v-model="form.rjl" style="width: 100%" />
<span v-else>{{ form.rjl }}</span> <span v-else>{{ form.rjl }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
<span style="color: red;">*</span> <span style="color: red">*</span>总建筑面积平方米
总建筑面积平方米
</template> </template>
<el-input v-if="isEditing" v-model="form.zjzmj" style="width: 100%;"></el-input> <el-input
v-if="isEditing"
v-model="form.zjzmj"
style="width: 100%"
/>
<span v-else>{{ form.zjzmj }}</span> <span v-else>{{ form.zjzmj }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="标准层建筑面积(平方米)">
<el-input v-if="isEditing" v-model="form.bzcjzmj" style="width: 100%;"></el-input> <el-descriptions-item>
<template slot="label">
<span style="color: red">*</span>标准层建筑面积平方米
</template>
<el-input
v-if="isEditing"
v-model="form.bzcjzmj"
style="width: 100%"
/>
<span v-else>{{ form.bzcjzmj }}</span> <span v-else>{{ form.bzcjzmj }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="计容积率建筑面积(平方米)">
<el-input v-if="isEditing" v-model="form.jrjljzmj" style="width: 100%;"></el-input> <el-descriptions-item>
<template slot="label">
<span style="color: red">*</span>计容积率建筑面积(平方米)
</template>
<el-input
v-if="isEditing"
v-model="form.jrjljzmj"
style="width: 100%"
/>
<span v-else>{{ form.jrjljzmj }}</span> <span v-else>{{ form.jrjljzmj }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="建筑密度(%)">
<el-input v-if="isEditing" v-model="form.jzmd" style="width: 100%;"></el-input> <el-descriptions-item>
<template slot="label">
<span style="color: red">*</span>建筑密度(%)
</template>
<el-input
v-if="isEditing"
v-model="form.jzmd"
style="width: 100%"
/>
<span v-else>{{ form.jzmd }}</span> <span v-else>{{ form.jzmd }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="绿地率(%)">
<el-input v-if="isEditing" v-model="form.ldl" style="width: 100%;"></el-input> <el-descriptions-item>
<template slot="label">
<span style="color: red">*</span>绿地率(%)
</template>
<el-input v-if="isEditing" v-model="form.ldl" style="width: 100%" />
<span v-else>{{ form.ldl }}</span> <span v-else>{{ form.ldl }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
<span style="color: red;">*</span> <span style="color: red">*</span>建筑栋数
建筑栋数
</template> </template>
<el-input v-if="isEditing" v-model="form.jzds" style="width: 100%;"></el-input> <el-input
v-if="isEditing"
v-model="form.jzds"
style="width: 100%"
/>
<span v-else>{{ form.jzds }}</span> <span v-else>{{ form.jzds }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="地上建筑面积(平方米)">
<el-input v-if="isEditing" v-model="form.dsjzmj" style="width: 100%;"></el-input> <el-descriptions-item>
<template slot="label">
<span style="color: red">*</span>地上建筑面积(平方米)
</template>
<el-input
v-if="isEditing"
v-model="form.dsjzmj"
style="width: 100%"
/>
<span v-else>{{ form.dsjzmj }}</span> <span v-else>{{ form.dsjzmj }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="地下建筑面积(平方米)">
<el-input v-if="isEditing" v-model="form.dxjzmj" style="width: 100%;"></el-input> <el-descriptions-item>
<template slot="label">
<span style="color: red">*</span>地下建筑面积(平方米)
</template>
<el-input
v-if="isEditing"
v-model="form.dxjzmj"
style="width: 100%"
/>
<span v-else>{{ form.dxjzmj }}</span> <span v-else>{{ form.dxjzmj }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
<span style="color: red;">*</span> <span style="color: red">*</span>最高建筑层数
最高建筑层数
</template> </template>
<el-input v-if="isEditing" v-model="form.zgjzcs" style="width: 100%;"></el-input> <el-input
v-if="isEditing"
v-model="form.zgjzcs"
style="width: 100%"
/>
<span v-else>{{ form.zgjzcs }}</span> <span v-else>{{ form.zgjzcs }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="最高建筑高度(米)">
<el-input v-if="isEditing" v-model="form.zgjzgd" style="width: 100%;"></el-input> <el-descriptions-item>
<template slot="label">
<span style="color: red">*</span>最高建筑高度()
</template>
<el-input
v-if="isEditing"
v-model="form.zgjzgd"
style="width: 100%"
/>
<span v-else>{{ form.zgjzgd }}</span> <span v-else>{{ form.zgjzgd }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="机动车停车位(辆)">
<el-input v-if="isEditing" v-model="form.jdctcw" style="width: 100%;"></el-input> <el-descriptions-item>
<template slot="label">
<span style="color: red">*</span>机动车停车位()
</template>
<el-input
v-if="isEditing"
v-model="form.jdctcw"
style="width: 100%"
/>
<span v-else>{{ form.jdctcw }}</span> <span v-else>{{ form.jdctcw }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="非机动车停车位(辆)">
<el-input v-if="isEditing" v-model="form.fjdctcw" style="width: 100%;"></el-input> <el-descriptions-item>
<template slot="label">
<span style="color: red">*</span>非机动车停车位()
</template>
<el-input
v-if="isEditing"
v-model="form.fjdctcw"
style="width: 100%"
/>
<span v-else>{{ form.fjdctcw }}</span> <span v-else>{{ form.fjdctcw }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item> <el-descriptions-item>
<template slot="label"> <template slot="label">
<span style="color: red;">*</span> <span style="color: red">*</span>防火等级
防火等级
</template> </template>
<el-input v-if="isEditing" v-model="form.fhdj" style="width: 100%;"></el-input> <el-input
v-if="isEditing"
v-model="form.fhdj"
style="width: 100%"
/>
<span v-else>{{ form.fhdj }}</span> <span v-else>{{ form.fhdj }}</span>
</el-descriptions-item> </el-descriptions-item>
<!-- 非必填 -->
<el-descriptions-item label="规划文件"> <el-descriptions-item label="规划文件">
<div v-if="isEditing"> <div v-if="isEditing">
<span v-if="form.ghwj">{{ form.ghwj.split('/').pop() }}</span> <span v-if="form.ghwj">{{ form.ghwj.split("/").pop() }}</span>
<el-tooltip class="item" effect="dark" content="支持pdf或word文件大小不得超过50MB" placement="top-start"> <el-tooltip
<el-button type="text" icon="el-icon-upload" @click="showFileDialog"> class="item"
effect="dark"
content="支持pdf或word文件大小不得超过50MB"
placement="top-start"
>
<el-button
type="text"
icon="el-icon-upload"
@click="showFileDialog"
>
<span v-if="form.ghwj"></span> <span v-if="form.ghwj"></span>
<span v-else></span> <span v-else></span>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
</div> </div>
<span v-else> <span v-else>
<a v-if="form.ghwj" :href="form.ghwj" target="_blank">{{ form.ghwj.split('/').pop() }}</a> <a v-if="form.ghwj" :href="form.ghwj" target="_blank">{{
form.ghwj.split("/").pop()
}}</a>
<span v-else></span> <span v-else></span>
</span> </span>
</el-descriptions-item> </el-descriptions-item>
@ -138,14 +280,16 @@
<FileUpload @file-uploaded="handleFileUploaded" v-model="form.ghwj" /> <FileUpload @file-uploaded="handleFileUploaded" v-model="form.ghwj" />
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button> <el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="dialogVisible = false"> </el-button> <el-button type="primary" @click="dialogVisible = false"
> </el-button
>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import FileUpload from '@/components/FileUpload2' import FileUpload from "@/components/FileUpload2";
import { checkPermi, checkRole } from "@/utils/permission"; import { checkPermi, checkRole } from "@/utils/permission";
export default { export default {
@ -153,20 +297,20 @@ export default {
props: { props: {
size: { size: {
type: String, type: String,
default: '' default: "",
}, },
planInfo: { planInfo: {
type: Object, type: Object,
required: true required: true,
}, },
xmId: { xmId: {
type: Number, type: Number,
required: true required: true,
}, },
action: { action: {
type: String, type: String,
required: true required: true,
} },
}, },
data() { data() {
return { return {
@ -191,17 +335,15 @@ export default {
jdctcw: 0, jdctcw: 0,
fjdctcw: 0, fjdctcw: 0,
fhdj: null, fhdj: null,
ghwj: '', ghwj: "",
createBy: '', createBy: "",
createId: 0, createId: 0,
createTime: null, createTime: null,
updateBy: '', updateBy: "",
updateId: 0, updateId: 0,
updateTime: null, updateTime: null,
}, },
rules: { rules: {},
}
}; };
}, },
watch: { watch: {
@ -210,8 +352,8 @@ export default {
this.form = { ...newVal }; this.form = { ...newVal };
}, },
immediate: true, immediate: true,
deep: true deep: true,
} },
}, },
methods: { methods: {
checkPermi, checkPermi,
@ -221,7 +363,7 @@ export default {
this.download( this.download(
"/gysl/planInformation/export", "/gysl/planInformation/export",
{ {
xmId: this.form.xmId xmId: this.form.xmId,
}, },
`规划信息${new Date().getTime()}.xlsx` `规划信息${new Date().getTime()}.xlsx`
); );
@ -229,24 +371,39 @@ export default {
// //
edit() { edit() {
this.isEditing = true; this.isEditing = true;
document.addEventListener('click', this.handleClickOutside); document.addEventListener("click", this.handleClickOutside);
}, },
// //
save() { save() {
if (this.validateForm()) { if (this.validateForm()) {
const formData = this.prepareFormData(this.form); const formData = this.prepareFormData(this.form);
// //
this.$emit('update-data', formData); this.$emit("update-data", formData);
this.isEditing = false; this.isEditing = false;
document.removeEventListener('click', this.handleClickOutside); document.removeEventListener("click", this.handleClickOutside);
} }
}, },
// //
validateForm() { validateForm() {
const requiredFields = ['zydmj', 'rjl', 'zjzmj', 'jzds', 'zgjzcs', 'fhdj']; const requiredFields = [
"zydmj",
"rjl",
"zjzmj",
"bzcjzmj",
"jrjljzmj",
"jzmd",
"ldl",
"jzds",
"dsjzmj",
"dxjzmj",
"zgjzcs",
"jdctcw",
"fjdctcw",
"fhdj",
];
for (const field of requiredFields) { for (const field of requiredFields) {
if (!this.form[field]) { if (!this.form[field]) {
this.$message.error('请填写完整的规划信息'); this.$message.error("请填写完整的规划信息");
return false; return false;
} }
} }
@ -256,12 +413,12 @@ export default {
prepareFormData(formData) { prepareFormData(formData) {
return { return {
...formData, ...formData,
createBy: '', createBy: "",
createId: 0, createId: 0,
createTime: '', createTime: "",
updateBy: '', updateBy: "",
updateId: 0, updateId: 0,
updateTime: '' updateTime: "",
}; };
}, },
// //
@ -274,11 +431,14 @@ export default {
}, },
handleClickOutside(event) { handleClickOutside(event) {
const saveButton = this.$el.querySelector('.el-button:contains("保存")'); const saveButton = this.$el.querySelector('.el-button:contains("保存")');
if (!this.$el.contains(event.target) || saveButton.contains(event.target)) { if (
!this.$el.contains(event.target) ||
saveButton.contains(event.target)
) {
return; return;
} }
} },
} },
}; };
</script> </script>
@ -287,7 +447,7 @@ export default {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
background-color: #FFFFFF; background-color: #ffffff;
box-shadow: 0rem 0.13rem 0.63rem 0rem rgba(177, 177, 177, 0.1); box-shadow: 0rem 0.13rem 0.63rem 0rem rgba(177, 177, 177, 0.1);
border-radius: 0.5rem 0.5rem 0.5rem 0.5rem; border-radius: 0.5rem 0.5rem 0.5rem 0.5rem;
} }
@ -301,9 +461,9 @@ export default {
height: auto; height: auto;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding: .7rem 0; padding: 0.7rem 0;
padding: .5rem; padding: 0.5rem;
border-bottom: 1px solid #E5E5E5; border-bottom: 1px solid #e5e5e5;
} }
.topleft { .topleft {
@ -325,7 +485,7 @@ export default {
font-family: aliregular; font-family: aliregular;
font-weight: 500; font-weight: 500;
font-size: 1rem; font-size: 1rem;
color: #3D424C; color: #3d424c;
line-height: 1rem; line-height: 1rem;
text-align: right; text-align: right;
font-style: normal; font-style: normal;
@ -337,4 +497,4 @@ export default {
margin-left: 1rem; margin-left: 1rem;
height: auto; height: auto;
} }
</style> </style>

@ -55,7 +55,7 @@
<!-- 类型1轮播图 --> <!-- 类型1轮播图 -->
<div v-if="legend.type1 && legend.type1.images && legend.type1.images.length > 0"> <div v-if="legend.type1 && legend.type1.images && legend.type1.images.length > 0">
<div class="fixed-carousel-container"> <div class="fixed-carousel-container">
<el-carousel height="12.44rem" indicator-position="outside" class="fixed-carousel"> <el-carousel height="12.44rem" :autoplay=false indicator-position="outside" class="fixed-carousel">
<el-carousel-item v-for="(img, imgIndex) in legend.type1.images" <el-carousel-item v-for="(img, imgIndex) in legend.type1.images"
:key="'type1-' + imgIndex"> :key="'type1-' + imgIndex">
<div class="carousel-item-wrapper"> <div class="carousel-item-wrapper">
@ -70,7 +70,7 @@
<!-- 类型2轮播图 --> <!-- 类型2轮播图 -->
<div v-if="legend.type2 && legend.type2.images && legend.type2.images.length > 0"> <div v-if="legend.type2 && legend.type2.images && legend.type2.images.length > 0">
<div class="fixed-carousel-container"> <div class="fixed-carousel-container">
<el-carousel height="12.44rem" indicator-position="outside" class="fixed-carousel"> <el-carousel height="12.44rem" :autoplay=false indicator-position="outside" class="fixed-carousel">
<el-carousel-item v-for="(img, imgIndex) in legend.type2.images" <el-carousel-item v-for="(img, imgIndex) in legend.type2.images"
:key="'type2-' + imgIndex"> :key="'type2-' + imgIndex">
<div class="carousel-item-wrapper"> <div class="carousel-item-wrapper">

@ -47,7 +47,7 @@
</div> </div>
<div class="dialog-content"> <div class="dialog-content">
<!-- @click="goToDetail" --> <!-- @click="goToDetail" -->
<div class="dialog-title" @click="goToDetail">{{ selectedProject.name }}</div> <div class="dialog-title">{{ selectedProject.name }}</div>
<div class="dialog-info"> <div class="dialog-info">
<p><span class="label">状态:</span> <p><span class="label">状态:</span>
<span class="value" :style="{ color: xzflColors[xzflMap[selectedProject.xzfl]] }"> <span class="value" :style="{ color: xzflColors[xzflMap[selectedProject.xzfl]] }">
@ -150,7 +150,6 @@ export default {
zoom: 11, zoom: 11,
minZoom: 10, minZoom: 10,
maxZoom: 20, maxZoom: 20,
// zoomControl: true,
chinaCRS: 'GCJ02' chinaCRS: 'GCJ02'
}, },
map: null map: null
@ -498,7 +497,7 @@ export default {
/* 所有容器 */ /* 所有容器 */
.container { .container {
position: relative; position: relative;
height: 22rem; height: 100%;
} }
.mapareaone { .mapareaone {

@ -0,0 +1,357 @@
<template>
<div class="login">
<div class="loginleft">
</div>
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<img src="@/assets/images/logo@2x.png" alt="">
<div class="title">苏州工业园区工业上楼管理系统</div>
<div class="logintabs">
<el-tabs v-model="activeName" :stretch="true" color="#216CDC">
<el-tab-pane label="企业用户登录" name="first"></el-tab-pane>
<el-tab-pane label="政务人员登录" name="second"></el-tab-pane>
</el-tabs>
</div>
<!-- <el-form-item prop="username" class="loginitem" style="margin-top: 1rem;">
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
</el-input>
</el-form-item>
<el-form-item prop="password" class="loginitem">
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码"
@keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input>
</el-form-item> -->
<!-- <el-form-item prop="code" v-if="captchaEnabled" class="loginitem">
<el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%"
@keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img" style="width: 8.56rem;" />
</div>
</el-form-item> -->
<!-- <el-checkbox v-model="loginForm.rememberMe" style="margin:1rem 18.6rem 25px 0px;"></el-checkbox> -->
<el-form-item style="width:24rem;;margin-top: 1rem;">
<!-- <el-button :loading="loading" size="medium" type="primary" style="width:100%;background: #2B62F1;"
@click.native.prevent="handleLogin">
<span v-if="!loading"> </span>
<span v-else> ...</span>
</el-button> -->
<el-button v-if="showGovernmentLoginButton" size="medium" type="primary" class="tongyidenglu"
style="width:100%;background: #2B62F1;" @click.native.prevent="handleGovernmentLogin">
<span>政务统一身份认证登录</span>
</el-button>
<el-button v-if="showEnterpriseLoginButton" size="medium" type="primary" class="tongyidenglu"
style="width:100%;background: #2B62F1;" @click.native.prevent="handleEnterpriseLogin">
<span>企业统一身份认证登录</span>
</el-button>
</el-form-item>
<div style="font-size: 0.88rem;color: #333;">主办单位苏州工业园区经济发展委员会</div>
</el-form>
<!-- 底部 -->
<div class="el-login-footer">
<span></span>
</div>
</div>
</template>
<script>
import { getCodeImg } from '@/api/login'
import Cookies from 'js-cookie'
import { encrypt, decrypt } from '@/utils/jsencrypt'
import forge from 'node-forge'
export default {
name: 'Login',
data() {
return {
codeUrl: '',
activeName: 'second',
loginForm: {
username: '',
password: '',
rememberMe: false,
code: '',
uuid: '',
loginRole: 2
},
loginRules: {
username: [
{ required: true, trigger: 'blur', message: '请输入您的账号' }
],
password: [
{ required: true, trigger: 'blur', message: '请输入您的密码' }
],
code: [{ required: true, trigger: 'change', message: '请输入验证码' }]
},
loading: false,
captchaEnabled: true,
register: false,
redirect: undefined,
a1: `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl8bS1kYTiMhIS5MZU253bc0ukaxrA1lfCziABFxQrC2c09tMrQGjuH6V1x2ofNBMGhOD9uWN/qkAQy/HwOe/NKUqCw6N0ov6guSrqMDW/BdZ3Bl0rmM1/95jTC1xffFFvej7xWNffIbaPI+bJ4WLX9NViNi9HmT0BRNzJ4d2R86LPPCa+bxLaPjsh2R2tBkbLkUot9769aJaPPiwPCZHMkuQenjHSmpWL0okleqMH8EGX7j6A5A/4IUXPMNKMMzkiSRpsIJ65GJmDAbnR3ZXRfC8MzVBBJB6zr5N0F4N9xZfF+JS/Yx726tCu+rA6GDCyTxtQ/wnKpPdwFP5nUWCWQIDAQAB`
}
},
watch: {
$route: {
handler: function (route) {
this.redirect = route.query && route.query.redirect;
},
immediate: true
},
activeName(newVal) {
if (newVal === 'first') {
this.loginForm.loginRole = 2
} else if (newVal === 'second') {
this.loginForm.loginRole = 1
}
}
},
computed: {
showGovernmentLoginButton() {
return this.activeName === 'second'
},
showEnterpriseLoginButton() {
return this.activeName === 'first'
}
},
created() {
// this.getCode()
// this.getCookie()
location.href = process.env.VUE_APP_BASE_API + "/system/singlelogin/login"
},
methods: {
getCode() {
getCodeImg().then(res => {
this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;
if (this.captchaEnabled) {
this.codeUrl = "data:image/gif;base64," + res.img;
this.loginForm.uuid = res.uuid;
}
});
},
getCookie() {
const username = Cookies.get('username')
const password = Cookies.get('password')
const rememberMe = Cookies.get('rememberMe')
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password: password === undefined ? this.loginForm.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
}
},
handleLogin() {
this.$refs.loginForm.validate(valid => {
if (valid) {
this.loading = true;
if (this.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, { expires: 30 });
Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
} else {
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove('rememberMe');
}
// 2048 RSA
const lines = [];
lines.push('-----BEGIN PUBLIC KEY-----');
for (let i = 0; i < this.a1.length; i += 64) {
lines.push(this.a1.slice(i, i + 64));
}
lines.push('-----END PUBLIC KEY-----');
lines.join('\n')
const publicKey = forge.pki.publicKeyFromPem(lines.join('\n'));
//
var dataBytes = forge.util.encodeUtf8(this.loginForm.password);
//
var encryptedBytes = publicKey.encrypt(dataBytes, 'RSA-OAEP', {
md: forge.md.sha256.create(),
mgf1: {
md: forge.md.sha1.create()
}
});
// Base64
var encryptedBase64 = forge.util.encode64(encryptedBytes);
//
const loginData = {
username: this.loginForm.username,
password: encryptedBase64,
code: this.loginForm.code,
uuid: this.loginForm.uuid,
loginRole: this.activeName === 'first' ? 2 : 1
};
this.$store.dispatch('Login', loginData)
.then(() => {
this.$router.push({ path: this.redirect || '/' }).catch(() => { });
})
.catch((error) => {
this.loading = false;
if (this.captchaEnabled) {
this.getCode();
}
console.error('登录失败:', error);
});
}
});
},
handleGovernmentLogin() {
window.location.href = 'https://qyt.sipac.gov.cn/sipsg-enterprise-mobile-manage/#/login'
},
handleEnterpriseLogin() {
location.href = process.env.VUE_APP_BASE_API + "/system/singlelogin/login";
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep .el-tabs__active-bar {
width: 2rem !important;
margin-left: 3rem;
background-color: #216CDC;
height: 0.21rem;
border-radius: 0.16rem;
}
::v-deep .el-tabs__header {
border-bottom: none !important;
}
::v-deep .el-tabs__item {
font-size: 1rem;
padding: 0 20px;
color: #3D424C;
font-family: Alibaba PuHuiTi;
font-weight: 400;
color: #3D424C;
}
::v-deep .el-tabs__item.is-active {
color: #216CDC;
}
::v-deep .el-tabs__nav-wrap::after {
display: none !important;
}
.tongyidenglu {
margin-top: 1rem;
margin-left: 0rem;
}
.login {
display: flex;
justify-content: center;
align-items: center;
border-radius: 6px 0 0 6px;
height: 100%;
background-image: url('../assets/images/loginbackground.png');
background-size: cover;
}
.loginleft {
width: 35rem;
height: 40rem;
background-image: url('../assets/images/loginleft.png');
background-size: 100% 100%;
background-repeat: no-repeat;
}
.title {
width: 29.13rem;
height: 1.94rem;
font-family: Alibaba PuHuiTi;
font-weight: 500;
font-size: 2rem;
color: #292C33;
line-height: 3.5rem;
text-align: center;
margin-top: 1rem;
}
.loginitem {
width: 24rem;
}
.login-form {
border-radius: 0 6px 6px 0;
background: #ffffff;
width: 50rem;
height: 40rem;
padding: 25px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
img {
width: 6.56rem;
height: 3.56rem;
}
.el-input {
height: 38px;
input {
height: 38px;
}
}
.input-icon {
height: 39px;
width: 14px;
margin-left: 2px;
}
}
.login-tip {
font-size: 13px;
text-align: center;
color: #bfbfbf;
}
.logintabs {
margin-top: 2.88rem;
width: 18rem;
}
.login-code {
width: 35%;
height: 1.8rem;
float: right;
img {
cursor: pointer;
vertical-align: middle;
}
}
.el-login-footer {
height: 40px;
line-height: 40px;
position: fixed;
bottom: 0;
width: 100%;
text-align: center;
color: #333;
font-family: Arial;
font-size: 12px;
letter-spacing: 1px;
}
.login-code-img {
height: 38px;
}
.el-tabs__item.is-active {
color: #216CDC;
position: relative;
padding-bottom: 0.5rem;
}
</style>

@ -6,10 +6,10 @@
<div class="containerheadone" id="listtop"> <div class="containerheadone" id="listtop">
<Title :basicInfo="basicInformation"></Title> <Title :basicInfo="basicInformation"></Title>
<div style="display: flex; gap: 5%; width: auto"> <div style="display: flex; gap: 5%; width: auto">
<div v-if="checkRole(['common','gov']) && action === 'okay'"> <div v-if="checkRole(['common', 'gov']) && action === 'okay'">
<el-button <el-button
type="primary" type="primary"
v-if="checkRole(['common','gov'])" v-if="checkRole(['common', 'gov'])"
@click="aduitAlltwo" @click="aduitAlltwo"
>保存</el-button >保存</el-button
> >
@ -125,12 +125,19 @@
:action="action" :action="action"
:xmId="projectId" :xmId="projectId"
:anotherInfo="projectOtherInfos" :anotherInfo="projectOtherInfos"
@refresh-data="fetchOtherInfo"
@update-data="handleDataUpdate('projectOtherInfos', $event)" @update-data="handleDataUpdate('projectOtherInfos', $event)"
> >
</Others> </Others>
</div> </div>
<div class="footer" v-if="checkRole(['common','gov']) && action === 'fill'"> <div
<el-button type="primary" v-if="checkRole(['common','gov'])" @click="aduitAll" class="footer"
v-if="checkRole(['common', 'gov']) && action === 'fill'"
>
<el-button
type="primary"
v-if="checkRole(['common', 'gov'])"
@click="aduitAll"
>审核通过</el-button >审核通过</el-button
> >
</div> </div>
@ -321,6 +328,20 @@ export default {
}, },
}, },
methods: { methods: {
async fetchOtherInfo() {
try {
const response = await getzwBasicInformationById(this.projectId);
const data = response.data;
// projectOtherInfos
this.projectOtherInfos = data.projectOtherInfos || [];
// this.$message.success("");
} catch (error) {
console.error("获取其他信息失败", error);
this.$message.error("获取其他信息失败");
}
},
checkPermi, checkPermi,
checkRole, checkRole,
loadData() { loadData() {
@ -482,12 +503,12 @@ export default {
this.scrollTimeout = setTimeout(() => { this.scrollTimeout = setTimeout(() => {
const scrollPosition = container.scrollTop; const scrollPosition = container.scrollTop;
if (scrollPosition > this.lastScrollTop) { if (scrollPosition > this.lastScrollTop) {
this.scrollDirection = 'down'; this.scrollDirection = "down";
} else { } else {
this.scrollDirection = 'up'; this.scrollDirection = "up";
} }
this.lastScrollTop = scrollPosition; this.lastScrollTop = scrollPosition;
const offset = this.scrollDirection === 'down' ? 500 : 200; const offset = this.scrollDirection === "down" ? 500 : 200;
const adjustedScrollPosition = scrollPosition + offset; const adjustedScrollPosition = scrollPosition + offset;
for (let i = this.sections.length - 1; i >= 0; i--) { for (let i = this.sections.length - 1; i >= 0; i--) {
const element = document.getElementById(this.sections[i].id); const element = document.getElementById(this.sections[i].id);
@ -505,7 +526,7 @@ export default {
}, },
handleMenuClick() { handleMenuClick() {
if (this.$refs.menuRef) { if (this.$refs.menuRef) {
this.$refs.menuRef.$el.blur(); this.$refs.menuRef.$el.blur();
} }
}, },
}, },

@ -119,6 +119,7 @@
:action="action" :action="action"
:xmId="projectId" :xmId="projectId"
:anotherInfo="projectOtherInfos" :anotherInfo="projectOtherInfos"
@refresh-data="fetchOtherInfo"
@update-data="handleDataUpdate('projectOtherInfos', $event)" @update-data="handleDataUpdate('projectOtherInfos', $event)"
> >
</Others> </Others>
@ -313,6 +314,20 @@ export default {
} }
}, },
methods: { methods: {
async fetchOtherInfo() {
try {
const response = await getzwBasicInformationById(this.projectId);
const data = response.data;
// projectOtherInfos
this.projectOtherInfos = data.projectOtherInfos || [];
// this.$message.success("");
} catch (error) {
console.error("获取其他信息失败", error);
this.$message.error("获取其他信息失败");
}
},
checkPermi, checkPermi,
checkRole, checkRole,
loadData() { loadData() {
@ -514,7 +529,6 @@ export default {
// //
const submitData = this.prepareSubmitData(); const submitData = this.prepareSubmitData();
// console.log(':', JSON.stringify(submitData, null, 2)); // console.log(':', JSON.stringify(submitData, null, 2));
fillBasicInformation(submitData) fillBasicInformation(submitData)
.then((response) => { .then((response) => {
this.$message.success("提交成功"); this.$message.success("提交成功");

@ -702,6 +702,15 @@ export default {
this.queryParams.current = 1; this.queryParams.current = 1;
this.getList(); this.getList();
}, },
/** 详情按钮操作 */
getInfo(row, type) {
this.$store.commit("SET_CRUMBS", "项目详情");
const id = row.id || this.ids[0];
this.$router.push({
path: `/manage-info/${id}`,
query: { action: type },
});
},
}, },
}; };
</script> </script>

@ -71,12 +71,7 @@
</el-row> </el-row>
</div> </div>
<div class="table-wrapper"> <div class="table-wrapper">
<el-table <el-table v-loading="loading" :data="postList" stripe height="100%">
v-loading="loading"
:data="postList"
stripe
height="100%"
>
<el-table-column label="序号" align="center"> <el-table-column label="序号" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{
@ -91,7 +86,7 @@
width="200" width="200"
/> />
<el-table-column <el-table-column
label="统一信用代码" label="统一社会信用代码"
align="center" align="center"
prop="uscc" prop="uscc"
width="200" width="200"
@ -123,9 +118,15 @@
fixed="right" fixed="right"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="getAdd(scope.row, 'detail')" <el-button type="text" @click="getinfo(scope.row, 'detail')"
>详情</el-button >详情</el-button
> >
<el-button
type="text"
@click="getedit(scope.row, 'detail')"
style="color: #67c23a"
>编辑</el-button
>
<el-button <el-button
type="text" type="text"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
@ -151,12 +152,18 @@
:title="dialogTitle" :title="dialogTitle"
:visible.sync="dialogFormVisible" :visible.sync="dialogFormVisible"
width="50%" width="50%"
@close="handleDialogClose"
> >
<!-- 在新增/编辑弹窗的el-form中 -->
<el-form ref="form" :model="form" label-width="200px"> <el-form ref="form" :model="form" label-width="200px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="企业名称"> <el-form-item label="企业名称">
<el-input v-model="form.epname" placeholder="请输入企业名称" /> <el-input
v-model="form.epname"
placeholder="请输入企业名称"
:disabled="isDetail"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -164,17 +171,18 @@
<el-input <el-input
v-model="form.uscc" v-model="form.uscc"
placeholder="请输入统一社会信用代码" placeholder="请输入统一社会信用代码"
:disabled="isDetail"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="标签代码"> <el-form-item label="标签代码">
<el-input <el-input
v-model="form.catalogueid" v-model="form.catalogueid"
placeholder="请输入标签代码" placeholder="请输入标签代码"
:disabled="isDetail"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -183,6 +191,7 @@
<el-input <el-input
v-model="form.lablenotes" v-model="form.lablenotes"
placeholder="请输入标签注释" placeholder="请输入标签注释"
:disabled="isDetail"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -191,31 +200,43 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="标签状态"> <el-form-item label="标签状态">
<el-input v-model="form.status" placeholder="请输入标签状态" /> <el-input
v-model="form.status"
placeholder="请输入标签状态"
:disabled="isDetail"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<div slot="footer"> <div slot="footer">
<el-button @click="dialogFormVisible = false">取消</el-button> <el-button @click="dialogFormVisible = false">取消</el-button>
<el-button type="primary" @click="submitForm"></el-button> <el-button type="primary" @click="submitForm">
{{ isDetail ? "确定" : "保存" }}
</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { getCybqInformationPage, getSpanById, addCybq, updateSpan,deleteSpan} from "@/api/ManageApi/index"; import {
getCybqInformationPage,
getSpanById,
addCybq,
updateSpan,
deleteSpan,
} from "@/api/ManageApi/index";
import { checkPermi, checkRole } from "@/utils/permission"; import { checkPermi, checkRole } from "@/utils/permission";
export default { export default {
dicts: ["xzfl"], dicts: ["xzfl"],
data() { data() {
return { return {
isDetail: false,
// //
dialogFormVisible: false, dialogFormVisible: false,
dialogTitle: '', dialogTitle: "",
form: { form: {
id: null, id: null,
epname: "", epname: "",
@ -229,7 +250,7 @@ export default {
codekey: "", codekey: "",
sceneid: "", sceneid: "",
status: "", status: "",
bqbjdw: "" bqbjdw: "",
}, },
// //
@ -291,63 +312,100 @@ export default {
codekey: "", codekey: "",
sceneid: "", sceneid: "",
status: "", status: "",
bqbjdw: "" bqbjdw: "",
}; };
this.dialogFormVisible = true; this.dialogFormVisible = true;
}, },
/** 获取详情 */
/** 编辑按钮点击(即“详情”) */ getinfo(row) {
getAdd(row) { this.dialogTitle = "产业标签详情";
getSpanById(row.id)
.then((response) => {
const data = response.data;
this.form = {
id: data.id,
epname: data.epname,
uscc: data.uscc,
catalogueid: data.catalogueid,
state: data.state,
yhlx: data.yhlx,
lablenotes: data.lablenotes,
status: data.status,
dw_timestamp: data.dw_timestamp,
codekey: data.codekey,
sceneid: data.sceneid,
status: data.status,
bqbjdw: data.bqbjdw,
};
//
this.isDetail = true;
this.dialogFormVisible = true;
})
.catch(() => {
this.$message.error("获取数据失败");
});
},
getedit(row) {
this.dialogTitle = "编辑产业标签"; this.dialogTitle = "编辑产业标签";
getSpanById(row.id).then(response => { getSpanById(row.id)
const data = response.data; .then((response) => {
this.form = { const data = response.data;
id: data.id, this.form = {
epname: data.epname, id: data.id,
uscc: data.uscc, epname: data.epname,
catalogueid: data.catalogueid, uscc: data.uscc,
state: data.state, catalogueid: data.catalogueid,
yhlx: data.yhlx, state: data.state,
lablenotes: data.lablenotes, yhlx: data.yhlx,
status: data.status, lablenotes: data.lablenotes,
dw_timestamp: data.dw_timestamp, status: data.status,
codekey: data.codekey, dw_timestamp: data.dw_timestamp,
sceneid: data.sceneid, codekey: data.codekey,
status: data.status, sceneid: data.sceneid,
bqbjdw: data.bqbjdw status: data.status,
}; bqbjdw: data.bqbjdw,
this.dialogFormVisible = true; };
}).catch(() => { this.dialogFormVisible = true;
this.$message.error("获取数据失败"); })
}); .catch(() => {
});
}, },
/** 提交表单(新增或修改) */ /** 提交表单(新增或修改) */
submitForm() { submitForm() {
if (this.isDetail) {
this.dialogFormVisible = false;
return;
}
const apiRequest = this.form.id ? updateSpan : addCybq; const apiRequest = this.form.id ? updateSpan : addCybq;
apiRequest(this.form) apiRequest(this.form)
.then(() => { .then(() => {
this.$message.success(this.form.id ? '更新成功' : '新增成功'); this.$message.success(this.form.id ? "更新成功" : "新增成功");
this.getList(); // this.getList(); //
this.dialogFormVisible = false; this.dialogFormVisible = false;
}) })
.catch(() => { .catch(() => {
this.$message.error(this.form.id ? '更新失败' : '新增失败'); this.$message.error(this.form.id ? "更新失败" : "新增失败");
}); });
}, },
handleDialogClose() {
this.isDetail = false;
},
/** 删除按钮点击 */ /** 删除按钮点击 */
handleDelete(row) { handleDelete(row) {
this.$confirm("是否确认删除所选数据?", "提示", { this.$confirm("是否确认删除所选数据?", "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning",
}).then(() => { })
deleteSpan([row.id]).then(() => { .then(() => {
this.$message.success("删除成功"); deleteSpan([row.id]).then(() => {
this.getList(); this.$message.success("删除成功");
}); this.getList();
}).catch(() => {}); });
})
.catch(() => {});
}, },
/** 搜索与重置 */ /** 搜索与重置 */
@ -368,8 +426,8 @@ export default {
status: undefined, status: undefined,
}; };
this.getList(); this.getList();
} },
} },
}; };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

@ -1,5 +1,5 @@
<template> <template>
<!-- 这是测试的页面 --> <!-- 正式的统计页面 -->
<div class="dashboard-container"> <div class="dashboard-container">
<!-- 1 --> <!-- 1 -->
<div class="dashboard-row"> <div class="dashboard-row">
@ -24,14 +24,14 @@
<MapArea /> <MapArea />
</div> </div>
<div class="dashboard-col narrow"> <div class="dashboard-col narrow">
<div class="itemhead" style="margin: 0.5rem 0 0 0"> <div class="itemhead" style="margin: .5rem 0 0 0;">
<span>功能区</span> <span>功能区</span>
</div> </div>
<div class="relaitem"> <div class="relaitem">
<FunctionArea :years="years" /> <FunctionArea :years="years" />
</div> </div>
<div class="itemhead" style="margin: 0"> <div class="itemhead" style="margin: 0;">
<span>投资主体</span> <span>投资主体</span>
</div> </div>
<div class="relaitem"> <div class="relaitem">
@ -58,36 +58,12 @@
<Cydxml /> <Cydxml />
</div> </div>
</div> </div>
<div class="dashboard-col" style="height: 11rem"> <div class="dashboard-col" style="height: 11rem;">
<div class="itemhead">
<!-- <span>产业导向细分产业分析</span> -->
<span>年度任务完成情况</span>
</div>
<div class="relaitem" style="height: 9rem">
<!-- <Cydxxfgl /> -->
<Ndwcqk />
</div>
</div>
</div>
<!-- 4 -->
<div class="dashboard-row">
<div class="dashboard-col">
<div class="itemhead">
<span>储备项目统计分析</span>
</div>
<div class="relaitem">
<Cbxm />
</div>
</div>
<div class="dashboard-col">
<div class="itemhead"> <div class="itemhead">
<span>产业导向细分产业分析</span> <span>产业导向细分产业分析</span>
<!-- <span>年度任务完成情况</span> -->
</div> </div>
<div class="relaitem"> <div class="relaitem" style="height: 9rem;">
<Cydxxfgl /> <Cydxxfgl />
<!-- <Ndwcqk /> -->
</div> </div>
</div> </div>
</div> </div>
@ -95,19 +71,16 @@
</template> </template>
<script> <script>
import AllArea from "@/views/components/analysis/all.vue"; import AllArea from '@/views/components/analysis/all.vue'
import FunctionArea from "@/views/components/analysis/function.vue"; import FunctionArea from '@/views/components/analysis/function.vue'
import InvestArea from "@/views/components/analysis/invest.vue"; import InvestArea from '@/views/components/analysis/invest.vue'
import Message from "@/views/components/analysis/message.vue"; import Message from '@/views/components/analysis/message.vue'
import ProjectList from "@/views/components/analysis/projectList.vue"; import ProjectList from '@/views/components/analysis/projectList.vue'
import MapArea from "@/views/components/analysis/map.vue"; import MapArea from '@/views/components/analysis/map.vue'
import Cyeshuju from "@/views/components/analysis/chanyeshuju.vue"; import Cyeshuju from '@/views/components/analysis/chanyeshuju.vue'
import Cydxml from "@/views/components/analysis/chanyedxml.vue"; import Cydxml from '@/views/components/analysis/chanyedxml.vue'
import Cydxxfgl from "@/views/components/analysis/chanyexfgl.vue"; import Cydxxfgl from '@/views/components/analysis/chanyexfgl.vue'
import Cbxm from "@/views/components/analysis/chubeixm.vue"; import { investall, fungong } from '@/api/ManageApi/index'
import Ndwcqk from "@/views/components/analysis/ndwcqk.vue";
import { investall, fungong ,getNewSysLogininfor} from "@/api/ManageApi/index";
import Cookies from "js-cookie";
export default { export default {
components: { components: {
@ -119,68 +92,30 @@ export default {
MapArea, MapArea,
Cyeshuju, Cyeshuju,
Cydxml, Cydxml,
Cydxxfgl, Cydxxfgl
Cbxm,
Ndwcqk,
}, },
data() { data() {
return { return {
years: new Date().getFullYear().toString(), years: new Date().getFullYear().toString(),
allnumber: { allnumber: {
touzinumber: 0, touzinumber: 0
}, },
functionnumber: { functionnumber: {
functionnumber: 0, functionnumber: 0
},
};
},
mounted() {
getNewSysLogininfor()
.then(res => {
const lastLoginTime = res.data?.loginTime;
if (!lastLoginTime) {
return;
} }
};
if (!res.data) {
if (Cookies.get("newSysLogininfor") != 2) {
this.$confirm(
`您上次登录时间为${lastLoginTime},建议修改密码`,
"提示",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}
)
.then(() => {
Cookies.set("newSysLogininfor", 2);
})
.catch(() => {
Cookies.set("newSysLogininfor", 2);
});
}
}
})
.catch(err => {
console.error('获取登录信息失败:', err);
});
}, },
methods: { methods: {
handleYearChange(years) { handleYearChange(years) {
this.years = years; this.years = years;
console.log("index.vue: handleYearChange called with years:", years);
}, },
async getData() { async getData() {
const response = await investall(); const response = await investall();
if (response && response.data) { if (response && response.data) {
const totalCount = response.data.reduce( const totalCount = response.data.reduce((sum, item) => sum + item.count, 0);
(sum, item) => sum + item.count,
0
);
this.allnumber = { this.allnumber = {
touzinumber: totalCount, touzinumber: totalCount
}; };
} }
}, },
@ -188,22 +123,22 @@ export default {
const response2 = await fungong(); const response2 = await fungong();
if (response2 && response2.data) { if (response2 && response2.data) {
const totalCount2 = response2.data.reduce( const totalCount2 = response2.data.reduce(
(sum, item) => sum + item.count, (sum, item) => sum + item.count, 0
0
); );
this.functionnumber = { this.functionnumber = {
functionnumber: totalCount2, functionnumber: totalCount2
}; }
} }
}, }
}, },
created() { created() {
this.getData(); this.getData();
this.getfuncdata(); this.getfuncdata();
}, }
}; };
</script> </script>
<style scoped> <style scoped>
.dashboard-container { .dashboard-container {
display: flex; display: flex;
@ -219,17 +154,19 @@ export default {
display: flex; display: flex;
flex: 1; flex: 1;
gap: 0.5rem; gap: 0.5rem;
} }
.dashboard-rowtwo { .dashboard-rowtwo {
display: flex; display: flex;
height: auto; flex: 2;
gap: 0.5rem; gap: 0.5rem;
} }
.dashboard-col { .dashboard-col {
flex: 1; flex: 1;
background-color: #ffffff; background-color: #FFFFFF;
border-radius: 0.5rem; border-radius: 0.5rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -246,22 +183,12 @@ export default {
.itemhead { .itemhead {
width: 100%; width: 100%;
border-left: 0.25rem solid #2b62f1; border-left: 0.25rem solid #2B62F1;
margin: 0.5rem 0; margin: 0.5rem 0;
margin: 0.5rem 0; margin: 0.5rem 0;
height: 1.25rem; height: 1.25rem;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between;
.top {
width: auto;
display: flex;
margin-bottom: 10px;
font-size: 0.88rem;
color: gray !important;
justify-content: flex-end;
}
} }
.relaitem { .relaitem {
@ -284,7 +211,7 @@ export default {
font-family: DINbold; font-family: DINbold;
font-weight: 500; font-weight: 500;
font-size: 1.25rem; font-size: 1.25rem;
color: #292c33; color: #292C33;
text-align: left; text-align: left;
font-style: normal; font-style: normal;
text-transform: none; text-transform: none;
@ -294,7 +221,7 @@ export default {
font-family: alibold; font-family: alibold;
font-weight: 400; font-weight: 400;
font-size: 0.68rem; font-size: 0.68rem;
color: #9e9e9e; color: #9E9E9E;
text-align: left; text-align: left;
font-style: normal; font-style: normal;
text-transform: none; text-transform: none;
@ -305,7 +232,7 @@ export default {
font-family: alibold; font-family: alibold;
font-weight: 600; font-weight: 600;
font-size: 1rem; font-size: 1rem;
color: #3d424c; color: #3D424C;
line-height: 1.69rem; line-height: 1.69rem;
text-align: left; text-align: left;
font-style: normal; font-style: normal;
@ -314,7 +241,7 @@ export default {
.mainarea { .mainarea {
flex: 1; flex: 1;
padding: 0 0 0 0.5rem; padding: 0 0 0 .5rem;
overflow: auto; overflow: auto;
} }
@ -328,4 +255,4 @@ export default {
.bgcicon { .bgcicon {
padding: 0 !important; padding: 0 !important;
} }
</style> </style>

@ -47,7 +47,7 @@ module.exports = {
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
// target: `http://192.168.0.108:7071/`, // target: `http://192.168.0.108:7071/`,
target: `http://39.101.188.84:7071/`, // target: `http://39.101.188.84:7071/`,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: '' ['^' + process.env.VUE_APP_BASE_API]: ''

Loading…
Cancel
Save