482 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			482 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
|   | <template> | ||
|  |     <el-container id="commonRepository"> | ||
|  |         <el-header :height="headerHeight"> | ||
|  |             <el-col :span="24" style="position: relative;top: 10px;"> | ||
|  |                 <div style="display:inline-block;float:left;"> | ||
|  |                     <awsui-button style="width: 100px;" class="button-general-color" type="primary" @click="add">添加流程</awsui-button> | ||
|  |                 </div> | ||
|  |                 <div style="display:inline-block;float:right;width:320px;padding-right: 20px;"> | ||
|  |                     <el-input | ||
|  |                             placeholder="搜索" | ||
|  |                             prefix-icon="el-icon-search" | ||
|  |                             v-model="searchInput" | ||
|  |                             @input="searchRepository" | ||
|  |                             size="small" | ||
|  |                             clearable> | ||
|  |                     </el-input> | ||
|  |                 </div> | ||
|  |             </el-col> | ||
|  |             <el-dialog | ||
|  |                     v-loading="dlgLoading" | ||
|  |                     title="添加常用流程" | ||
|  |                     :visible.sync="dialog.visible" | ||
|  |                     :modal-append-to-body=false | ||
|  |                     :close-on-click-modal=false | ||
|  |                     :close-on-press-escape=true | ||
|  |                     :before-close="handleCloseDlg" | ||
|  |                     @close="clearDlgData" | ||
|  |                     width="500px"> | ||
|  |                 <div v-loading="loading"> | ||
|  |                     <div style="padding:10px;border:1px solid #e9e9e9"> | ||
|  |                         <div style="height: 300px;"> | ||
|  |                             <el-select | ||
|  |                                     style="width: 100%;" | ||
|  |                                     v-model="dialog.ws.value" | ||
|  |                                     filterable | ||
|  |                                     default-first-option | ||
|  |                                     size="small" | ||
|  |                                     placeholder="请选择资产库" | ||
|  |                                     @change="changeWs"> | ||
|  |                                 <el-option | ||
|  |                                         v-for="item in dialog.ws.options" | ||
|  |                                         :key="item.value" | ||
|  |                                         :label="item.label" | ||
|  |                                         :value="item.value"> | ||
|  |                                 </el-option> | ||
|  |                             </el-select> | ||
|  |                             <div style="height: 268px;overflow: auto;"> | ||
|  |                                 <el-tree v-if="dialog.ws.value != ''" | ||
|  |                                          ref="repositoryTree" | ||
|  |                                          :props="dialog.tree.props" | ||
|  |                                          :default-checked-keys="dialog.tree.value" | ||
|  |                                          :expand-on-click-node=false | ||
|  |                                          :highlight-current=true | ||
|  |                                          @node-click="openNode" | ||
|  |                                          @node-expand="expandNode" | ||
|  |                                          @node-collapse="closeNode" | ||
|  |                                          @check-change="checkedNode" | ||
|  |                                          check-strictly | ||
|  |                                          show-checkbox | ||
|  |                                          node-key="versionId" | ||
|  |                                          lazy | ||
|  |                                          :load="loadNode"> | ||
|  |                                     <span slot-scope="{node, data}"> | ||
|  |                                       <i class="awsui-iconfont tree-content-icon tree-content-icon-padding" :style="{'color': node.data.icon.color}" v-html="node.data.icon.icon"></i> | ||
|  |                                       <span>{{node.data.name}}</span> | ||
|  |                                     </span> | ||
|  |                                 </el-tree> | ||
|  |                             </div> | ||
|  |                         </div> | ||
|  |                     </div> | ||
|  | 
 | ||
