Commit 894fc8ca authored by “yiyousong”'s avatar “yiyousong”

perf: 优化设备详情页面

parent 76621a8f
export default { export default {
created() { created() {
// this.getData(); // this.getData();
}, },
beforeDestroy() { beforeDestroy() {
clearTimeout(this.loadingTimer); clearTimeout(this.loadingTimer);
...@@ -8,30 +8,28 @@ export default { ...@@ -8,30 +8,28 @@ export default {
methods: { methods: {
// 渲染前置处理 // 渲染前置处理
beforeRender(data) { beforeRender(data) {
return data return data;
}, },
// 渲染后置处理 // 渲染后置处理
afterRender(data) { afterRender(data) {},
},
// 提交表单的前置处理 // 提交表单的前置处理
beforeSubmit(data) { beforeSubmit(data) {
return data return data;
}, },
// 提交表单的后置处理, 会阻断默认的回退行为 // 提交表单的后置处理, 会阻断默认的回退行为
afterSubmit(data) { afterSubmit(data) {
this.$router.go(-1); this.$router.go(-1);
}, },
// 开启、关闭 // 开启、关闭
changePath(path) { changePath(path) {
this.pageInfo.list = path + "/list"; this.pageInfo.list = path + "/list";
this.pageInfo.del = path + "/delete"; this.pageInfo.del = path + "/delete";
this.pageInfo.add = path + "/add"; this.pageInfo.add = path + "/add";
this.pageInfo.edit = path + "/edit"; this.pageInfo.edit = path + "/edit";
this.pageInfo.view = path + "/view"; this.pageInfo.view = path + "/view";
}, },
// 默认拉取数据 // 默认拉取数据
getData() { getData() {
this.loading = true; this.loading = true;
...@@ -46,19 +44,18 @@ export default { ...@@ -46,19 +44,18 @@ export default {
res.entity = this.util_toDateStr(res.entity, this.toDate); res.entity = this.util_toDateStr(res.entity, this.toDate);
this.form = Object.assign({}, this.form, res.entity); this.form = Object.assign({}, this.form, res.entity);
this.dict = Object.assign({}, this.dict, res.dict); this.dict = Object.assign({}, this.dict, res.dict);
this.afterRender(res); this.afterRender(res);
}) })
.catch(error => { .catch((error) => {
this.$message.error(error.message) this.$message.error(error.message);
throw error throw error;
}) })
.then(data => { .then((data) => {
clearTimeout(this.loadingTimer); clearTimeout(this.loadingTimer);
this.loadingTimer = setTimeout(() => { this.loadingTimer = setTimeout(() => {
this.loading = false; this.loading = false;
}, 300); }, 300);
}) });
}, },
// 提交表单 // 提交表单
submitForm(ref) { submitForm(ref) {
...@@ -66,70 +63,81 @@ export default { ...@@ -66,70 +63,81 @@ export default {
el.validate((valid) => { el.validate((valid) => {
if (!valid) return; if (!valid) return;
this.loading = true; this.loading = true;
this.$post(this.urls.saveUrl || this.pageInfo.saveUrl, this.beforeSubmit(this.form)) this.$post(
.then(res => { this.urls.saveUrl || this.pageInfo.saveUrl,
this.beforeSubmit(this.form)
)
.then((res) => {
this.$message.success(res.msg); this.$message.success(res.msg);
this.afterSubmit(res); this.afterSubmit(res);
}) })
.catch(error => { .catch((error) => {
this.$message.error(error.message); this.$message.error(error.message);
}) })
.then(data => { .then((data) => {
clearTimeout(this.loadingTimer); clearTimeout(this.loadingTimer);
this.loadingTimer = setTimeout(() => { this.loadingTimer = setTimeout(() => {
this.loading = false; this.loading = false;
}, 200); }, 200);
}) });
}); });
}, },
// 复制一个数组或对象 // 复制一个数组或对象
util_copy(data) { util_copy(data) {
return JSON.parse(JSON.stringify(data)) return JSON.parse(JSON.stringify(data));
}, },
// 工具方法,把数字转化为字符串 // 工具方法,把数字转化为字符串
util_toString(data, array) { util_toString(data, array) {
//原始数据 //原始数据
const dataCopy = Object.assign({}, data); const dataCopy = Object.assign({}, data);
array.forEach(item => { array.forEach((item) => {
//如果相等做操作 //如果相等做操作
dataCopy[item] = dataCopy[item] === undefined ? '' : dataCopy[item] + ''; dataCopy[item] =
}) dataCopy[item] === undefined ? "" : dataCopy[item] + "";
});
return dataCopy; return dataCopy;
}, },
// 工具方法,把字符串转化为数组 // 工具方法,把字符串转化为数组
util_toArrays(data, array) { util_toArrays(data, array) {
const dataCopy = Object.assign({}, data); const dataCopy = Object.assign({}, data);
array.forEach(item => { array.forEach((item) => {
dataCopy[item] = dataCopy[item] === undefined ? [] : dataCopy[item].split(","); dataCopy[item] =
}) dataCopy[item] === undefined ? [] : dataCopy[item].split(",");
});
return dataCopy; return dataCopy;
}, },
// 工具方法,把字符串转化为格式化日期 // 工具方法,把字符串转化为格式化日期
util_toDateStr(data, array) { util_toDateStr(data, array) {
const dataCopy = Object.assign({}, data); const dataCopy = Object.assign({}, data);
array.forEach(item => { array.forEach((item) => {
dataCopy[item] = dataCopy[item] === undefined ? '' : this.util_formatterDate(dataCopy[item]); dataCopy[item] =
}) dataCopy[item] === undefined
? ""
: this.util_formatterDate(dataCopy[item]);
});
return dataCopy; return dataCopy;
}, },
util_formatterDate(time) { util_formatterDate(time) {
let date = new Date(Number(time)); let date = new Date(Number(time));
let Y = date.getFullYear() + '-'; let Y = date.getFullYear() + "-";
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; let M =
let D = this.panLeft(date.getDate()) + ' '; (date.getMonth() + 1 < 10
let h = this.panLeft(date.getHours()) + ':'; ? "0" + (date.getMonth() + 1)
let m = this.panLeft(date.getMinutes()) + ':'; : date.getMonth() + 1) + "-";
let D = this.panLeft(date.getDate()) + " ";
let h = this.panLeft(date.getHours()) + ":";
let m = this.panLeft(date.getMinutes()) + ":";
let s = this.panLeft(date.getSeconds()); let s = this.panLeft(date.getSeconds());
return Y + M + D + h + m + s; return Y + M + D + h + m + s;
}, },
panLeft(num) { panLeft(num) {
return num < 10 ? '0' + num : num; return num < 10 ? "0" + num : num;
}, },
// 从dict字段暴力取值,取不到则返回原值 // 从dict字段暴力取值,取不到则返回原值
util_formatter(key, val) { util_formatter(key, val) {
try { try {
return this.dict[key][val] return this.dict[key][val];
} catch (error) { } catch (error) {
return val; return val;
} }
...@@ -142,24 +150,24 @@ export default { ...@@ -142,24 +150,24 @@ export default {
} }
}); });
}, 0); }, 0);
} },
}, },
computed: { computed: {
pageInfo() { pageInfo() {
let currUrl = this.$route.path; let currUrl = this.$route.path;
let urlArray = currUrl.split('/'); let urlArray = currUrl.split("/");
let type = urlArray.pop(); let type = urlArray.pop();
urlArray.push('save'); urlArray.push("save");
let saveUrl = urlArray.join('/'); let saveUrl = urlArray.join("/");
urlArray.pop(); urlArray.pop();
urlArray.push('edit'); urlArray.push("edit");
let editUrl = urlArray.join('/'); let editUrl = urlArray.join("/");
urlArray.pop(); urlArray.pop();
urlArray.push('add'); urlArray.push("add");
let addUrl = urlArray.join('/'); let addUrl = urlArray.join("/");
urlArray.pop(); urlArray.pop();
urlArray.push('view'); urlArray.push("view");
let viewUrl = urlArray.join('/'); let viewUrl = urlArray.join("/");
return { return {
type, type,
currUrl, currUrl,
...@@ -183,9 +191,6 @@ export default { ...@@ -183,9 +191,6 @@ export default {
toString: [], // 需要把number转化为string的表单字段name数组 toString: [], // 需要把number转化为string的表单字段name数组
toArrays: [], // 需要把number转化为arrays的表单字段name数组 toArrays: [], // 需要把number转化为arrays的表单字段name数组
toDate: [], // 需要把number转化为date的表单字段name数组 toDate: [], // 需要把number转化为date的表单字段name数组
} };
} },
} };
...@@ -176,13 +176,14 @@ export default { ...@@ -176,13 +176,14 @@ export default {
// 格式化单元格数据 // 格式化单元格数据
formatter(row, column, val) { formatter(row, column, val) {
const content = formatter(this.tableData, column, val); const content = formatter(this.tableData, column, val);
return content ? ( return content ? (
<el-tag type={"info"} size="mini"> <el-tag type={"info"} size="mini">
{content} {content}
</el-tag> </el-tag>
) : ( ) : val ? (
val val
) : (
"--"
); );
}, },
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-tabs style="margin-left: 10px" v-model="activeName"> <el-tabs style="margin-left: 10px" v-model="activeName">
<el-tab-pane label="设备详情" name="deviceDetail"> <el-tab-pane label="设备详情" name="deviceDetail">
<view-show :form="viewInfo" :dict="dict" /> <view-show :siteInfo="siteInfo" :form="viewInfo" :dict="dict" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="告警记录" name="alarmLog"> <el-tab-pane label="告警记录" name="alarmLog">
<alarm-list :queryIn="{ alarmDevice: form.id }" /> <alarm-list :queryIn="{ alarmDevice: form.id }" />
...@@ -42,6 +42,13 @@ export default { ...@@ -42,6 +42,13 @@ export default {
alarmList, alarmList,
moduleList, moduleList,
}, },
props: {
siteInfo: {
type: Object,
required: true,
default: () => {},
},
},
data() { data() {
return { return {
activeName: "deviceDetail", activeName: "deviceDetail",
......
...@@ -254,7 +254,7 @@ ...@@ -254,7 +254,7 @@
<drawer-show ref="drawerform" @ok="getData" /> <drawer-show ref="drawerform" @ok="getData" />
<drawer-view ref="drawerViewform" @ok="getData" /> <drawer-view ref="drawerViewform" :siteInfo="siteInfo" @ok="getData" />
</div> </div>
</template> </template>
...@@ -310,7 +310,7 @@ export default { ...@@ -310,7 +310,7 @@ export default {
siteId: null, siteId: null,
siteName: "", siteName: "",
siteCode: "", siteCode: "",
siteInfo: {},
updateSiteId: null, updateSiteId: null,
updateSiteName: "", updateSiteName: "",
updateSiteCode: "", updateSiteCode: "",
...@@ -476,6 +476,7 @@ export default { ...@@ -476,6 +476,7 @@ export default {
//this.info=res.data //this.info=res.data
this.siteName = res.data.siteName; this.siteName = res.data.siteName;
this.siteCode = res.data.siteCode; this.siteCode = res.data.siteCode;
this.siteInfo = res.data;
} }
}) })
.catch((error) => { .catch((error) => {
......
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
{{ form.lon }} {{ form.lon }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item <el-descriptions-item
label="度" label="度"
label-class-name="labelClass" label-class-name="labelClass"
content-class-name="contentClass" content-class-name="contentClass"
> >
...@@ -231,7 +231,27 @@ ...@@ -231,7 +231,27 @@
设备位置 设备位置
</template> </template>
</el-descriptions> </el-descriptions>
<Map></Map> <!-- <Map></Map> -->
<div class="map">
<el-amap
vid="amaps"
:zoom="20"
viewMode="3D"
expandZoomRange
:center="[siteInfo.longitude, siteInfo.latitude]"
>
<el-amap-marker
vid="2"
topWhenClick
:label="{
content: `我在${siteInfo.detailAddress}`,
offset: [0, -20],
}"
:position="[siteInfo.longitude, siteInfo.latitude]"
:icon="require('@/assets/images/d.png')"
></el-amap-marker>
</el-amap>
</div>
</layout-view> </layout-view>
</template> </template>
...@@ -248,6 +268,11 @@ export default { ...@@ -248,6 +268,11 @@ export default {
type: Object, type: Object,
default: null, default: null,
}, },
siteInfo: {
type: Object,
required: true,
default: () => {},
},
}, },
components: {}, components: {},
created() {}, created() {},
...@@ -326,4 +351,8 @@ export default { ...@@ -326,4 +351,8 @@ export default {
.contentClass { .contentClass {
width: 600px; width: 600px;
} }
</style> .map {
\ No newline at end of file width: 100%;
height: 600px;
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment