modelTable.vue 8.2 KB

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