chenlu
2024-12-02 e50fa16b6dbc4e7c50d5fbdbc04d2a556ca01c4e
north-glass-erp/northglass-erp/src/views/system/user/UserList.vue
@@ -2,8 +2,18 @@
import {onBeforeMount, onMounted, reactive, ref} from "vue"
import {changeFilterEvent,filterChanged} from "@/hook"
import request from "@/utils/request"
import {useRouter,useRoute} from "vue-router"
import {useI18n} from "vue-i18n"
import {ElMessage, ElMessageBox} from "element-plus"
const { t } = useI18n()
const router = useRouter()
const route = useRoute()
const dialogVisible = ref(false)
let roleList = ref([])
let userRole= ref({
  userId:'',
  roles:[]
})
const xGrid = ref()
const gridOptions = reactive({
  border:  "full",//表格加边框
@@ -50,12 +60,12 @@
onBeforeMount(()=>{
  let columns = [{title: t('basicData.operate'), width: 133, slots: { default: 'button_slot' }}]
  const columnName = {
    loginName: '用户ID',
    userName:'用户',
    address:'地址',
    phone:'电话',
    role:'角色',
    createTime:'创建时间'
    loginName: t('user.userId'),
    userName:t('user.user'),
    // address:'地址',
    // phone:'电话',
    role:t('role.role'),
    createTime:t('basicData.creationTime')
  }
  for (let columnNameKey in columnName) {
    let column = {field: columnNameKey,
@@ -72,9 +82,61 @@
})
onMounted(()=>{
  request.get('/userInfo/findAll').then(res=>{
    gridOptions.data = res.data
    let arr = res.data.users[0]
    arr.forEach(item=>{
      let bValues = item.userRoleList.map(item => item.role);
      item.role = bValues.join(',')
    })
    gridOptions.data = res.data.users[0]
    roleList.value = res.data.role[0]
  })
})
const getTableRow =  (row,type) => {
  switch (type) {
    case 'edit': {
      userRole.value.roles = []
      dialogVisible.value = true
      row.userRoleList.forEach(item=>{
        userRole.value.roles.push(item.roleId)
      })
      userRole.value.userId = row.id
      break
    }
    case 'delete': {
      request.post(`/userInfo/userDelete/${row.id}`).then((res) => {
        if(res.code==200 && res.data ===true){
          ElMessage.success(t('searchOrder.msgDeleteSuccess'))
          router.push({path:'/main/user/userList',query:{random:Math.random()}})
        }else{
          ElMessage.warning(t('searchOrder.msgDeleteFail'))
        }
      })
      break
    }
  }
}
const handleClose = (done) => {
  userRole.value.roles = []
  done()
}
const roleUpdate = () => {
  userRole.value.roles = [userRole.value.roles]
  request.post('userRole/updateUserRole',userRole.value).then(res=>{
    if(res.code==200 && res.data===true){
      ElMessage.success(t('basicData.msg.saveSuccess'))
      router.push({path:'/main/user/userList',query:{random:Math.random()}})
    }
  })
  dialogVisible.value = false
}
</script>
<template>
@@ -88,13 +150,17 @@
      <template #filter="{ column, $panel }">
        <div>
          <div v-for="(option, index) in column.filters" :key="index">
            <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
            <input
                type="type"
                v-model="option.data"
                @keyup.enter.native="$panel.confirmFilter()"
                @input="changeFilterEvent($event, option, $panel)"/>
          </div>
        </div>
      </template>
      <template #button_slot="{ row }">
        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">设置角色</el-button>
        <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">{{ $t('user.setUpRoles') }}</el-button>
        <el-popconfirm @confirm="getTableRow(row,'delete')" :title="$t('searchOrder.deleteConfirm')">
          <template #reference>
            <el-button  link type="primary" size="small">{{ $t('basicData.delete') }}</el-button>
@@ -102,8 +168,34 @@
        </el-popconfirm>
      </template>
    </vxe-grid>
    <el-dialog
        v-model="dialogVisible"
        :title="$t('user.roleSelection')"
        width="30%"
        :before-close="handleClose"
    >
      <span>
        <el-radio v-for="(item) in roleList"
                     :label="item.id"
                     v-model="userRole.roles" >
          {{item.role}}
        </el-radio>
      </span>
      <template #footer>
      <span class="dialog-footer">
        <el-button @click="dialogVisible = false">{{ $t('basicData.cancelButtonText') }}</el-button>
        <el-button type="primary" @click="roleUpdate">
          {{ $t('basicData.confirmButtonText') }}
        </el-button>
      </span>
      </template>
    </el-dialog>
  </div>
</template>
<style scoped>
.dialog-footer button:first-child {
  margin-right: 10px;
}
</style>