modelTable.vue 8.5 KB

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