Browse Source

Merge branches 'master' and 'master' of dd.tall.wiki:ccsens_fe/corrosion

master
song 4 years ago
parent
commit
2259c2d951
  1. 7
      src/App.vue
  2. 4
      src/apis/index.js
  3. 41
      src/components/device-select-and-status.vue
  4. 19
      src/components/refresh.vue
  5. 5
      src/components/search-bar.vue
  6. 4
      src/store/user.js
  7. 47
      src/views/device-list.vue
  8. 81
      src/views/function-config.vue
  9. 39
      src/views/network-config.vue

7
src/App.vue

@ -10,13 +10,11 @@ import { routes } from '@/routers/index.js';
const local = zhCn; const local = zhCn;
const store = useStore(); const store = useStore();
let timer = null; let timer = null;
const routeList = ref(routes); const routeList = ref(routes);
const menu = computed(() => store.state.menu); const menu = computed(() => store.state.menu);
// queryu token // queryu token
const validateQuery = () => {
const route = useRoute(); const route = useRoute();
useRouter() useRouter()
.isReady() .isReady()
@ -30,9 +28,6 @@ const validateQuery = () => {
await store.dispatch('user/getTokenByUserId', u.value); await store.dispatch('user/getTokenByUserId', u.value);
} }
}); });
};
validateQuery();
const token = computed(() => store.getters['user/token']); const token = computed(() => store.getters['user/token']);
// //

4
src/apis/index.js

