versionDialog.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <template>
  2. <el-dialog :title="title" :visible.sync="dialog" :before-close="handleClose" width="900px">
  3. <div v-loading="loading" class="content">
  4. <el-scrollbar style="height:100%;">
  5. <span>上传人:{{ versionData.userName }}</span>
  6. <span style="marginLeft:30px;">上传时间:{{ versionData.acceptTime }}</span>
  7. <p style="marginTop:15px;">更新内容:</p>
  8. <div
  9. v-if="Object.keys(versionData.createData).length || Object.keys(versionData.deleteData).length || versionData.buildList.length">
  10. <!-- 新增设备概要内容 -->
  11. <el-divider v-if="Object.keys(versionData.createData).length">新增设备概要内容</el-divider>
  12. <p v-if="Object.keys(versionData.createData).length" style="marginBottom:10px;">
  13. 于【{{ versionData.acceptTime }}】上传模型文件,新增设备实例如下:</p>
  14. <p v-for="(item, key) in versionData.createData" :key="'C'+key">【{{ mapType[key] }}】:【{{ item.length }}】个</p>
  15. <!-- 删除设备概要内容 -->
  16. <el-divider v-if="Object.keys(versionData.deleteData).length">删除设备概要内容</el-divider>
  17. <p v-if="Object.keys(versionData.deleteData).length" style="marginBottom:10px;">
  18. 于【{{ versionData.acceptTime }}】上传模型文件,删除设备实例如下:</p>
  19. <p v-for="(item, key) in versionData.deleteData" :key="'D'+key">【{{ mapType[key] }}】:【{{ item.length }}】个</p>
  20. <!-- 土建设备概要内容 -->
  21. <el-divider v-if="versionData.buildList.length">土建设备概要内容</el-divider>
  22. <p v-if="versionData.buildList.length" style="marginBottom:10px;">
  23. 于【{{ versionData.acceptTime }}】上传模型文件,增删土建设备实例如下:</p>
  24. <p v-if="versionData.createWall.length">【新增实体墙】:【{{ versionData.createWall.length }}】个</p>
  25. <p v-if="versionData.deleteWall.length">【删除实体墙】:【{{ versionData.deleteWall.length }}】个</p>
  26. <p v-if="versionData.createVirtualWall.length">【新增虚拟墙】:【{{ versionData.createVirtualWall.length }}】个</p>
  27. <p v-if="versionData.deleteVirtualWall.length">【删除虚拟墙】:【{{ versionData.deleteVirtualWall.length }}】个</p>
  28. <p v-if="versionData.createColumn.length">【新增柱体】:【{{ versionData.createColumn.length }}】个</p>
  29. <p v-if="versionData.deleteColumn.length">【删除柱体】:【{{ versionData.deleteColumn.length }}】个</p>
  30. <!-- 新增设备 -->
  31. <el-divider v-if="Object.keys(versionData.createData).length">新增设备</el-divider>
  32. <div v-for="(item, key) in versionData.createData" :key="'CL'+key">
  33. <p>【{{ mapType[key] }}】</p>
  34. <p v-for="(obj, i) in item" :key="obj.Id">
  35. 【{{ i + 1 }}】、建筑:【{{ obj.BuildingName || "无" }}】;楼层:【{{
  36. obj.FloorName || "无"
  37. }}】;设备全局id:【{{ obj.ObjId || "无" }}】;BIMID:【{{ obj.BimId || "无" }}】;设备本地编码:【{{
  38. obj.LocalId || "无"
  39. }}】;设备本地名称:【{{ obj.LocalName || "无" }}】;CADID:【{{ obj.CADID || "无" }}】;</p>
  40. </div>
  41. <!-- 删除设备 -->
  42. <el-divider v-if="Object.keys(versionData.deleteData).length">删除设备</el-divider>
  43. <div v-for="(item, key) in versionData.deleteData" :key="'DL'+key">
  44. <p>【{{ mapType[key] }}】</p>
  45. <p v-for="(obj, i) in item" :key="obj.Id">
  46. 【{{ i + 1 }}】、建筑:【{{ obj.BuildingName || "无" }}】;楼层:【{{
  47. obj.FloorName || "无"
  48. }}】;设备全局id:【{{ obj.ObjId || "无" }}】;BIMID:【{{ obj.BimId || "无" }}】;设备本地编码:【{{
  49. obj.LocalId || "无"
  50. }}】;设备本地名称:【{{ obj.LocalName || "无" }}】;CADID:【{{ obj.CADID || "无" }}】;</p>
  51. </div>
  52. <!-- 新增实体墙 -->
  53. <el-divider v-if="versionData.createWall.length">新增实体墙</el-divider>
  54. <p v-for="(obj, i) in versionData.createWall" :key="obj.Id">
  55. 【{{ i + 1 }}】、建筑:【{{ obj.BuildingName || "无" }}】;楼层:【{{ obj.FloorName || "无" }}】;Id:【{{
  56. obj.ObjId || "无"
  57. }}】;</p>
  58. <!-- 删除实体墙 -->
  59. <el-divider v-if="versionData.deleteWall.length">删除实体墙</el-divider>
  60. <p v-for="(obj, i) in versionData.deleteWall" :key="obj.Id">
  61. 【{{ i + 1 }}】、建筑:【{{ obj.BuildingName || "无" }}】;楼层:【{{ obj.FloorName || "无" }}】;Id:【{{
  62. obj.ObjId || "无"
  63. }}】;</p>
  64. <!-- 新增虚拟墙 -->
  65. <el-divider v-if="versionData.createVirtualWall.length">新增虚拟墙</el-divider>
  66. <p v-for="(obj, i) in versionData.createVirtualWall" :key="obj.Id">
  67. 【{{ i + 1 }}】、建筑:【{{ obj.BuildingName || "无" }}】;楼层:【{{ obj.FloorName || "无" }}】;Id:【{{
  68. obj.ObjId || "无"
  69. }}】;</p>
  70. <!-- 删除虚拟墙 -->
  71. <el-divider v-if="versionData.deleteVirtualWall.length">删除虚拟墙</el-divider>
  72. <p v-for="(obj, i) in versionData.deleteVirtualWall" :key="obj.Id">
  73. 【{{ i + 1 }}】、建筑:【{{ obj.BuildingName || "无" }}】;楼层:【{{ obj.FloorName || "无" }}】;Id:【{{
  74. obj.ObjId || "无"
  75. }}】;</p>
  76. <!-- 新增柱体 -->
  77. <el-divider v-if="versionData.createColumn.length">新增柱体</el-divider>
  78. <p v-for="(obj, i) in versionData.createColumn" :key="obj.Id">
  79. 【{{ i + 1 }}】、建筑:【{{ obj.BuildingName || "无" }}】;楼层:【{{ obj.FloorName || "无" }}】;Id:【{{
  80. obj.ObjId || "无"
  81. }}】;</p>
  82. <!-- 删除柱体 -->
  83. <el-divider v-if="versionData.deleteColumn.length">删除柱体</el-divider>
  84. <p v-for="(obj, i) in versionData.deleteColumn" :key="obj.Id">
  85. 【{{ i + 1 }}】、建筑:【{{ obj.BuildingName || "无" }}】;楼层:【{{ obj.FloorName || "无" }}】;Id:【{{
  86. obj.ObjId || "无"
  87. }}】;</p>
  88. </div>
  89. <div v-else>
  90. <div
  91. style="height: 60%;transform: translateY(50%);font-weight: normal;font-size: 12px;text-align: center;color: #909399;">
  92. <i class="icon-wushuju iconfont"></i>
  93. 暂无数据
  94. </div>
  95. </div>
  96. </el-scrollbar>
  97. </div>
  98. <span slot="footer" class="dialog-footer">
  99. <el-button size="small" type="primary" @click="handleClose">关闭</el-button>
  100. <!-- <el-button size="small" type="primary">确 定</el-button> -->
  101. </span>
  102. </el-dialog>
  103. </template>
  104. <script>
  105. import { mapGetters } from "vuex";
  106. import { querySyncLogCount } from "@/api/model/file.js";
  107. import { getAllEqPaType } from "@/api/scan/request";
  108. import { queryPhysicsAllType } from "@/api/dict";
  109. export default {
  110. components: {},
  111. props: {
  112. dialogVisible: Boolean,
  113. modelFile: Object,
  114. },
  115. computed: {
  116. ...mapGetters("layout", ["projectId"]),
  117. dialog() {
  118. return this.dialogVisible;
  119. }
  120. },
  121. data() {
  122. return {
  123. title: "版本文件信息",
  124. loading: true,
  125. logData: [],
  126. versionData: {
  127. userName: '',
  128. acceptTime: '',
  129. createData: {},
  130. deleteData: {},
  131. buildList: [],
  132. createWall: [],
  133. deleteWall: [],
  134. createVirtualWall: [],
  135. deleteVirtualWall: [],
  136. createColumn: [],
  137. deleteColumn: [],
  138. },
  139. mapType: {
  140. 'Wall': '实体墙',
  141. 'VirtualWall': '虚拟墙',
  142. 'Column': '柱体',
  143. },
  144. }
  145. },
  146. mounted() {
  147. },
  148. methods: {
  149. // 关闭弹窗
  150. handleClose() {
  151. this.$emit("update:dialogVisible", false);
  152. },
  153. // 获取版本信息
  154. getData() {
  155. if (this.modelFile.Id || this.modelFile.CurrentModelId) {
  156. this.versionData.userName = this.modelFile.UserName;
  157. this.versionData.acceptTime = this.modelFile.AcceptTime;
  158. let promise1 = new Promise((resolve, reject) => {
  159. querySyncLogCount({
  160. Filters: `ModelId='${this.modelFile.CurrentModelId ? this.modelFile.CurrentModelId : this.modelFile.Id}'`,
  161. PageNumber: 1,
  162. PageSize: 1000,
  163. }, res => {
  164. resolve(res)
  165. })
  166. })
  167. let promise2 = new Promise((resolve, reject) => {
  168. // getAllEqPaType({ PageNumber: 1, PageSize: 1000, }, res => {
  169. // resolve(res)
  170. // })
  171. queryPhysicsAllType({ type: 'equipmentAndComponent' }, res => {
  172. resolve(res)
  173. })
  174. })
  175. Promise.all([promise1, promise2]).then(values => {
  176. this.logData = values[0].Content;
  177. let typeList = values[1].content;
  178. typeList.forEach(item => {
  179. this.mapType[item.code] = item.name;
  180. });
  181. console.log(this.mapType);
  182. if (values[0].Total / (values[0].PageSize * values[0].PageNumber) > 1) {
  183. this.queryLogData(values[0].PageNumber + 1)
  184. } else {
  185. this.formatData();
  186. this.loading = false;
  187. this.$forceUpdate();
  188. console.log(this.versionData);
  189. }
  190. })
  191. }
  192. },
  193. // 格式化数据
  194. formatData() {
  195. this.logData.forEach(item => {
  196. if (item.Type == 'Wall' || item.Type == 'VirtualWall' || item.Type == 'Column') {
  197. this.versionData.buildList.push(item);
  198. if (item.Type == 'Wall') {
  199. if (item.Operation) {//创建
  200. this.versionData.createWall.push(item);
  201. } else {//删除
  202. this.versionData.deleteWall.push(item);
  203. }
  204. } else if (item.Type == 'VirtualWall') {
  205. if (item.Operation) {//创建
  206. this.versionData.createVirtualWall.push(item);
  207. } else {//删除
  208. this.versionData.deleteVirtualWall.push(item);
  209. }
  210. } else if (item.Type == 'Column') {
  211. if (item.Operation) {//创建
  212. this.versionData.createColumn.push(item);
  213. } else {//删除
  214. this.versionData.deleteColumn.push(item);
  215. }
  216. }
  217. } else {
  218. if (item.Operation) {//创建
  219. if (this.versionData.createData[item.Type]) {
  220. this.versionData.createData[item.Type].push(item);
  221. } else {
  222. this.versionData.createData[item.Type] = [];
  223. this.versionData.createData[item.Type].push(item);
  224. }
  225. } else {//删除
  226. if (this.versionData.deleteData[item.Type]) {
  227. this.versionData.deleteData[item.Type].push(item);
  228. } else {
  229. this.versionData.deleteData[item.Type] = [];
  230. this.versionData.deleteData[item.Type].push(item);
  231. }
  232. }
  233. }
  234. });
  235. },
  236. // 获取版本信息
  237. getVersionData() {
  238. if (this.modelFile.Id || this.modelFile.CurrentModelId) {
  239. this.versionData.userName = this.modelFile.UserName;
  240. this.versionData.acceptTime = this.modelFile.AcceptTime;
  241. this.queryLogData();
  242. }
  243. },
  244. queryLogData(pageNum) {
  245. pageNum = pageNum ? pageNum : 1
  246. let params = {
  247. Filters: `ModelId='${this.modelFile.CurrentModelId ? this.modelFile.CurrentModelId : this.modelFile.Id}'`,
  248. PageNumber: pageNum,
  249. PageSize: 1000,
  250. }
  251. querySyncLogCount(params, res => {
  252. this.logData = this.logData.concat(res.Content);//拼接数据
  253. if (res.Total / (res.PageSize * res.PageNumber) > 1) {
  254. this.queryLogData(res.PageNumber + 1)
  255. } else {
  256. this.formatData();
  257. this.loading = false;
  258. this.$forceUpdate();
  259. console.log(this.versionData)
  260. }
  261. })
  262. },
  263. },
  264. watch: {
  265. dialogVisible: {
  266. handler() {
  267. if (this.dialogVisible) {
  268. this.loading = true;
  269. this.logData = [];
  270. this.versionData = {
  271. userName: '',
  272. acceptTime: '',
  273. createData: {},
  274. deleteData: {},
  275. buildList: [],
  276. createWall: [],
  277. deleteWall: [],
  278. createVirtualWall: [],
  279. deleteVirtualWall: [],
  280. createColumn: [],
  281. deleteColumn: [],
  282. };
  283. if (Object.keys(this.mapType).length > 3) {
  284. this.getVersionData();
  285. } else {
  286. this.getData();
  287. }
  288. }
  289. },
  290. immediate: true
  291. }
  292. }
  293. };
  294. </script>
  295. <style lang="less" scoped>
  296. .content {
  297. height: 400px;
  298. font-size: 16px;
  299. font-weight: 650;
  300. color: #333;
  301. /deep/ .el-scrollbar__wrap {
  302. overflow-x: hidden;
  303. }
  304. }
  305. </style>