南昌市物联网技防平台-前端
shuishen
2021-03-19 5d4a7611ab51618c2a7dbba3b8ea80cd537278b3
Merge branch 'master' of http://s16s652780.51mypc.cn:49896/r/jfpt-Vue
3 files modified
4 files added
940 ■■■■ changed files
src/api/animalHeat/animalHeat.js 13 ●●●●● patch | view | raw | blame | history
src/api/healthcode/healthcode.js 13 ●●●●● patch | view | raw | blame | history
src/router/views/index.js 433 ●●●● patch | view | raw | blame | history
src/views/animalHeat/animalHeat.vue 207 ●●●●● patch | view | raw | blame | history
src/views/healthcode/healthcode.vue 205 ●●●●● patch | view | raw | blame | history
src/views/home/home.vue 21 ●●●● patch | view | raw | blame | history
vue.config.js 48 ●●●●● patch | view | raw | blame | history
src/api/animalHeat/animalHeat.js
New file
@@ -0,0 +1,13 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
    return request({
        url: '/api/blade-jfpts/animalHeat/animalHeat/page',
        method: 'get',
        params: {
            ...params,
            current,
            size,
        }
    })
}
src/api/healthcode/healthcode.js
New file
@@ -0,0 +1,13 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
    return request({
        url: '/api/blade-jfpts/healthcode/healthcode/page',
        method: 'get',
        params: {
            ...params,
            current,
            size,
        }
    })
}
src/router/views/index.js
@@ -1,216 +1,241 @@
import Layout from '@/page/index/'
export default [{
  path: '/wel',
  component: Layout,
  redirect: '/wel/index',
  children: [{
    path: 'index',
    name: '首页',
    meta: {
      i18n: 'dashboard'
        path: '/wel',
        component: Layout,
        redirect: '/wel/index',
        children: [{
            path: 'index',
            name: '首页',
            meta: {
                i18n: 'dashboard'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/home/home')
        }, {
            path: 'dashboard',
            name: '控制台',
            meta: {
                i18n: 'dashboard',
                menu: false,
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/wel/dashboard')
        }]
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/home/home')
  }, {
    path: 'dashboard',
    name: '控制台',
    meta: {
      i18n: 'dashboard',
      menu: false,
    {
        path: '/distribution',
        component: Layout,
        redirect: '/distribution/index',
        children: [{
            path: 'index',
            name: '警情分发处置',
            meta: {
                i18n: 'distribution'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/distribution/index')
        }]
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/wel/dashboard')
  }]
},
{
  path: '/distribution',
  component: Layout,
  redirect: '/distribution/index',
  children: [{
    path: 'index',
    name: '警情分发处置',
    meta: {
      i18n: 'distribution'
    {
        path: '/test',
        component: Layout,
        redirect: '/test/index',
        children: [{
            path: 'index',
            name: '测试页',
            meta: {
                i18n: 'test'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/util/test')
        }]
    }, {
        path: '/dict-horizontal',
        component: Layout,
        redirect: '/dict-horizontal/index',
        children: [{
            path: 'index',
            name: '字典管理',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/util/demo/dict-horizontal')
        }]
    }, {
        path: '/dict-vertical',
        component: Layout,
        redirect: '/dict-vertical/index',
        children: [{
            path: 'index',
            name: '字典管理',
            meta: {
                i18n: 'dict'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/util/demo/dict-vertical')
        }]
    }, {
        path: '/info',
        component: Layout,
        redirect: '/info/index',
        children: [{
            path: 'index',
            name: '个人信息',
            meta: {
                i18n: 'info'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/system/userinfo')
        }]
    }, {
        path: '/real',
        component: Layout,
        redirect: '/real/video',
        children: [{
            path: 'video',
            name: '视频',
            meta: {
                i18n: 'real'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/Video/video')
        }, {
            path: 'history/:historyId',
            name: '设备历史',
            meta: {
                i18n: 'real'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/realTimePolice/realHistory')
        }]
    }, {
        path: '/work/process/leave',
        component: Layout,
        redirect: '/work/process/leave/form',
        children: [{
            path: 'form/:processDefinitionId',
            name: '请假流程',
            meta: {
                i18n: 'work'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/form')
        }, {
            path: 'handle/:taskId/:processInstanceId/:businessId',
            name: '处理请假流程',
            meta: {
                i18n: 'work'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/handle')
        }, {
            path: 'detail/:processInstanceId/:businessId',
            name: '请假流程详情',
            meta: {
                i18n: 'work'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/work/process/leave/detail')
        }]
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/distribution/index')
  }]
},
{
  path: '/test',
  component: Layout,
  redirect: '/test/index',
  children: [{
    path: 'index',
    name: '测试页',
    meta: {
      i18n: 'test'
    {
        path: '/realTimePolice',
        component: Layout,
        redirect: '/realTimePolice/real',
        children: [{
            path: 'index',
            name: '实时报警',
            meta: {
                i18n: 'real'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/realTimePolice/real')
        }]
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/util/test')
  }]
}, {
  path: '/dict-horizontal',
  component: Layout,
  redirect: '/dict-horizontal/index',
  children: [{
    path: 'index',
    name: '字典管理',
    meta: {
      i18n: 'dict'
    {
        path: '/attendance',
        component: Layout,
        redirect: '/attendance/attendance',
        children: [{
            path: 'index',
            name: '考勤管理',
            meta: {
                i18n: 'attendance'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/attendance/attendance')
        }]
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/util/demo/dict-horizontal')
  }]
}, {
  path: '/dict-vertical',
  component: Layout,
  redirect: '/dict-vertical/index',
  children: [{
    path: 'index',
    name: '字典管理',
    meta: {
      i18n: 'dict'
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/util/demo/dict-vertical')
  }]
}, {
  path: '/info',
  component: Layout,
  redirect: '/info/index',
  children: [{
    path: 'index',
    name: '个人信息',
    meta: {
      i18n: 'info'
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/system/userinfo')
  }]
}, {
  path: '/real',
  component: Layout,
  redirect: '/real/video',
  children: [{
    path: 'video',
    name: '视频',
    meta: {
      i18n: 'real'
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/Video/video')
  }
    , {
    path: 'history/:historyId',
    name: '设备历史',
    meta: {
      i18n: 'real'
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/realTimePolice/realHistory')
  }]
}, {
  path: '/work/process/leave',
  component: Layout,
  redirect: '/work/process/leave/form',
  children: [{
    path: 'form/:processDefinitionId',
    name: '请假流程',
    meta: {
      i18n: 'work'
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/work/process/leave/form')
  }, {
    path: 'handle/:taskId/:processInstanceId/:businessId',
    name: '处理请假流程',
    meta: {
      i18n: 'work'
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/work/process/leave/handle')
  }, {
    path: 'detail/:processInstanceId/:businessId',
    name: '请假流程详情',
    meta: {
      i18n: 'work'
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/work/process/leave/detail')
  }]
},
{
  path: '/realTimePolice',
  component: Layout,
  redirect: '/realTimePolice/real',
  children: [{
    path: 'index',
    name: '实时报警',
    meta: {
      i18n: 'real'
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/realTimePolice/real')
  }]
},
  {
    path: '/attendance',
    component: Layout,
    redirect: '/attendance/attendance',
    children: [{
      path: 'index',
      name: '考勤管理',
      meta: {
        i18n: 'attendance'
      },
      component: () =>
        import( /* webpackChunkName: "views" */ '@/views/attendance/attendance')
    }]
  },
{
  path: '/clientManagement',
  component: Layout,
  redirect: '/clientManagement/clientManagement',
  children: [{
    {
        path: '/clientManagement',
        component: Layout,
        redirect: '/clientManagement/clientManagement',
        children: [{
    path: 'index',
    name: '设备管理',
    meta: {
      i18n: 'clientManagement'
            path: 'index',
            name: '设备管理',
            meta: {
                i18n: 'clientManagement'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/clientManagement/clientManagement')
        }]
    },
    component: () =>
      import( /* webpackChunkName: "views" */ '@/views/clientManagement/clientManagement')
  }]
},
  {
    path: '/suser',
    component: Layout,
    redirect: '/suser/suser',
    children: [{
      path: 'index',
      name: '客户管理',
      meta: {
        i18n: 'suser'
      },
      component: () =>
        import( /* webpackChunkName: "views" */ '@/views/suser/suser')
    }]
  },{
    path: '/policeTracking',
    component: Layout,
    redirect: '/policeTracking/track',
    children: [{
      path: 'track',
      name: '警情追踪',
      meta: {
        i18n: 'track'
      },
      component: () =>
        import( /* webpackChunkName: "views" */ '@/views/policeTracking/policeTracking')
    }]
  }
    {
        path: '/suser',
        component: Layout,
        redirect: '/suser/suser',
        children: [{
            path: 'index',
            name: '客户管理',
            meta: {
                i18n: 'suser'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/suser/suser')
        }]
    }, {
        path: '/policeTracking',
        component: Layout,
        redirect: '/policeTracking/track',
        children: [{
            path: 'track',
            name: '警情追踪',
            meta: {
                i18n: 'track'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/policeTracking/policeTracking')
        }]
    }, {
        path: '/healthcode',
        component: Layout,
        redirect: '/healthcode/healthcodePage',
        children: [{
            path: 'healthcodePage',
            name: '健康码',
            meta: {
                i18n: 'healthcode'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/healthcode/healthcode')
        }]
    }, {
        path: '/animalHeat',
        component: Layout,
        redirect: '/animalHeat/animalHeatPage',
        children: [{
            path: 'animalHeatPage',
            name: '体温检测',
            meta: {
                i18n: 'animalHeat'
            },
            component: () =>
                import ( /* webpackChunkName: "views" */ '@/views/animalHeat/animalHeat')
        }]
    }
]
]
src/views/animalHeat/animalHeat.vue
New file
@@ -0,0 +1,207 @@
<template>
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page="page"
               :permission="permissionList"
               :before-open="beforeOpen"
               v-model="form"
               ref="crud"
               @row-update="rowUpdate"
               @row-save="rowSave"
               @row-del="rowDel"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
      <template slot="menuLeft">
        <el-button type="danger"
                   size="small"
                   icon="el-icon-delete"
                   plain
                   v-if="true"
                   @click="handleDelete">删 除
        </el-button>
      </template>
    </avue-crud>
  </basic-container>
</template>
<script>
  import {getList} from "@/api/animalHeat/animalHeat";
  import {mapGetters} from "vuex";
  export default {
    data() {
      return {
        form: {},
        query: {},
        loading: true,
        page: {
          pageSize: 10,
          currentPage: 1,
          total: 0
        },
        selectionList: [],
        option: {
          height:'auto',
          calcHeight: 30,
          tip: false,
          searchShow: true,
          searchMenuSpan: 6,
          border: true,
          index: true,
          viewBtn: true,
          selection: true,
          labelWidth:120,
          dialogClickModal: false,
          headerAlign: 'center',
          align: 'center',
          column: [
            {
              label: '坐标',
              prop: 'test',
              hide: true,
              span: 24,
              component: "avueMap",
              clickChild: (obj) => {
                this.form.jd = obj.latitude
                this.form.wd = obj.longitude
              },
            },
            {
              label: "检测时间",
              prop: "createTime"
            },
            {
              label: "体温",
              prop: "tempRed"
            },
            {
              label: '图片',
              prop: 'picture',
              type: 'upload',
              width: 300,
              listType: 'picture-img',
              span: 24,
              propsHttp: {
                res: 'data'
              },
              canvasOption: {
                text: 'avue',
                ratio: 0.1
              }
            },
            {
              label: "检测时间",
              prop: "dateTime",
              type: "datetime",
              format: "yyyy-MM-dd",
              valueFormat: "yyyy-MM-dd",
              searchRange: true,
              searchSpan: 5,
              hide: true,
              addDisplay: false,
              editDisplay: false,
              viewDisplay: false,
              search: true,
              rules: [
                {
                  required: true,
                  message: "请输入时间",
                  trigger: "blur"
                }
              ]
            },
            {
              label: "体温状态",
              search: true,
              searchLabelWidth: 120,
              prop: "status",
              searchSpan: 5,
              width:110,
              type: "select",
              dicData: [
                {
                  label: "正常",
                  value: 0
                },
                {
                  label: "异常",
                  value: 1
                }
              ],
            }
          ]
        },
        data: []
      };
    },
    computed: {
      ...mapGetters(["permission"]),
      permissionList() {
        return {
          addBtn: this.vaildData(null, true),
          viewBtn: this.vaildData(null, true),
          delBtn: this.vaildData(null, true),
          editBtn: this.vaildData(null, true)
        };
      },
      ids() {
        let ids = [];
        this.selectionList.forEach(ele => {
          ids.push(ele.id);
        });
        return ids.join(",");
      }
    },
    methods: {
      beforeOpen(done, type) {
      },
      searchReset() {
        this.query = {};
        this.onLoad(this.page);
      },
      searchChange(params, done) {
        this.query = params;
        this.page.currentPage = 1;
        this.onLoad(this.page, params);
        done();
      },
      selectionChange(list) {
        this.selectionList = list;
      },
      selectionClear() {
        this.selectionList = [];
        this.$refs.crud.toggleSelection();
      },
      currentChange(currentPage){
        this.page.currentPage = currentPage;
      },
      sizeChange(pageSize){
        this.page.pageSize = pageSize;
      },
      refreshChange() {
        this.onLoad(this.page, this.query);
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      },
      handleHistory(row) {
        this.$router.push({ path: `/real/history/${row.deviceNumber}` });
      }
    }
  };
</script>
src/views/healthcode/healthcode.vue
New file
@@ -0,0 +1,205 @@
<template>
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page="page"
               :permission="permissionList"
               :before-open="beforeOpen"
               v-model="form"
               ref="crud"
               @row-update="rowUpdate"
               @row-save="rowSave"
               @row-del="rowDel"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
      <template slot="menuLeft">
        <el-button type="danger"
                   size="small"
                   icon="el-icon-delete"
                   plain
                   v-if="true"
                   @click="handleDelete">删 除
        </el-button>
      </template>
    </avue-crud>
  </basic-container>
</template>
<script>
  import {getList} from "@/api/healthcode/healthcode";
  import {mapGetters} from "vuex";
  export default {
    data() {
      return {
        form: {},
        query: {},
        loading: true,
        page: {
          pageSize: 10,
          currentPage: 1,
          total: 0
        },
        selectionList: [],
        option: {
          height:'auto',
          calcHeight: 30,
          tip: false,
          searchShow: true,
          searchMenuSpan: 6,
          border: true,
          index: true,
          viewBtn: true,
          selection: true,
          labelWidth:120,
          dialogClickModal: false,
          headerAlign: 'center',
          align: 'center',
          column: [
            {
              label: '坐标',
              prop: 'test',
              hide: true,
              span: 24,
              component: "avueMap",
              clickChild: (obj) => {
                this.form.jd = obj.latitude
                this.form.wd = obj.longitude
              },
            },
            {
              label: "检测时间",
              prop: "dtime"
            },
            {
              label: '性别',
              prop: 'sex'
            },
            {
              label: "检测时间",
              prop: "dateTime",
              type: "datetime",
              format: "yyyy-MM-dd",
              valueFormat: "yyyy-MM-dd",
              searchRange: true,
              searchSpan: 5,
              hide: true,
              addDisplay: false,
              editDisplay: false,
              viewDisplay: false,
              search: true,
              rules: [
                {
                  required: true,
                  message: "请输入时间",
                  trigger: "blur"
                }
              ]
            },
            {
              label: "行政区",
              searchSpan: 4,
              prop: "addvcd",
              search: true,
              type: "tree",
              dicUrl: "/api/blade-jfpts/district/district/selectd",
              props: {
                label: "addvnm",
                value: "addvcds"
              }
            },
            {
              label: "健康码颜色",
              search: true,
              searchLabelWidth: 120,
              prop: "type",
              searchSpan: 5,
              width:110,
              type: "select",
              dicData: [
                {
                  label: "绿色",
                  value: 1
                },
                {
                  label: "黄色",
                  value: 2
                },
                {
                  label: "红色",
                  value: 3
                }
              ],
            }
          ]
        },
        data: []
      };
    },
    computed: {
      ...mapGetters(["permission"]),
      permissionList() {
        return {
          addBtn: this.vaildData(null, true),
          viewBtn: this.vaildData(null, true),
          delBtn: this.vaildData(null, true),
          editBtn: this.vaildData(null, true)
        };
      },
      ids() {
        let ids = [];
        this.selectionList.forEach(ele => {
          ids.push(ele.id);
        });
        return ids.join(",");
      }
    },
    methods: {
      beforeOpen(done, type) {
      },
      searchReset() {
        this.query = {};
        this.onLoad(this.page);
      },
      searchChange(params, done) {
        this.query = params;
        this.page.currentPage = 1;
        this.onLoad(this.page, params);
        done();
      },
      selectionChange(list) {
        this.selectionList = list;
      },
      selectionClear() {
        this.selectionList = [];
        this.$refs.crud.toggleSelection();
      },
      currentChange(currentPage){
        this.page.currentPage = currentPage;
      },
      sizeChange(pageSize){
        this.page.pageSize = pageSize;
      },
      refreshChange() {
        this.onLoad(this.page, this.query);
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      }
    }
  };
</script>
src/views/home/home.vue
@@ -24,14 +24,23 @@
      }
    },
    mounted() {
      window.handleStart = this.handleStart;
      window.handleStartAnimalHeat = this.handleStartAnimalHeat;
      window.handleStartHealthcode = this.handleStartHealthcode;
    },
    methods: {
      handleStart() {
      this.$router.push({
        path: `/real/history/000000000003`
      });
    }
      handleStartAnimalHeat(data) {
        this.$router.push({
          path: `/animalHeat/animalHeatPage`,
          query: data
        });
      },
      handleStartHealthcode(data){
        this.$router.push({
          path: `/healthcode/healthcodePage`,
          query: data
        });
      }
      // getData() {
      //   var that = this;
      //
vue.config.js
@@ -1,48 +0,0 @@
/*
 * @Descripttion:
 * @version:
 * @Author: song
 * @Date: 2021-01-26 08:56:34
 * @LastEditors: song
 * @LastEditTime: 2021-01-29 15:58:39
 */
module.exports = {
    //路径前缀
    publicPath: "./",
    lintOnSave: true,
    productionSourceMap: false,
    chainWebpack: (config) => {
        //忽略的打包文件
        config.externals({
            'vue': 'Vue',
            'vue-router': 'VueRouter',
            'vuex': 'Vuex',
            'axios': 'axios',
            'element-ui': 'ELEMENT',
        });
        const entry = config.entry('app');
        entry.add('babel-polyfill').end();
        entry.add('classlist-polyfill').end();
        entry.add('@/mock').end();
    },
    css: {
        extract: { ignoreOrder: true }
    },
    //开发模式反向代理配置,生产模式请使用Nginx部署并配置反向代理
    devServer: {
        port: 1888,
        proxy: {
            '/api': {
                //本地服务接口地址
                //target: 'http://localhost:82/',
                target: 'https://web.byisf.com:18001/api/',
                //远程演示服务地址,可用于直接启动项目
                //target: 'https://saber.bladex.vip/api',
                ws: true,
                pathRewrite: {
                    '^/api': '/'
                }
            }
        }
    }
};