projectGroupAdjust.vue 3.68 KB
<template>
  <div class="app-content">
    <a-transfer :data-source="mockData" :target-keys="targetKeys" :show-search="showSearch" :list-style="{ width: '60%', height: '60%' }" @change="handleChange" :titles="transferTitles">
      <template slot="children" slot-scope="{ props: { filteredItems, selectedKeys, disabled: listDisabled }, on: { itemSelectAll, itemSelect }, }">
        <a-table
          :row-selection="getRowSelection({ disabled: listDisabled, selectedKeys, itemSelectAll, itemSelect })"
          :pagination="false"
          :scroll="{ y: 400 }"
          :columns="columns"
          :data-source="filteredItems"
          size="small"
          :style="{ pointerEvents: listDisabled ? 'none' : null }"
          :custom-row="
            ({ key, disabled: itemDisabled }) => ({
              on: {
                click: () => {
                  if (itemDisabled || listDisabled) return;
                  itemSelect(key, !selectedKeys.includes(key));
                },
              },
            })
          "
        />
      </template>
    </a-transfer>
  </div>
</template>

<script>
import difference from 'lodash/difference';
import { isEmptyParams } from '@/views/utils/common'

export default {
  name: "projectGroupAdjust",
  props: {
    groupInfo1: {
      type: Object,
      default: {}
    },
    groupInfo2: {
      type: Object,
      default: {}
    }
  },
  data() {
    return {
      mockData: [],
      targetKeys: [],
      showSearch: false,
      disabled: false,
      columns: [
        { dataIndex: 'projNo', title: '项目编号' },
        { dataIndex: 'projName', title: '项目名称' },
      ],
      searchForm: { groupId: null },
      transferTitles: ['Source', 'Target'],
    }
  },
  created () {
    if (this.groupInfo1.expertCount > 0 || this.groupInfo2.expertCount > 0) {
      this.$message.error('项目组已经分配有专家,不能进行项目调整!')
      this.$emit('close')
    }
    
    this.getProjectListByGroupIds()
    this.transferTitles = [ this.groupInfo1.groupName, this.groupInfo2.groupName ]
  },
  methods: {
    getProjectListByGroupIds () {
      let groupIds = this.groupInfo1.id + ',' + this.groupInfo2.id
      this.$api.projectGroupAssign.getProjectListByGroupIds({ groupIds: groupIds }).then(({ data = {} }) => {
        if (data) {
          this.mockData = data
          this.targetKeys = this.mockData.filter(e => e.groupId === this.groupInfo2.id).map(e => e.id)
        }
      }).catch(() => {})
    },
    handleChange (targetKeys, direction, moveKeys) {
      let gourpId = this.groupInfo1.id
      if (direction === 'right')
        gourpId = this.groupInfo2.id

      let Ids = moveKeys.join(",")
      this.$api.projectGroupAssign.updataProjectGroupAdjust({ Ids: Ids, groupId: gourpId }).then(({ data = {} }) => {
        if (data === '数据保存成功!') {
          //this.targetKeys = targetKeys
          this.getProjectListByGroupIds()
        } else {
          this.$message.info(data)
        }
      }).catch(() => {})
    },
    getRowSelection({ disabled, selectedKeys, itemSelectAll, itemSelect }) {
      return {
        getCheckboxProps: item => ({ props: { disabled: disabled || item.disabled } }),
        onSelectAll(selected, selectedRows) {
          const treeSelectedKeys = selectedRows
            .filter(item => !item.disabled)
            .map(({ key }) => key);
          const diffKeys = selected
            ? difference(treeSelectedKeys, selectedKeys)
            : difference(selectedKeys, treeSelectedKeys);
          itemSelectAll(diffKeys, selected);
        },
        onSelect({ key }, selected) {
          itemSelect(key, selected);
        },
        selectedRowKeys: selectedKeys,
      };
    },
  },
};
</script>