|  |                 </div> | ||
|  |                 <span slot="footer" class="dialog-footer"> | ||
|  |                     <awsui-button class="button-general-color" type="primary" @click="saveCommonData()">确定</awsui-button> | ||
|  |                     <awsui-button @click="closeDlg">取消</awsui-button> | ||
|  |                 </span> | ||
|  |             </el-dialog> | ||
|  |         </el-header> | ||
|  |         <el-main> | ||
|  |             <div id="main" :style="{'cursor': 'move', 'height': mainHeight, 'width': '100%'}"> | ||
|  |                 <el-table | ||
|  |                         :height="mainHeight" | ||
|  |                         :data="data" | ||
|  |                         row-key="id" | ||
|  |                         style="width: 100%"> | ||
|  |                     <el-table-column | ||
|  |                             prop="move" | ||
|  |                             label="" | ||
|  |                             align="center" | ||
|  |                             width="20"> | ||
|  |                         <template slot-scope="scope"> | ||
|  |                             <div class="operate-icon-display"> | ||
|  |                                 <p class="text-second-color"> | ||
|  |                                     <i style="display: inline-block;cursor: pointer;" class="awsui-iconfont"></i> | ||
|  |                                 </p> | ||
|  |                             </div> | ||
|  |                         </template> | ||
|  |                     </el-table-column> | ||
|  |                     <el-table-column | ||
|  |                             prop="sort" | ||
|  |                             label="排序" | ||
|  |                             align="center" | ||
|  |                             width="80"> | ||
|  |                     </el-table-column> | ||
|  |                     <el-table-column | ||
|  |                             prop="name" | ||
|  |                             label="名称" | ||
|  |                             :show-overflow-tooltip=true | ||
|  |                             width="400"> | ||
|  |                     </el-table-column> | ||
|  |                     <el-table-column | ||
|  |                             prop="wsName" | ||
|  |                             label="关联资产库" | ||
|  |                             :show-overflow-tooltip=true> | ||
|  |                     </el-table-column> | ||
|  |                     <el-table-column | ||
|  |                             prop="opt" | ||
|  |                             label="操作" | ||
|  |                             align="center" | ||
|  |                             width="100"> | ||
|  |                         <template slot-scope="scope"> | ||
|  |                             <div class="operate-icon-display"> | ||
|  |                                 <p class="text-second-color"> | ||
|  |                                     <i style="display: inline-block;cursor: pointer;" class="awsui-iconfont" @click="deleteCommonData(scope.row.id, scope.row.name)"></i> | ||
|  |                                 </p> | ||
|  |                             </div> | ||
|  |                         </template> | ||
|  |                     </el-table-column> | ||
|  |                 </el-table> | ||
|  |             </div> | ||
|  |         </el-main> | ||
|  |     </el-container> | ||
|  | </template> | ||
|  | 
 | ||
