modelTaskDialog.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <template>
  2. <el-dialog :title="title" :visible.sync="dialogVisible" :before-close="handleClose" width="900px" id="addEqDialog">
  3. <div class="table-box">
  4. <el-table :data="tableData" style="width: 100%" height="350" v-loading="loading" :header-cell-style="headerStyle" ref="multipleTable"
  5. @selection-change="handleSelectionChange">
  6. <el-table-column type="selection" width="55"></el-table-column>
  7. <el-table-column type="expand">
  8. <template slot-scope="props">
  9. <p v-if="props.row.ComponentCount && props.row.ComponentCount.length" style="color:#99a9bf;line-height:32px;font-size:14px;">包含的部件:</p>
  10. <el-form label-position="left" label-width="auto" inline class="demo-table-expand" v-if="props.row.ComponentCount && props.row.ComponentCount.length">
  11. <el-form-item v-for="item in props.row.ComponentCount?props.row.ComponentCount:[]" :key="item.code" :label="`${item.name}:`">
  12. <span>{{ item.count }}</span>
  13. </el-form-item>
  14. </el-form>
  15. </template>
  16. </el-table-column>
  17. <el-table-column prop="FolderName" label="所属模型文件夹" width="110" show-overflow-tooltip></el-table-column>
  18. <el-table-column prop="FileName" label="模型文件名" width="100" show-overflow-tooltip></el-table-column>
  19. <el-table-column prop="EquipLocalName" label="设备本地名称" show-overflow-tooltip width="100"></el-table-column>
  20. <el-table-column prop="EquipLocalID" label="设备本地编码" show-overflow-tooltip width="100"></el-table-column>
  21. <el-table-column prop="EquipCategory.EquipName" label="设备类"></el-table-column>
  22. <el-table-column prop="BimId" label="BIM Id" show-overflow-tooltip width="100"></el-table-column>
  23. <el-table-column prop="type" label="现场验证操作规定" width="150">
  24. <template slot-scope="scope">
  25. <el-select style="width:100px;" v-model="scope.row.SchemeId" placeholder="请选择">
  26. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
  27. </el-select>
  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. <!-- 分页 -->
  38. <el-pagination class="fr" v-show="tableData && tableData.length" @size-change="handleSizeChange" @current-change="handleCurrentChange"
  39. :current-page="page.pageNumber" :page-sizes="page.pageSizes" :page-size="page.pageSize" layout="total, sizes, prev, pager, next, jumper"
  40. :total="page.total"></el-pagination>
  41. </div>
  42. <span slot="footer" class="dialog-footer">
  43. <el-button size="small" @click="$emit('update:dialogVisible',false)">返回重选</el-button>
  44. <el-button size="small" type="primary" @click="savaRelation">确认创建</el-button>
  45. </span>
  46. </el-dialog>
  47. </template>
  48. <script>
  49. import { queryEquip } from "@/api/scan/request"
  50. import { createModelTask } from "@/api/data_admin/buildTaskApi"
  51. import { mapGetters } from "vuex"
  52. export default {
  53. components: {
  54. },
  55. computed: {
  56. ...mapGetters("layout", ["projectId"])
  57. },
  58. data() {
  59. return {
  60. title: "确认创建任务",
  61. options: [{//方案
  62. value: '1',
  63. label: '标准'
  64. }],
  65. tableData: [],
  66. loading: false,
  67. selections: [], // 选中项
  68. page: {
  69. pageSize: 50,
  70. pageSizes: [10, 20, 50, 100],
  71. pageNumber: 1,
  72. total: 0
  73. },
  74. headerStyle: {
  75. backgroundColor: '#e1e4e5',
  76. color: '#2b2b2b',
  77. lineHeight: '30px'
  78. } // 列表样式
  79. };
  80. },
  81. props: {
  82. dialogVisible: Boolean,//是否显示弹窗
  83. params: Object //模型和设备的信息
  84. },
  85. created() { },
  86. methods: {
  87. getTableData() {
  88. let params = {
  89. Cascade: [
  90. {
  91. Name: "equipCategory",
  92. Projection: ["EquipCode", "EquipName"]
  93. },
  94. {
  95. Name: "component",
  96. Cascade: [{Name: "equipCategory"}]
  97. },
  98. {
  99. Name: "building",
  100. Projection: [ "BuildLocalName", "BuildName", "BuildID" ]
  101. },
  102. {
  103. Name: "floor",
  104. Projection: [ "FloorLocalName", "FloorName", "FloorID" ]
  105. }
  106. ],
  107. Filters: `ProjectId='${this.projectId}'`,
  108. Orders: "CreateTime desc, EquipID asc",
  109. PageNumber: this.page.pageNumber,
  110. PageSize: this.page.pageSize
  111. }
  112. if(this.params.spaceList && this.params.spaceList.length){
  113. //通过平面图区域查询(接口未支持)
  114. } else {
  115. params.Filters += `;ModelId='${this.params.CurrentModelId}'`
  116. }
  117. if(this.params.device){
  118. params.Filters += `;Category='${this.params.category}'`
  119. }
  120. queryEquip(params, res => {
  121. this.tableData = res.Content.map(item => {
  122. if(item.Component && item.Component.length){
  123. item.ComponentCount = []
  124. item.Component.map(parts => {
  125. if(parts.EquipCategory && parts.EquipCategory.EquipCode && parts.EquipCategory.EquipName){
  126. let index = item.ComponentCount.findIndex(c => {return c.code == parts.EquipCategory.EquipCode})
  127. if(index != -1){
  128. item.ComponentCount[index].count++
  129. } else {
  130. item.ComponentCount.push({
  131. name: parts.EquipCategory.EquipName,
  132. code: parts.EquipCategory.EquipCode,
  133. count: 1
  134. })
  135. }
  136. }
  137. })
  138. }
  139. item.FolderName = this.params.modelFolderName
  140. item.FolderId = this.params.modelFolderId
  141. item.FileName = this.params.modelFileName
  142. item.FileId = this.params.CurrentModelId
  143. item.SchemeId = "1"
  144. return item
  145. })
  146. this.page.total = res.Total
  147. })
  148. },
  149. //选中项修改
  150. handleSelectionChange(val) {
  151. this.selections = val;
  152. },
  153. savaRelation() {
  154. if(this.selections.length){
  155. let list = this.selections.map((item) => {
  156. return {
  157. EquipID: item.EquipID,
  158. FileId: item.FileId,
  159. FileName: item.FileName,
  160. FolderId: item.FolderId,
  161. FolderName: item.FolderName
  162. }
  163. })
  164. let params = {
  165. Content: list
  166. }
  167. createModelTask(params, res => {
  168. this.$emit('update:dialogVisible',false)
  169. this.$message.success('创建成功!')
  170. this.$router.push({name:'buildTask'})//跳转回首页
  171. })
  172. }else {
  173. this.$message('请选择要创建的任务!')
  174. }
  175. },
  176. //改变pagesize
  177. handleSizeChange(pageSize) {
  178. this.page.pageSize = pageSize;
  179. this.getTableData();
  180. },
  181. //改变pageno
  182. handleCurrentChange(pageNo) {
  183. this.page.pageNumber = 1
  184. this.page.pageNumber = pageNo;
  185. this.getTableData();
  186. },
  187. handleClose(){//关闭弹窗
  188. this.$emit('update:dialogVisible',false);
  189. }
  190. },
  191. watch: {
  192. dialogVisible(newData,oldData){
  193. if(newData){
  194. this.tableData = []
  195. this.page.pageNumber = 1
  196. this.getTableData()
  197. }
  198. }
  199. },
  200. };
  201. </script>
  202. <style lang="less" scoped>
  203. #addEqDialog {
  204. .filters {
  205. margin-bottom: 10px;
  206. /deep/ .el-input__inner {
  207. vertical-align: baseline;
  208. }
  209. }
  210. .table-box {
  211. height: 370px;
  212. .fr{
  213. margin-top: 10px;
  214. }
  215. }
  216. }
  217. </style>
  218. <style>
  219. .demo-table-expand {
  220. font-size: 0;
  221. }
  222. .demo-table-expand label {
  223. width: 90px;
  224. color: #99a9bf;
  225. }
  226. .demo-table-expand .el-form-item {
  227. margin-right: 0;
  228. margin-bottom: 0;
  229. margin-left: 120px;
  230. width: 100%;
  231. }
  232. </style>