Ver código fonte

现场任务管理开发

zhangyu 5 anos atrás
pai
commit
1af29b99b1

+ 4 - 4
src/components/data_admin/buildTask/dialog/addTaskDialog.vue

@@ -41,7 +41,7 @@ export default {
       title: "添加验证任务",
       dialogVisible: false,
       ruleForm: {
-        delivery: false,
+        isVerification: false,
         taskType: ''
       },
       rules: {
@@ -62,11 +62,11 @@ export default {
       this.$refs.ruleForm.validate((valid) => {
         if (valid) {
           if (this.ruleForm.taskType == 'model') {
-
+            this.$router.push({ path: '/floor/addModelTask', query: this.ruleForm });
           } else if (this.ruleForm.taskType == 'device') {
-
+            this.$router.push({ path: '/floor/addDeviceTask', query: this.ruleForm });
           } else if (this.ruleForm.taskType == 'assets') {
-
+            this.$router.push({ path: '/floor/addAssetsTask', query: this.ruleForm });
           }
         } else {
           console.log('error submit!!');

+ 27 - 6
src/router/system.js

@@ -36,6 +36,9 @@ import spaceRela from '@/views/point/dynamicdata/addRelation/spaceRela'
 
 /** 扫楼作业 */
 import buildTask from '@/views/data_admin/buildTask'
+import addDeviceTask from '@/views/data_admin/buildTask/addTask/addDeviceTask'
+import addAssetsTask from '@/views/data_admin/buildTask/addTask/addAssetsTask'
+import addModelTask from '@/views/data_admin/buildTask/addTask/addModelTask'
 import buildAssets from '@/views/data_admin/buildAssets'
 import buildLog from '@/views/data_admin/buildLog'
 import buildData from '@/views/data_admin/buildData'
@@ -188,36 +191,54 @@ export default [
         name: 'LayoutMain',
         component: LayoutMain,
         children: [
-            { path: '', name: 'buildData', component: buildData },
+            { path: '', name: 'buildTask', component: buildTask },
             {
                 path: 'task',
                 name: 'buildTask',
                 component: buildTask,
-                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor/task' }, { label: '现场任务管理' }] }
+                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor' }, { label: '现场任务管理' }] }
+            },
+            {
+                path: 'addDeviceTask',
+                name: 'addDeviceTask',
+                component: addDeviceTask,
+                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor' }, { label: '现场任务管理', path: '/floor/task' }, { label: '现场验证设备台账' }] }
+            },
+            {
+                path: 'addAssetsTask',
+                name: 'addAssetsTask',
+                component: addAssetsTask,
+                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor' }, { label: '现场任务管理', path: '/floor/task' }, { label: '现场验证资产台账' }] }
+            },
+            {
+                path: 'addModelTask',
+                name: 'addModelTask',
+                component: addModelTask,
+                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor' }, { label: '现场任务管理', path: '/floor/task' }, { label: '现场验证模型' }] }
             },
             {
                 path: 'data',
                 name: 'buildData',
                 component: buildData,
-                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor/task' }, { label: '现场数据整理', path: '/floor/data' }, { label: '信息点整理' }] }
+                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor' }, { label: '现场数据整理', path: '/floor/data' }, { label: '信息点整理' }] }
             },
             {
                 path: 'plan',
                 name: 'buildGraphy',
                 component: buildGraphy,
-                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor/task' }, { label: '现场数据整理', path: '/floor/data' }, { label: '位置标签整理' }] }
+                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor' }, { label: '现场数据整理', path: '/floor/data' }, { label: '位置标签整理' }] }
             },
             {
                 path: 'abnormalprop',
                 name: 'buildAssets',
                 component: buildAssets,
-                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor/task' }, { label: '扫楼报告' }] }
+                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor' }, { label: '扫楼报告' }] }
             },
             {
                 path: 'log',
                 name: 'buildLog',
                 component: buildLog,
-                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor/task' }, { label: '扫楼日志查看' }] }
+                meta: { keepAlive: false, breadcrumbs: [{ label: '扫楼作业', path: '/floor' }, { label: '扫楼日志查看' }] }
             }
         ]
     },

+ 228 - 0
src/views/data_admin/buildTask/addTask/addAssetsTask.vue

@@ -0,0 +1,228 @@
+<template>
+  <div class="box">
+    <div class="condition">
+      <div class="header">
+        <!-- <i style="float:left;font-size:30px;padding-right:10px;cursor:pointer;" title="返回" @click="goBack" class="el-icon-back"></i> -->
+        <el-button style="float:left;" size="small" type="default" icon="el-icon-back" @click="goBack"></el-button>
+        <floor-cascader ref="floorCascader" @change="changeFloor"></floor-cascader>
+        <my-cascader ref="cascader" @change="changeDevice"></my-cascader>
+        <el-input placeholder="请输入安装位置" style="width: 200px;margin-left:20px;" v-model="keycode" clearable @keyup.enter.native="getTableData">
+          <i slot="suffix" class="el-input__icon el-icon-search" style="cursor:pointer;" @click="getTableData"></i>
+        </el-input>
+        <el-button style="float:right;margin-top:1px;" @click="handleClickCreate">创建已选</el-button>
+      </div>
+      <div class="main" :style="tableData && tableData.length?'height: calc(100% - 96px);':'height: calc(100% - 46px);'">
+        <el-table ref="multipleTable" :data="tableData" v-loading='loading' stripe height="100%" @selection-change="handleSelectionChange" :header-cell-style="headerStyle">
+          <el-table-column type="selection" width="55"></el-table-column>
+          <el-table-column label="所属建筑楼层" width="200">
+            <template slot-scope="scope">{{ scope.row.EquipLocalName?scope.row.EquipLocalName:scope.row.EquipName }}</template>
+          </el-table-column>
+          <el-table-column label="资产本地名称" show-overflow-tooltip>
+            <template slot-scope="scope">{{ scope.row.EquipLocalID?scope.row.EquipLocalID:scope.row.EquipID }}</template>
+          </el-table-column>
+          <el-table-column prop="EquipCategory.EquipName" label="资产本地编码" show-overflow-tooltip width="200"></el-table-column>
+          <el-table-column prop="Building.BuildLocalName" label="设备族"></el-table-column>
+          <el-table-column prop="Floor.FloorLocalName" label="安装位置"></el-table-column>
+          <template slot="empty">
+          <div style="height: 60%;transform: translateY(50%);">
+            <i class="icon-wushuju iconfont"></i>
+            数据暂无
+          </div>
+        </template>
+        </el-table>
+      </div>
+      <div class=footer>
+        <el-pagination
+          class="right"
+          v-show="tableData && tableData.length"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="page.pageNumber"
+          :page-sizes="page.pageSizes"
+          :page-size="page.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="page.total">
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex"
+//组件
+import floorCascader from "@/components/ledger/lib/floorCascader"
+import myCascader from "@/components/ledger/lib/assets"
+//api
+import { queryPartsDie, createPropertys } from "@/api/scan/request";
+export default {
+  data() {
+    return {
+      params: {},
+      loading: false,
+      page: {
+        pageSize: 50,
+        pageSizes: [10, 20, 50, 100],
+        pageNumber: 1,
+        total: 0
+      },
+      tableData: [],
+      multipleSelection:[],
+      headerStyle: {
+        backgroundColor: '#e1e4e5',
+        color: '#2b2b2b',
+        lineHeight: '30px'
+      }, // 列表样式
+    }
+  },
+  computed: {
+    ...mapGetters("layout", ["projectId", "userId", "secret"])
+  },
+  components: {
+    floorCascader,
+    myCascader
+  },
+  created() {
+    this.params = this.$route.query
+  },
+  mounted() {
+    
+  },
+  watch: {
+    projectId() {}
+  },
+  methods: {
+    //返回
+    goBack() {
+      this.$router.push({ name: "buildTask" })
+    },
+    //选择设备或部件
+    changeDevice(val) {
+      if(val.code) {
+        this.params.category = val.code
+      } else {
+        this.params.category = ''
+      }
+      this.page.pageNumber = 1
+      this.getTableData()
+    },
+    //选择建筑楼层
+    changeFloor(value) {
+      if (value[0]) {
+        this.params.buildId = value[0]
+      }
+      if (value[1]) {
+        this.params.floorId = value[1]
+      } else {
+        this.params.floorId = ''
+      }
+      this.page.pageNumber = 1
+      this.getTableData()
+    },
+    //获取表格数据
+    getTableData() {
+      this.loading = true
+      let param = this.formatFilter()
+      queryPartsDie(param, res => {
+        this.tableData = res.Content
+        this.page.total = res.Total
+        this.loading = false
+      })
+    },
+    //格式化条件
+    formatFilter() {
+      let param = {
+        Cascade: [
+          {
+            Name: "equipCategory",
+            Projection: ["EquipCode", "EquipName"]
+          },
+          {
+            Name: "building",
+            Projection: [ "BuildLocalName", "BuildName", "BuildID" ]
+          },
+          {
+            Name: "floor",
+            Projection: [ "FloorLocalName", "FloorName", "FloorID" ]
+          }
+        ],
+        Filters: `category='${this.params.category}';PropertyId isNull`,
+        Orders: "createTime desc, EquipID asc",
+        PageNumber: this.page.pageNumber,
+        PageSize: this.page.pageSize
+      }
+
+      if (this.params.buildId == "noKnow") {
+        param.Filters += `;buildingId isNull`
+      } else if (this.params.buildId && this.params.buildId != "all") {
+        param.Filters += `;buildingId='${this.params.buildId}'`
+      }
+
+      if (this.params.floorId == "noKnow") {
+        param.Filters += `;floorId isNull`
+      } else if (this.params.floorId && this.params.floorId != "all") {
+        param.Filters += `;floorId='${this.params.floorId}'`
+      }
+
+      return param
+    },
+    //选择的设备或部件
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    //切换每页显示多少条数据
+    handleSizeChange(val) {
+      this.page.pageSize = val
+      this.getTableData()
+    },
+    //切换页数
+    handleCurrentChange(val) {
+      this.page.pageNumber = val
+      this.getTableData()
+    },
+    //查看详情
+    handleOpenDetail(row) {
+      // window.open(`http://adm.sagacloud.cn:8058/spread?id=${row.EquipID}&pid=${this.projectId}&secret=${this.secret}`,"_blank")
+      this.$message("开发中...")
+    },
+    //创建已选
+    handleClickCreate() {
+      let list = this.multipleSelection.map((item) => {
+        return item.EquipID
+      })
+      let param = {
+        Filters: `EquipID in ${JSON.stringify(list)}`
+      }
+      createPropertys(param, res => {
+        this.$message.success("创建成功!")
+        this.$router.push({
+          name: "propertyLedger",
+          params: { Family: this.params.Family }
+        })
+      })
+    }
+  }
+};
+</script>
+
+<style scoped lang='less'>
+.box {
+  .condition {
+    padding: 10px;
+    display: flex;
+    height: 100%;
+    flex-direction: column;
+    border: 1px solid #dfe6ec;
+    background: #fff;
+    margin-bottom: 10px;
+    .header{
+      padding-bottom: 10px;
+      border-bottom: 1px solid #bcbcbc;
+    }
+    .main{
+      margin-top: 10px;
+    }
+  }
+}
+</style>
+

+ 303 - 0
src/views/data_admin/buildTask/addTask/addDeviceTask.vue

@@ -0,0 +1,303 @@
+<template>
+  <div class="box">
+    <div class="condition">
+      <div class="header">
+        <el-button style="float:left;" size="small" type="default" icon="el-icon-back" @click="goBack"></el-button>
+        <floor-cascader ref="floorCascader" @change="changeFloor"></floor-cascader>
+        <my-cascader ref="cascader" @change="changeDevice"></my-cascader>
+        <el-input placeholder="请输入安装位置" style="width: 200px;margin-left:20px;" v-model="keycode" clearable @keyup.enter.native="getTableData">
+          <i slot="suffix" class="el-input__icon el-icon-search" style="cursor:pointer;" @click="getTableData"></i>
+        </el-input>
+        <el-button style="float:right;margin-top:1px;" @click="handleClickCreate">创建已选</el-button>
+      </div>
+      <div class="main" :style="tableData && tableData.length?'height: calc(100% - 96px);':'height: calc(100% - 46px);'">
+        <el-table ref="multipleTable" :data="tableData" v-loading='loading' stripe height="100%" @selection-change="handleSelectionChange" :header-cell-style="headerStyle">
+          <el-table-column type="selection" width="55"></el-table-column>
+          <el-table-column type="expand">
+            <template slot-scope="props">
+              <p v-if="props.row.partsList && props.row.partsList.length" style="color:#99a9bf;line-height:32px;font-size:14px;">包含的部件:</p>
+              <el-form label-position="left" inline class="demo-table-expand" v-if="props.row.partsList && props.row.partsList.length">
+                <el-form-item v-for="item in props.row.partsList" :key="item.name" :label="`${item.name}:`">
+                  <span>{{ item.number }}</span>
+                </el-form-item>
+              </el-form>
+            </template>
+          </el-table-column>
+          <el-table-column label="所属建筑楼层" width="200">
+            <template slot-scope="scope">{{ scope.row.build }}-{{ scope.row.floor }}</template>
+          </el-table-column>
+          <el-table-column prop="EquipLocalName" label="设备本地名称" show-overflow-tooltip></el-table-column>
+          <el-table-column prop="EquipLocalId" label="设备本地编码" show-overflow-tooltip width="200"></el-table-column>
+          <el-table-column prop="EquipName" label="设备类"></el-table-column>
+          <el-table-column prop="installation" label="安装位置"></el-table-column>
+          <el-table-column prop="type" label="现场验证操作规定" width="200">
+            <template slot-scope="scope">
+              <el-button @click.native.prevent="handleOpenDetail(scope.row, tableData)" type="text" size="small">详情</el-button>
+            </template>
+          </el-table-column>
+          <template slot="empty">
+          <div style="height: 60%;transform: translateY(50%);">
+            <i class="icon-wushuju iconfont"></i>
+            数据暂无
+          </div>
+        </template>
+        </el-table>
+      </div>
+      <div class=footer>
+        <el-pagination
+          class="right"
+          v-show="tableData && tableData.length"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="page.pageNumber"
+          :page-sizes="page.pageSizes"
+          :page-size="page.pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="page.total">
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex"
+//组件
+import floorCascader from "@/components/ledger/lib/floorCascader"
+import myCascader from "@/components/ledger/lib/cascader"
+//api
+import { queryPartsDie, createPropertys } from "@/api/scan/request";
+export default {
+  data() {
+    return {
+      params: {},
+      loading: false,
+      keycode: '',
+      page: {
+        pageSize: 50,
+        pageSizes: [10, 20, 50, 100],
+        pageNumber: 1,
+        total: 0
+      },
+      tableData: [{
+        build: 'A栋',
+        floor: '12F',
+        EquipLocalName: 'XXXXXXXXXXX',
+        EquipLocalId: '5484161891',
+        EquipName: '低压开关柜',
+        installation: '王小虎夫妻店',
+        type: '1'
+      }, {
+        build: 'A栋',
+        floor: '12F',
+        EquipLocalName: 'XXXXXXXXXXX',
+        EquipLocalId: '5484161891',
+        EquipName: '低压开关柜',
+        installation: '王小虎夫妻店',
+        type: '1',
+        partsList: [{
+          name: '部件1',
+          number: 6
+        }, {
+          name: '部件2',
+          number: 23
+        }, {
+          name: '部件3',
+          number: 5
+        }, {
+          name: '部件4',
+          number: 9
+        }, {
+          name: '部件5',
+          number: 1
+        }]
+      }, {
+        build: 'A栋',
+        floor: '12F',
+        EquipLocalName: 'XXXXXXXXXXX',
+        EquipLocalId: '5484161891',
+        EquipName: '低压开关柜',
+        installation: '王小虎夫妻店',
+        type: '1'
+      }, {
+        build: 'A栋',
+        floor: '12F',
+        EquipLocalName: 'XXXXXXXXXXX',
+        EquipLocalId: '5484161891',
+        EquipName: '低压开关柜',
+        installation: '王小虎夫妻店',
+        type: '1'
+      }],
+      multipleSelection:[],
+      headerStyle: {
+        backgroundColor: '#e1e4e5',
+        color: '#2b2b2b',
+        lineHeight: '30px'
+      }, // 列表样式
+    }
+  },
+  computed: {
+    ...mapGetters("layout", ["projectId", "userId", "secret"])
+  },
+  components: {
+    floorCascader,
+    myCascader
+  },
+  created() {
+    this.params = this.$route.query
+  },
+  mounted() {
+    
+  },
+  watch: {
+    projectId() {}
+  },
+  methods: {
+    //返回
+    goBack() {
+      this.$router.push({ name: "buildTask" })
+    },
+    //选择设备或部件
+    changeDevice(val) {
+      if(val.code) {
+        this.params.category = val.code
+      } else {
+        this.params.category = ''
+      }
+      this.page.pageNumber = 1
+      this.getTableData()
+    },
+    //选择建筑楼层
+    changeFloor(value) {
+      if (value[0]) {
+        this.params.buildId = value[0]
+      }
+      if (value[1]) {
+        this.params.floorId = value[1]
+      } else {
+        this.params.floorId = ''
+      }
+      this.page.pageNumber = 1
+      this.getTableData()
+    },
+    //获取表格数据
+    getTableData() {
+      this.loading = true
+      let param = this.formatFilter()
+      queryPartsDie(param, res => {
+        this.tableData = res.Content
+        this.page.total = res.Total
+        this.loading = false
+      })
+    },
+    //格式化条件
+    formatFilter() {
+      let param = {
+        Cascade: [
+          {
+            Name: "equipCategory",
+            Projection: ["EquipCode", "EquipName"]
+          },
+          {
+            Name: "building",
+            Projection: [ "BuildLocalName", "BuildName", "BuildID" ]
+          },
+          {
+            Name: "floor",
+            Projection: [ "FloorLocalName", "FloorName", "FloorID" ]
+          }
+        ],
+        Filters: `category='${this.params.category}';PropertyId isNull`,
+        Orders: "createTime desc, EquipID asc",
+        PageNumber: this.page.pageNumber,
+        PageSize: this.page.pageSize
+      }
+
+      if (this.params.buildId == "noKnow") {
+        param.Filters += `;buildingId isNull`
+      } else if (this.params.buildId && this.params.buildId != "all") {
+        param.Filters += `;buildingId='${this.params.buildId}'`
+      }
+
+      if (this.params.floorId == "noKnow") {
+        param.Filters += `;floorId isNull`
+      } else if (this.params.floorId && this.params.floorId != "all") {
+        param.Filters += `;floorId='${this.params.floorId}'`
+      }
+
+      return param
+    },
+    //选择的设备或部件
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    //切换每页显示多少条数据
+    handleSizeChange(val) {
+      this.page.pageSize = val
+      this.getTableData()
+    },
+    //切换页数
+    handleCurrentChange(val) {
+      this.page.pageNumber = val
+      this.getTableData()
+    },
+    //查看详情
+    handleOpenDetail(row) {
+      // window.open(`http://adm.sagacloud.cn:8058/spread?id=${row.EquipID}&pid=${this.projectId}&secret=${this.secret}`,"_blank")
+      this.$message("开发中...")
+    },
+    //创建已选
+    handleClickCreate() {
+      let list = this.multipleSelection.map((item) => {
+        return item.EquipID
+      })
+      let param = {
+        Filters: `EquipID in ${JSON.stringify(list)}`
+      }
+      createPropertys(param, res => {
+        this.$message.success("创建成功!")
+        this.$router.push({
+          name: "propertyLedger",
+          params: { Family: this.params.Family }
+        })
+      })
+    }
+  }
+};
+</script>
+
+<style scoped lang='less'>
+.box {
+  .condition {
+    padding: 10px;
+    display: flex;
+    height: 100%;
+    flex-direction: column;
+    border: 1px solid #dfe6ec;
+    background: #fff;
+    .header{
+      padding-bottom: 10px;
+      border-bottom: 1px solid #bcbcbc;
+    }
+    .main{
+      margin-top: 10px;
+    }
+  }
+}
+</style>
+
+<style>
+  .demo-table-expand {
+    font-size: 0;
+  }
+  .demo-table-expand label {
+    width: 90px;
+    color: #99a9bf;
+  }
+  .demo-table-expand .el-form-item {
+    margin-right: 0;
+    margin-bottom: 0;
+    margin-left: 120px;
+    width: 100%;
+  }
+</style>

+ 0 - 0
src/views/data_admin/buildTask/addTask/addModelTask.vue