|  | <script> | ||
|  |     import Sortable from 'sortablejs'; | ||
|  |     import awsuiAxios from "../../awsuiAxios"; | ||
|  |     export default { | ||
|  |         name: "commonRepository", | ||
|  |         components: {Sortable}, | ||
|  |         data() { | ||
|  |             return { | ||
|  |                 headerHeight: '50px', | ||
|  |                 mainHeight: (parseInt(this.$store.getters.getTopMainHeightFn) - 52) + 'px', | ||
|  |                 searchInput: '', | ||
|  |                 data: [], | ||
|  |                 dataTemp: [], | ||
|  |                 checkedData: [], | ||
|  |                 dlgLoading: false, | ||
|  |                 loading: false, | ||
|  |                 dialog: { | ||
|  |                     visible: false, | ||
|  |                     ws: { | ||
|  |                         value: '', | ||
|  |                         options: [] | ||
|  |                     }, | ||
|  |                     tree: { | ||
|  |                         props: { | ||
|  |                             children: 'children', | ||
|  |                             label: 'label' | ||
|  |                         }, | ||
|  |                         value: [] | ||
|  |                     } | ||
|  |                 } | ||
|  |             } | ||
|  |         }, | ||
|  |         mounted() { | ||
|  |             // 火狐浏览器拖拽问题
 | ||
|  |             document.body.ondrop = function (event) { | ||
|  |                 event.preventDefault(); | ||
|  |                 event.stopPropagation(); | ||
|  |             } | ||
|  |             this.initData(); | ||
|  |             this.rowDrop(); | ||
|  |         }, | ||
|  |         methods: { | ||
|  |             //行拖拽
 | ||
|  |             rowDrop() { | ||
|  |                 const tbody = document.querySelector('.el-table__body-wrapper tbody') | ||
|  |                 const _this = this; | ||
|  |                 Sortable.create(tbody, { | ||
|  |                     onEnd({ newIndex, oldIndex }) { | ||
|  |                         const currRow = _this.data.splice(oldIndex, 1)[0] | ||
|  |                         _this.data.splice(newIndex, 0, currRow); | ||
|  |                         const resourceIds = []; | ||
|  |                         for (let i = 0; i < _this.data.length; i++) { | ||
|  |                             _this.data[i].sort = i+1; | ||
|  |                             resourceIds.push(_this.data[i].versionId); | ||
|  |                         } | ||
|  |                         // 保存
 | ||
|  |                         const params = { | ||
|  |                             url:'jd', | ||
|  |                             data:{ | ||
|  |                                 cmd: 'com.actionsoft.apps.coe.pal_publish_publishgroup_common_update_save', | ||
|  |                                 resourceIds: JSON.stringify(resourceIds) | ||
|  |                             } | ||
|  |                         }; | ||
|  |                         // 查询数据
 | ||
|  |                         awsuiAxios.post(params).then(function (ro) { | ||
|  |                             if(ro.result == 'ok') { | ||
|  |                                 _this.$message({message: '移动成功',type: 'success'}); | ||
|  |                             } else { | ||
|  |                                 _this.$message.error(ro.msg); | ||
|  |                             } | ||
|  |                         }).catch(error=>{ | ||
|  |                             console.log(error); | ||
|  |                         }) | ||
|  |                     } | ||
|  |                 }) | ||
|  |             }, | ||
|  |             initData() {// 初始化数据查询
 | ||
|  |                 const that = this; | ||
|  |                 const params = { | ||
|  |                     url:'jd', | ||
|  |                     data:{ | ||
|  |                         cmd: 'com.actionsoft.apps.coe.pal_publish_publishgroup_common_list' | ||
|  |                     } | ||
|  |                 }; | ||
|  |                 // 查询数据
 | ||
|  |                 awsuiAxios.post(params).then(function (ro) { | ||
|  |                     if(ro.result == 'ok') { | ||
|  |                         const data = ro.data.data; | ||
|  |                         that.data = data; | ||
|  |                         that.dataTemp = JSON.parse(JSON.stringify(that.data)); | ||
|  |                         that.checkedData = ro.data.checkedData; | ||
|  |                         // 存取
 | ||
|  |                     } else { | ||
|  |                         that.$message(ro.msg); | ||
|  |                     } | ||
|  |                 }).catch(error=>{ | ||
|  |                     console.log(error); | ||
|  |                 }) | ||
|  |             }, | ||
|  |             searchRepository() {// 搜索
 | ||
|  |                 if (this.searchInput && this.searchInput.trim() != '') {// 根据条件搜索
 | ||
|  |                     const data = []; | ||
|  |                     for (let i = 0; i < this.dataTemp.length; i++) { | ||
|  |                         if (this.dataTemp[i].name.indexOf(this.searchInput) > -1 | ||
|  |                             || this.dataTemp[i].wsName.indexOf(this.searchInput) > -1) { | ||
|  |                             data.push(this.dataTemp[i]); | ||
|  |                         } | ||
|  |                     } | ||
|  |                     this.data = data; | ||
|  |                 } else {// 显示全部
 | ||
|  |                     this.data = this.dataTemp; | ||
|  |                 } | ||
|  |             }, | ||
|  |             add() {// 新增常用流程
 | ||
|  |                 this.dialog.visible = true; | ||
|  |                 this.loading = true; | ||
|  |                 const that = this; | ||
|  |                 const params = { | ||
|  |                     url:'jd', | ||
|  |                     data:{ | ||
|  |                         cmd: 'com.actionsoft.apps.coe.pal_publish_publishgroup_create_data_query' | ||
|  |                     } | ||
|  |                 }; | ||
|  |                 // 查询数据
 | ||
|  |                 awsuiAxios.post(params).then(function (ro) { | ||
|  |                     if(ro.result == 'ok') { | ||
|  |                         const data = ro.data; | ||
|  |                         that.dialog.tree.value = (that.checkedData[data.wsId] == undefined ? [] : that.checkedData[data.wsId]); | ||
|  |                         that.dialog.ws.value = data.wsId; | ||
|  |                         that.dialog.ws.options = data.wsArr; | ||
|  |                     } else { | ||
|  |                         that.$message(ro.msg); | ||
|  |                     } | ||
|  |                     that.loading = false; | ||
|  |                 }).catch(error=>{ | ||
|  |                     console.log(error); | ||
|  |                     that.loading = false; | ||
|  |                 }) | ||
|  |             }, | ||
|  |             deleteCommonData(id, name) {// 删除用户组
 | ||
|  |                 const that = this; | ||
|  |                 that.$confirm('确定要删除吗?', '提示', { | ||
|  |                     confirmButtonText: '确定', | ||
|  |                     confirmButtonClass: 'button-general-color', | ||
|  |                     cancelButtonText: '取消', | ||
|  |                     type: 'warning' | ||
|  |                 }).then(() => { | ||
|  |                     const params = { | ||
|  |                         url:'jd', | ||
|  |                         data:{ | ||
|  |                             cmd: 'com.actionsoft.apps.coe.pal_publish_publishgroup_common_data_delete', | ||
|  |                             ids: id | ||
|  |                         } | ||
|  |                     }; | ||
|  |                     awsuiAxios.post(params).then(function (ro) { | ||
|  |                         if(ro.result == 'ok') { | ||
|  |                             that.$message({ | ||
|  |                                 message: '删除成功', | ||
|  |                                 type: 'success' | ||
|  |                             }); | ||
|  |                             that.initData(); | ||
|  |                         } else { | ||
|  |                             that.$message(ro.msg); | ||
|  |                         } | ||
|  |                     }).catch(error=>{ | ||
|  |                         console.log(error); | ||
|  |                     }) | ||
|  |                 }).catch(() => { | ||
|  |                 }); | ||
|  |             }, | ||
|  |             clearDlgData() {// 清除dialog数据
 | ||
|  |                 this.dialog.ws.value = ''; | ||
|  |                 this.dialog.ws.options = []; | ||
|  |                 this.dialog.tree.data = []; | ||
|  |                 this.dialog.tree.value = []; | ||
|  |             }, | ||
|  |             closeDlg() {// 关闭新建/修改窗口
 | ||
|  |                 this.dialog.visible = false; | ||
|  |             }, | ||
|  |             handleCloseDlg(done) { | ||
|  |                 this.closeDlg(); | ||
|  |                 done(); | ||
|  |             }, | ||
|  |             saveCommonData() {// 保存drawer结果
 | ||
|  |                 const that = this; | ||
|  |                 // 数据权限
 | ||
|  |                 const wsId = that.dialog.ws.value; | ||
|  |                 const repositorys = that.dialog.tree.value; | ||
|  |                 // 保存
 | ||
|  |                 that.dlgLoading = true; | ||
|  |                 const params = { | ||
|  |                     url:'jd', | ||
|  |                     data:{ | ||
|  |                         cmd: 'com.actionsoft.apps.coe.pal_publish_publishgroup_common_create_save', | ||
|  |                         wsId: wsId, | ||
|  |                         resourceIds: repositorys.join(",") | ||
|  |                     } | ||
|  |                 }; | ||
|  |                 awsuiAxios.post(params).then(function (ro) { | ||
|  |                     if(ro.result == 'ok') { | ||
|  |                         that.dlgLoading = false; | ||
|  |                         that.clearDlgData(); | ||
|  |                         that.closeDlg(); | ||
|  |                         that.$message({ | ||
|  |                             message: '保存成功', | ||
|  |                             type: 'success' | ||
|  |                         }); | ||
|  |                         that.initData(); | ||
|  |                     } else { | ||
|  |                         that.$message.error('保存失败'); | ||
|  |                         that.dlgLoading = false; | ||
|  |                     } | ||
|  |                 }).catch(error=>{ | ||
|  |                     console.log(error); | ||
|  |                     that.dlgLoading = false; | ||
|  |                 }) | ||
|  |             }, | ||
|  |             /******新增常用流程部分*******/ | ||
|  |             changeWs(targetWsId) {// 变更资产库
 | ||
|  |                 const that = this; | ||
|  |                 that.dialog.ws.value = ''; | ||
|  |                 that.dialog.tree.value = (that.checkedData[targetWsId] == undefined ? [] : that.checkedData[targetWsId]); | ||
|  |                 that.$nextTick(function () { | ||
|  |                     that.dialog.ws.value = targetWsId; | ||
|  |                 }) | ||
|  |             }, | ||
|  |             openNode(obj, node, tree) {// 点击数
 | ||
|  | 
 | ||
|  |             }, | ||
|  |             loadNode(node, resolve) { | ||
|  |                 const that = this; | ||
|  |                 const data = { | ||
|  |                     url:'jd', | ||
|  |                     data:{ | ||
|  |                     } | ||
|  |                 }; | ||
|  |                 data.data.wsId = that.dialog.ws.value; | ||
|  |                 data.data.teamId = ''; | ||
|  |                 data.data.cmd = 'com.actionsoft.apps.coe.pal_processlevel_tree_data'; | ||
|  |                 if (node.level === 0) { | ||
|  |                     // 获取根目录
 | ||
|  |                     data.data.pid = ''; | ||
|  |                 } else { | ||
|  |                     // 获取其他目录
 | ||
|  |                     data.data.pid = node.data.id; | ||
|  |                 } | ||
|  |                 // 查询数据
 | ||
|  |                 awsuiAxios.post(data).then(function (ro) { | ||
|  |                     for (let i = 0; i < ro.data.length; i++) { | ||
|  |                         if (ro.data[i].id.length < 36) { | ||
|  |                             ro.data[i].disabled = true; | ||
|  |                         } | ||
|  |                     } | ||
|  |                     resolve(ro.data); | ||
|  |                     if (node.level == 0 && ro.data.length > 0) { | ||
|  |                         const tree = that.$refs.repositoryTree; | ||
|  |                         tree.getNode(ro.data[0].id).expand(); | ||
|  |                         setTimeout(function(){ | ||
|  |                             const childNode = tree.getNode(ro.data[0].id).childNodes[0]; | ||
|  |                             if (childNode != null) { | ||
|  |                                 childNode.expand(); | ||
|  |                             } | ||
|  |                         }, 500); | ||
|  |                     } | ||
|  |                 }).catch(error=>{ | ||
|  |                     console.log(error); | ||
|  |                 }) | ||
|  |             }, | ||
|  |             expandNode(obj, node, tree) {// 展开节点
 | ||
|  | 
 | ||
|  |             }, | ||
|  |             closeNode(obj, node, tree) {// 关闭时清空,下次展开重新请求动态加载
 | ||
|  |                 node.childNodes = []; | ||
|  |                 node.loaded = false; | ||
|  |             }, | ||
|  |             checkedNode(data, checked, subChecked) {// 节点选中事件
 | ||
|  |                 // 获取所有子节点
 | ||
|  |                 const that = this; | ||
|  |                 const params = { | ||
|  |                     url:'jd', | ||
|  |                     data:{ | ||
|  |                         cmd: 'com.actionsoft.apps.coe.pal_publish_publishgroup_repository_data_query', | ||
|  |                         wsId: that.dialog.ws.value, | ||
|  |                         pid: data.id, | ||
|  |                     } | ||
|  |                 }; | ||
|  |                 awsuiAxios.post(params).then(function (ro) { | ||
|  |                     const childVerIds = ro.data; | ||
|  |                     const currVerId = data.versionId; | ||
|  |                     if (checked) {// 选中
 | ||
|  |                         const checkedVerIds = that.dialog.tree.value; | ||
|  |                         if (checkedVerIds.indexOf(currVerId) == -1) { | ||
|  |                             checkedVerIds.push(currVerId); | ||
|  |                         } | ||
|  |                         for (let i = 0; i < childVerIds.length; i++) { | ||
|  |                             if (checkedVerIds.indexOf(childVerIds[i]) == -1) { | ||
|  |                                 checkedVerIds.push(childVerIds[i]); | ||
|  |                             } | ||
|  |                         } | ||
|  |                         that.$refs.repositoryTree.setCheckedKeys(checkedVerIds); | ||
|  |                     } else {// 取消选中
 | ||
|  |                         const checkedVerIds = that.dialog.tree.value; | ||
|  |                         const tempArr = []; | ||
|  |                         for (let i = 0; i < checkedVerIds.length; i++) { | ||
|  |                             if (checkedVerIds[i] != currVerId && childVerIds.indexOf(checkedVerIds[i]) == -1) { | ||
|  |                                 tempArr.push(checkedVerIds[i]); | ||
|  |                             } | ||
|  |                         } | ||
|  |                         that.dialog.tree.value = tempArr; | ||
|  |                         that.$refs.repositoryTree.setCheckedKeys([]); | ||
|  |                     } | ||
|  |                 }).catch(error=>{ | ||
|  |                     console.log(error); | ||
|  |                 }) | ||
|  |             } | ||
|  |             /********新增常用流程部分*********/ | ||
|  | 
 | ||
|  |         }, | ||
|  |         computed: { | ||
|  |             listenTopMainHeight() { | ||
|  |                 return this.$store.getters.getTopMainHeightFn; | ||
|  |             } | ||
|  |         }, | ||
|  |         watch: { | ||
|  |             listenTopMainHeight: function (newd, old) { | ||
|  |                 this.mainHeight = (parseInt(this.$store.getters.getTopMainHeightFn) - parseInt(this.headerHeight)) -2 + 'px'; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | </script> | ||
|  | 
 | ||
|  | <style scoped> | ||
|  |     #commonRepository >>> .el-dialog__body { | ||
|  |         padding: 0px 20px; | ||
|  |     } | ||
|  |     #commonRepository >>> .el-main { | ||
|  |         padding: 0px 20px; | ||
|  |     } | ||
|  |     #commonRepository >>> .el-footer { | ||
|  |         padding: 0; | ||
|  |     } | ||
|  |     #commonRepository >>> .el-table__row .operate-icon-display{ | ||
|  |         display: none; | ||
|  |     } | ||
|  |     #commonRepository >>> .el-table__row:hover .operate-icon-display{ | ||
|  |         display: inline-block; | ||
|  |     } | ||
|  | </style> |