@ -23,10 +23,10 @@ export const getMonthsDate = params => http.get(`${corrosion}/statistics/months`
export const getRealtimeData = params => http.get(`${corrosion}/statistics/realtime`, { params }); export const getRealtimeData = params => http.get(`${corrosion}/statistics/realtime`, { params });
// 获取网络配置参数 // 获取网络配置参数
export const getConfigNetwork = () => http.get(`${corrosion}/config/network`); export const getConfigNetwork = params => http.get(`${corrosion}/config/network`, { params });
// 获取功能配置参数 // 获取功能配置参数
export const getConfigFunction = () => http.get(`${corrosion}/config/function`); export const getConfigFunction = params => http.get(`${corrosion}/config/function`, { params });
// 提交网络配置参数 // 提交网络配置参数
export const createConfigNetwork = data => http.post(`${corrosion}/config/network`, data); export const createConfigNetwork = data => http.post(`${corrosion}/config/network`, data);

41
src/components/device-select-and-status.vue

@ -0,0 +1,41 @@
<script setup>
import { computed, defineProps, defineEmits, ref, watch } from 'vue';
import { useStore } from 'vuex';
const props = defineProps({ status: Object });
defineEmits(['search']);
const store = useStore();
const devices = computed(() => store.state.device.devices); // /
const deviceId = ref(''); // id
const currentDeviceId = computed(() => store.state.device.currentDeviceId); // id
// const get = computed(() => (props.status.get ? '' : ''));
const set = computed(() => (props.status.set ? '设置生效' : '等待下发'));
// currentDeviceId
watch(
() => currentDeviceId.value,
newValue => {
if (newValue && deviceId.value !== newValue) {
deviceId.value = newValue;
}
},
{ immediate: true },
);
</script>
<template>
<div class="mb-3">
<span class="text-sm text-gray-500">选择站点</span>
<el-select v-model="deviceId" placeholder="选择站点" @change="$emit('search', deviceId)">
<el-option v-for="item in devices" :key="item.deviceId" :label="item.address" :value="item.deviceId"></el-option>
</el-select>
<!-- <span class="text-sm text-gray-500 ml-10">获取状态</span>
<el-tag type="success">{{ get }}</el-tag>-->
<span class="text-sm text-gray-500 ml-10">设置状态</span>
<el-tag type="success">{{ set }}</el-tag>
</div>
</template>

19
src/components/refresh.vue

@ -0,0 +1,19 @@
<script setup>
import { defineEmits } from 'vue';
defineEmits(['refresh']);
</script>
<template>
<el-tooltip class="refresh-btn shadow-md" effect="dark" content="刷新" placement="top-start">
<el-button type="primary" icon="el-icon-refresh" circle @click="$emit('refresh')"></el-button>
</el-tooltip>
</template>
<style scoped>
.refresh-btn {
position: absolute;
right: 20px;
bottom: 20px;
}
</style>

5
src/components/search-bar.vue

@ -2,7 +2,7 @@
<el-form :inline="true" :model="searchDevice" ref="searchDeviceForm"> <el-form :inline="true" :model="searchDevice" ref="searchDeviceForm">
<el-form-item label="选择站点"> <el-form-item label="选择站点">
<el-select v-model="searchDevice.device" placeholder="请选择站点"> <el-select v-model="searchDevice.device" placeholder="请选择站点">
<el-option label="全部" value=""></el-option> <el-option label="全部" value></el-option>
<el-option :label="item.address" :value="item.deviceId" v-for="item in devices" :key="item.deviceId"></el-option> <el-option :label="item.address" :value="item.deviceId" v-for="item in devices" :key="item.deviceId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -26,8 +26,7 @@ const store = useStore();
const devices = computed(() => store.state.device.devices); const devices = computed(() => store.state.device.devices);
const onSubmit = () => { const onSubmit = () => {
searchDeviceForm.value.validate(valid => { searchDeviceForm.value.validate(() => {
console.log(valid, { ...searchDevice });
const { device } = searchDevice; const { device } = searchDevice;
emit('search', { deviceId: device }); emit('search', { deviceId: device });
}); });

4
src/store/user.js

@ -12,7 +12,7 @@ export default {
}, },
userId({ user }) { userId({ user }) {
if (!user) return null; if (!user) return null;
return user.userId; return user.id;
}, },
}, },
@ -26,7 +26,7 @@ export default {
state.user = user; state.user = user;
if (user) { if (user) {
localStorage.setItem('token', user.token); localStorage.setItem('token', user.token);
localStorage.setItem('user', user); localStorage.setItem('user', JSON.stringify(user));
} else { } else {
localStorage.removeItem('token'); localStorage.removeItem('token');
localStorage.removeItem('user'); localStorage.removeItem('user');

47
src/views/device-list.vue

@ -17,23 +17,41 @@
</el-row> </el-row>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="ID" prop="deviceId" width="100" /> <el-table-column label="ID" prop="deviceId" min-min-width="100" align="center" />
<el-table-column label="完整ID" prop="deviceFullId" width="150" /> <el-table-column label="完整ID" prop="deviceFullId" min-width="150" align="center" />
<el-table-column label="地点" prop="address" width="150" /> <el-table-column label="地点" prop="address" min-width="150" align="left" header-align="center" />
<el-table-column label="地区" prop="area" width="120" /> <el-table-column label="地区" prop="area" min-width="120" align="left" header-align="center" />
<el-table-column label="联系人" prop="contact" width="100" /> <el-table-column label="联系人" prop="contact" min-width="100" align="center" />
<el-table-column label="联系电话" prop="phone" width="150" /> <el-table-column label="联系电话" prop="phone" min-width="150" align="center" />
<el-table-column label="安装时间" prop="installTime" width="200" /> <el-table-column label="安装时间" prop="installTime" min-width="200" align="center" />
<el-table-column label="正式运行时间" prop="runTime" width="200" /> <el-table-column label="正式运行时间" prop="runTime" min-width="200" align="center" />
<el-table-column fixed="right" label="操作" width="148"> <el-table-column fixed="right" label="操作" min-width="200" align="center">
<template #default="props"> <template #default="props">
<el-tooltip class="item" effect="dark" content="网络参数配置" placement="top">
<i class="el-icon-setting text-base text-yellow-600 mx-1" @click="openPage(props.row, 'network-config')"></i>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="功能参数配置" placement="top">
<i class="el-icon-set-up text-base text-yellow-600 mx-1" @click="openPage(props.row, 'function-config')"></i>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="实时数据统计" placement="top">
<i class="el-icon-stopwatch text-base text-green-600 mx-1" @click="openPage(props.row, 'statistical-realtime')"></i>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="数据查看及导出" placement="top">
<i class="el-icon-tickets text-base text-green-600 mx-1" @click="openPage(props.row, 'data-history')"></i>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="数据统计" placement="top">
<i class="el-icon-data-line text-base text-green-600 mx-1" @click="openPage(props.row, 'statistical-history')"></i>
</el-tooltip>
<el-popconfirm title="确定要删除此设备吗?" @confirm="handleDelete"> <el-popconfirm title="确定要删除此设备吗?" @confirm="handleDelete">
<template #reference> <template #reference>
<el-button type="danger" plain size="mini">删除</el-button> <i class="el-icon-delete text-base text-red-600 mx-1"></i>
<!-- <el-button type="text" plain size="mini" icon="el-icon-delete"></el-button> -->
</template> </template>
</el-popconfirm> </el-popconfirm>
<el-button type="primary" plain size="mini" @click="handleEdit(props.row)">编辑</el-button> <el-tooltip class="item" effect="dark" content="编辑设备信息" placement="top">
<i class="el-icon-edit text-base text-blue-600 mx-1" @click="handleEdit(props.row)"></i>
</el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -59,11 +77,13 @@
<script setup> <script setup>
import { computed, onMounted, ref } from 'vue'; import { computed, onMounted, ref } from 'vue';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
import { useRouter } from 'vue-router';
import SearchBar from 'components/search-bar.vue'; import SearchBar from 'components/search-bar.vue';
import DeviceEdit from 'components/device-edit.vue'; import DeviceEdit from 'components/device-edit.vue';
let timer = null; let timer = null;
const store = useStore(); const store = useStore();
const router = useRouter();
const token = computed(() => store.getters['user/token']); const token = computed(() => store.getters['user/token']);
const devicesAll = computed(() => store.state.device.devicesAll); const devicesAll = computed(() => store.state.device.devicesAll);
let contentHeight = 600; let contentHeight = 600;
@ -120,4 +140,9 @@ const handleEdit = item => {
store.commit('device/setCurrentDeviceId', item.deviceId); store.commit('device/setCurrentDeviceId', item.deviceId);
editting.value = true; editting.value = true;
}; };
const openPage = (item, path) => {
store.commit('device/setCurrentDeviceId', item.deviceId);
router.push({ name: path });
};
</script> </script>

81
src/views/function-config.vue

@ -1,4 +1,7 @@
<template> <template>
<!-- 设置站点选择 设备下发状态 -->
<DeviceSelectAndSelect @search="onSearch" :status="data.status" />
<el-form label-position="top" :model="data" ref="functionForm"> <el-form label-position="top" :model="data" ref="functionForm">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
@ -81,22 +84,45 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="设置安全模式" prop="securityMode"> <el-form-item label="选择金属通道1类型" prop="securityMode">
<!-- <el-input v-model="data.securityMode"></el-input> --> <el-select v-model="data.corrosiveType1" placeholder="选择金属腐蚀类型">
<el-radio v-model="data.securityMode" :label="0">不加密</el-radio> <el-option v-for="type in types" :key="type.value" :label="type.type" :value="type.value"></el-option>
<el-radio v-model="data.securityMode" :label="1">加密</el-radio> </el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="选择金属通道2类型" prop="corrosiveType">
<el-select v-model="data.corrosiveType2" placeholder="选择金属腐蚀类型">
<el-option v-for="type in types" :key="type.value" :label="type.type" :value="type.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="选择金属通道3类型" prop="securityMode">
<el-select v-model="data.corrosiveType3" placeholder="选择金属腐蚀类型">
<el-option v-for="type in types" :key="type.value" :label="type.type" :value="type.value"></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="设置金属腐蚀类型" prop="corrosiveType"> <el-form-item label="选择金属通道4类型" prop="corrosiveType">
<!-- <el-input v-model="data.corrosiveType"></el-input> --> <el-select v-model="data.corrosiveType4" placeholder="选择金属腐蚀类型">
<el-select v-model="data.corrosiveType" placeholder="选择金属腐蚀类型">
<el-option v-for="type in types" :key="type.value" :label="type.type" :value="type.value"></el-option> <el-option v-for="type in types" :key="type.value" :label="type.type" :value="type.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="设置安全模式" prop="securityMode">
<!-- <el-input v-model="data.securityMode"></el-input> -->
<el-radio v-model="data.securityMode" :label="0">不加密</el-radio>
<el-radio v-model="data.securityMode" :label="1">加密</el-radio>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="设置上报时间" prop="report.type" style="margin-bottom: 0 !important"> <el-form-item label="设置上报时间" prop="report.type" style="margin-bottom: 0 !important">
@ -131,13 +157,19 @@
</el-form-item> </el-form-item>
</el-row> </el-row>
</el-form> </el-form>
<!-- 刷新下发按钮 -->
<Refresh @refresh="onSearch(currentDeviceId, 1)" />
</template> </template>
<script setup> <script setup>
import { ref } from 'vue'; import { computed, ref } from 'vue';
import { useStore } from 'vuex';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import { cloneDeep, isDate } from 'lodash'; import { cloneDeep, isDate } from 'lodash';
import { getConfigFunction, createConfigFunction } from 'apis/index'; import { getConfigFunction, createConfigFunction } from 'apis/index';
import DeviceSelectAndSelect from 'components/device-select-and-status.vue';
import Refresh from 'components/refresh.vue';
const data = ref({ const data = ref({
frequency: { frequency: {
@ -155,23 +187,29 @@ const data = ref({
temperatureLow: 0, // temperatureLow: 0, //
temperatureHigh: 0, // temperatureHigh: 0, //
securityMode: 0, // 0-> 1-> securityMode: 0, // 0-> 1->
corrosiveType: '', // corrosiveType1: '', //
corrosiveType2: '', //
corrosiveType3: '', //
corrosiveType4: '', //
report: { report: {
type: 0, // 0-> 1-> type: 0, // 0-> 1->
timePoints: [0, 0, 0, 0, 0, 0], // timePoints: [0, 0, 0, 0, 0, 0], //
cycle: 0, // cycle: 0, //
}, },
status: { get: 0, set: 0 },
}); });
// //
const types = ref([ const types = ref([
{ value: 0, type: '金属腐蚀通道 1 类型' }, { value: 0, type: '' },
{ value: 1, type: '金属腐蚀通道 2 类型' }, { value: 1, type: '' },
{ value: 2, type: '金属腐蚀通道 3 类型' }, { value: 2, type: '' },
{ value: 3, type: '金属腐蚀通道 4 类型' }, { value: 3, type: '' },
]); ]);
const functionForm = ref(null); // form const functionForm = ref(null); // form
const store = useStore();
const currentDeviceId = computed(() => store.state.device.currentDeviceId);
/** /**
* 格式化时间 * 格式化时间
@ -186,7 +224,7 @@ const formatTime = date => {
const onSubmit = () => { const onSubmit = () => {
functionForm.value.validate(async () => { functionForm.value.validate(async () => {
try { try {
const param = cloneDeep({ ...data.value }); const param = cloneDeep({ ...data.value, deviceId: currentDeviceId.value });
if (param.report.type === 0) { if (param.report.type === 0) {
// //
const points = [...param.report.timePoints]; const points = [...param.report.timePoints];
@ -211,8 +249,15 @@ const onReset = () => {
functionForm.value.resetFields(); functionForm.value.resetFields();
}; };
// /**
getConfigFunction().then(res => { * 查询网络参数配置
data.value = res; * @param {string} deviceId 设备id
}); * @param {number} type 0数据库查询 1刷新查询
*/
const onSearch = async (deviceId, type = 0) => {
const params = { deviceId, type };
store.commit('device/setCurrentDeviceId', deviceId);
const resData = await getConfigFunction(params);
data.value = resData;
};
</script> </script>

39
src/views/network-config.vue

@ -1,4 +1,7 @@
<template> <template>
<!-- 设置站点选择 设备下发状态 -->
<DeviceSelectAndSelect @search="onSearch" :status="data.status" />
<el-form label-position="top" :model="data" ref="networkForm"> <el-form label-position="top" :model="data" ref="networkForm">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
@ -79,12 +82,18 @@
</el-form-item> </el-form-item>
</el-row> </el-row>
</el-form> </el-form>
<!-- 刷新下发按钮 -->
<Refresh @refresh="onSearch(currentDeviceId, 1)" />
</template> </template>
<script setup> <script setup>
import { ref } from 'vue'; import { computed, ref } from 'vue';
import { useStore } from 'vuex';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import { getConfigNetwork, createConfigNetwork } from 'apis/index'; import { getConfigNetwork, createConfigNetwork } from 'apis/index';
import DeviceSelectAndSelect from 'components/device-select-and-status.vue';
import Refresh from 'components/refresh.vue';
const data = ref({ const data = ref({
ip1: '', ip1: '',
@ -98,20 +107,25 @@ const data = ref({
account: '', account: '',
password: '', password: '',
apn: '', apn: '',
status: {
get: 0,
set: 0,
},
}); });
const networkForm = ref(null); // form const networkForm = ref(null); // form
const store = useStore();
const currentDeviceId = computed(() => store.state.device.currentDeviceId);
// //
const onSubmit = () => { const onSubmit = () => {
networkForm.value.validate(async valid => { networkForm.value.validate(async () => {
console.log(valid, { ...data.value }); const param = { ...data.value, deviceId: currentDeviceId.value };
const param = { ...data.value };
try { try {
await createConfigNetwork(param); await createConfigNetwork(param);
ElMessage.success('提交成功'); ElMessage.success('提交成功');
} catch (error) { } catch (error) {
console.log('error: ', error); console.error('error: ', error);
ElMessage.error('提交失败, 请稍后重试'); ElMessage.error('提交失败, 请稍后重试');
} }
}); });
@ -122,8 +136,15 @@ const onReset = () => {
networkForm.value.resetFields(); networkForm.value.resetFields();
}; };
// /**
getConfigNetwork().then(res => { * 查询网络参数配置
data.value = res; * @param {string} deviceId 设备id
}); * @param {number} type 0数据库查询 1刷新查询
*/
const onSearch = async (deviceId, type = 0) => {
const params = { deviceId, type };
store.commit('device/setCurrentDeviceId', deviceId);
const resData = await getConfigNetwork(params);
data.value = resData;
};
</script> </script>

Loading…
Cancel
Save