deviceTable.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <template>
  2. <div class="table-container">
  3. <div class="table-list" :style="tableData && tableData.length?'height:calc(100% - 50px);':'height:100%;'">
  4. <el-table :data="tableData" style="width: 100%" height="100%" v-loading="loading" :header-cell-style="headerStyle">
  5. <el-table-column label="所属建筑楼层" show-overflow-tooltip min-width="100">
  6. <template slot-scope="scope">
  7. <div>
  8. {{scope.row.Building?scope.row.Building.BuildLocalName?scope.row.Building.BuildLocalName:'':''}} -
  9. {{scope.row.Floor?scope.row.Floor.FloorLocalName?scope.row.Floor.FloorLocalName:'':''}}
  10. </div>
  11. </template>
  12. </el-table-column>
  13. <el-table-column :label="`${inSpaceType}本地名称`" show-overflow-tooltip min-width="100">
  14. <template slot-scope="scope">
  15. <div>
  16. {{scope.row.EquipLocalName}}
  17. <el-badge v-if="scope.row.Equipment?scope.row.Equipment.Component?scope.row.Equipment.Component.length:false:false"
  18. :value="scope.row.Equipment?scope.row.Equipment.Component?scope.row.Equipment.Component.length:0:0" class="item" type="warning">
  19. </el-badge>
  20. </div>
  21. </template>
  22. </el-table-column>
  23. <el-table-column prop="EquipLocalID" :label="`${inSpaceType}本地编码`" show-overflow-tooltip min-width="100"></el-table-column>
  24. <el-table-column prop="EquipCategory.EquipName" :label="`${inSpaceType}类型`" show-overflow-tooltip min-width="100"></el-table-column>
  25. <el-table-column prop="InstallLocation" label="安装位置" show-overflow-tooltip min-width="100"></el-table-column>
  26. <el-table-column prop="TaskState" label="任务执行情况" show-overflow-tooltip min-width="100"></el-table-column>
  27. <el-table-column prop="action" label="操作" min-width="100">
  28. <template slot-scope="scope">
  29. <i v-if="scope.row.TaskState == '待验证' || scope.row.TaskState == '未找到'" title="查看详情" class="iconfont icon-xiangqing table-button" @click="handleDetail(scope.$index, scope.row)"></i>
  30. <i v-if="scope.row.TaskState == '未找到'" title="重新生成任务" class="iconfont icon-Update table-button" @click="handleRegenerate(scope.$index, scope.row)"></i>
  31. <i v-if="scope.row.TaskState == '待验证'" title="删除任务" class="iconfont icon-delete table-button" @click="handleDelete(scope.$index, scope.row)"></i>
  32. <i v-if="scope.row.TaskState == '未找到'" title="认可此任务执行情况" class="iconfont icon-lijiqueren table-button" @click="handleConfirm(scope.$index, scope.row)"></i>
  33. </template>
  34. </el-table-column>
  35. <template slot="empty">
  36. <div style="height: 60%;transform: translateY(50%);">
  37. <i class="icon-wushuju iconfont"></i>
  38. 数据暂无
  39. </div>
  40. </template>
  41. </el-table>
  42. </div>
  43. <el-pagination class="right" v-show="tableData && tableData.length" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.pageNumber"
  44. :page-sizes="page.pageSizes" :page-size="page.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="page.total">
  45. </el-pagination>
  46. <el-drawer title="任务详情" :visible.sync="drawer" direction="rtl" size="600px">
  47. <device-detail :detail="detailDevice"></device-detail>
  48. </el-drawer>
  49. </div>
  50. </template>
  51. <script>
  52. import { queryDeviceTask, deleteDeviceTask, createDeviceTask, updateDeviceTask } from "@/api/data_admin/buildTaskApi"
  53. import tools from "@/utils/tools"
  54. import { mapGetters } from "vuex"
  55. import deviceDetail from '../detail/deviceDetail'
  56. export default {
  57. components: {
  58. deviceDetail
  59. },
  60. computed: {
  61. ...mapGetters("layout", ["projectId", "userInfo"])
  62. },
  63. props: {
  64. paramsData: Object,
  65. },
  66. data() {
  67. return {
  68. inSpaceType: '设备',
  69. loading: false, // loading
  70. drawer: false, // 详情侧弹窗
  71. detailDevice: {},
  72. tableData: [], //列表数据
  73. page: {
  74. pageSize: 50,
  75. pageSizes: [10, 20, 50, 100],
  76. pageNumber: 1,
  77. total: 0
  78. },
  79. taskStateMap: {
  80. '-1': '未找到',
  81. '0': '已完成',
  82. '1': '待验证'
  83. },
  84. headerStyle: {
  85. backgroundColor: '#e1e4e5',
  86. color: '#2b2b2b',
  87. lineHeight: '30px'
  88. }, // 列表样式
  89. };
  90. },
  91. methods: {
  92. // 获取列表数据
  93. getTableData() {
  94. let params = {
  95. Filters: `ProjectId='${this.projectId}'`,
  96. Cascade: [
  97. {
  98. Name: 'component'
  99. }, {
  100. Name: 'scanScheme'
  101. }, {
  102. Name: 'building',
  103. }, {
  104. Name: 'floor',
  105. }, {
  106. Name: 'equipCategory'
  107. }
  108. ],
  109. Orders: "CreateTime desc, TaskId asc",
  110. PageNumber: this.page.pageNumber,
  111. PageSize: this.page.pageSize
  112. }
  113. if (this.paramsData.buildfloor[0] == "noKnow") {
  114. params.Filters += `;BuildingId isNull`
  115. } else if (this.paramsData.buildfloor[0] && this.paramsData.buildfloor[0] != "all") {
  116. params.Filters += `;BuildingId='${this.paramsData.buildfloor[0]}'`
  117. if (this.paramsData.buildfloor[1] == "noKnow") {
  118. params.Filters += `;FloorId isNull`
  119. } else if (this.paramsData.buildfloor[1] && this.paramsData.buildfloor[1] != "all") {
  120. params.Filters += `;FloorId='${this.paramsData.buildfloor[1]}'`
  121. }
  122. }
  123. if(this.paramsData.taskState !== ''){
  124. params.Filters += `;TaskState=${this.paramsData.taskState}`
  125. }
  126. if(this.paramsData.deviceCategory){
  127. params.Filters += `;Category='${this.paramsData.deviceCategory}'`
  128. }
  129. queryDeviceTask(params, res => {
  130. this.page.total = res.Total;
  131. this.tableData = res.Content.map(item => {
  132. if(item.Component && item.Component.length){
  133. item.ComponentCount = []
  134. item.Component.map(parts => {
  135. if(parts.EquipCategory && parts.EquipCategory.EquipCode && parts.EquipCategory.EquipName){
  136. let index = item.ComponentCount.findIndex(c => {return c.code == parts.EquipCategory.EquipCode})
  137. if(index != -1){
  138. item.ComponentCount[index].count++
  139. } else {
  140. item.ComponentCount.push({
  141. name: parts.EquipCategory.EquipName,
  142. code: parts.EquipCategory.EquipCode,
  143. count: 1
  144. })
  145. }
  146. }
  147. })
  148. }
  149. item.TaskState = this.taskStateMap[item.TaskState]
  150. return item
  151. })
  152. })
  153. },
  154. // 删除关系
  155. handleDelete(index, row) {
  156. this.$confirm("确认删除该任务?", "提示", {
  157. confirmButtonText: '确定',
  158. cancelButtonText: '取消',
  159. type: 'warning'
  160. }).then(() => {
  161. let params = [{TaskId: row.TaskId}]
  162. deleteDeviceTask(params, res => {
  163. this.$message.success('删除成功')
  164. this.getTableData()
  165. })
  166. }).catch(() => {
  167. this.$message("取消删除")
  168. })
  169. },
  170. //重新生成任务
  171. handleRegenerate(index, row){
  172. let params = {
  173. Content: [{
  174. EquipId: row.EquipId,
  175. TaskState: -1
  176. }]
  177. }
  178. createDeviceTask(params, res => {
  179. this.$message.success('重新生成任务成功!')
  180. this.getTableData()
  181. })
  182. },
  183. //认可此任务执行情况
  184. handleConfirm(index, row){
  185. let params = {
  186. Content: [{
  187. ConfirmingPersonId: this.userInfo.userId,
  188. ConfirmingPersonName: this.userInfo.userName,
  189. TaskId: row.TaskId,
  190. TaskState: 0
  191. }]
  192. }
  193. updateDeviceTask(params, res => {
  194. this.$message.success('更新成功!')
  195. this.getTableData()
  196. })
  197. },
  198. //查看任务详情
  199. handleDetail(index, row) {
  200. this.drawer = true
  201. this.detailDevice = row
  202. },
  203. // 改变pagesize
  204. handleSizeChange(pageSize) {
  205. this.page.pageNumber = 1
  206. this.page.pageSize = pageSize;
  207. this.getTableData()
  208. },
  209. // 改变pageno
  210. handleCurrentChange(pageNo) {
  211. this.page.pageNumber = pageNo;
  212. this.getTableData()
  213. }
  214. },
  215. watch: {
  216. paramsData: {
  217. handler(newName, oldName) {
  218. if(!tools.isSimilarly(newName, oldName)){
  219. this.page.pageNumber = 1
  220. this.getTableData()
  221. }
  222. },
  223. immediate: true,
  224. deep: true
  225. },
  226. projectId() {
  227. this.page.pageNumber = 1
  228. this.getTableData()
  229. }
  230. }
  231. };
  232. </script>
  233. <style lang="less" scoped>
  234. /deep/ .el-drawer__body {
  235. height: calc(100% - 80px);
  236. border-top: 1px solid #c9c9c9;
  237. }
  238. /deep/ .el-drawer__header {
  239. margin-bottom: 12px;
  240. }
  241. .table-container {
  242. height: 100%;
  243. background: #fff;
  244. .table-button{
  245. cursor: pointer;
  246. margin-right: 15px;
  247. }
  248. }
  249. </style>