jiangping
2024-06-28 92786c58666e6dcb279b29e80fd744067525bc5e
提交一把
已添加3个文件
已修改8个文件
649 ■■■■ 文件已修改
company/.env.development 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/api/system/companyUser.js 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaCompanyRoleWindow.vue 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/components/business/OperaCompanyUserWindow.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/company.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/src/views/business/insuranceApplyShop.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/platform/src/main/java/com/doumee/api/system/SystemUserController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/system/SystemUserBiz.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java 144 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/system/SystemUserService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
company/.env.development
@@ -9,6 +9,6 @@
# VUE_APP_API = 'https://dmtest.ahapp.net/yyb_admin_api/'
#VUE_APP_API = 'http://localhost:10030/'
VUE_APP_API = 'http://localhost:10030/'
#VUE_APP_API = 'http://192.168.0.135:10030/'
VUE_APP_API = 'https://www.yyb.red/yyb_admin_api/'
#VUE_APP_API = 'https://www.yyb.red/yyb_admin_api/'
company/src/api/system/companyUser.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
import request from '@/utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/system/user/pageCompany', data)
}
// æ–°å»º
export function create (data) {
  return request.post('/system/user/createCompany', data, {
    trim: true
  })
}
// ä¿®æ”¹
export function updateById (data) {
  return request.post('/system/user/updateById', data, {
    trim: true
  })
}
// åˆ é™¤
export function deleteById (id) {
  return request.get(`/system/user/delete/${id}`)
}
// æ‰¹é‡åˆ é™¤
export function deleteByIdInBatch (ids) {
  return request.get('/system/user/delete/batch', {
    params: {
      ids
    }
  })
}
// é…ç½®ç”¨æˆ·è§’色
export function createUserRole (data) {
  return request.post('/system/user/createUserRole', data)
}
// é‡ç½®å¯†ç 
export function resetPwd (data) {
  return request.post('/system/user/resetPwd', data)
}
// é‡ç½®å¯†ç 
export function updUserStatus (params) {
  return request.get('/system/user/updUserStatus', {params})
}
company/src/components/business/OperaCompanyRoleWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,163 @@
<template>
  <GlobalWindow
      :title="title"
      width="100%"
      :withFooter="false"
      :visible.sync="visible"
  >
    <TableLayout :permissions="['system:user:query']">
      <!-- æœç´¢è¡¨å• -->
      <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline>
        <el-form-item label="姓名" prop="realname">
          <el-input v-model="searchForm.realname" v-trim placeholder="请输入" @keypress.enter.native="search"/>
        </el-form-item>
        <section>
          <el-button type="primary" icon="el-icon-search" @click="search">搜索</el-button>
          <el-button @click="reset">重置</el-button>
        </section>
      </el-form>
      <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
      <template v-slot:table-wrap>
        <ul class="toolbar" v-permissions="['system:user:create', 'system:user:delete']">
          <li v-permissions="['system:user:create']"><el-button type="primary" @click="$refs.operaUserWindow.open('新增账号')">新增账号</el-button></li>
          <!--        <li v-permissions="['system:user:delete']"><el-button icon="el-icon-delete" @click="deleteByIdInBatch">删除</el-button></li>-->
        </ul>
        <!--      @selection-change="handleSelectionChange"-->
        <el-table
            v-loading="isWorking.search"
            :data="tableData.list"
            :default-sort = "{prop: 'createTime', order: 'descending'}"
            stripe
            @sort-change="handleSortChange"
        >
          <el-table-column label="序号" width="80px">
            <template slot-scope="scope">
              <span>{{scope.$index + 1}}</span>
            </template>
          </el-table-column>
          <el-table-column prop="username" label="账号" min-width="120px"></el-table-column>
          <el-table-column prop="realname" label="姓名" min-width="100px"></el-table-column>
          <el-table-column prop="mobile" label="联系方式" min-width="100px"></el-table-column>
          <el-table-column prop="roles" label="角色" min-width="160px" class-name="table-column-strings">
            <template slot-scope="{row}">
              <ul>
                <li v-for="role in row.roles" :key="role.id">{{role.name}}</li>
              </ul>
            </template>
          </el-table-column>
          <el-table-column label="启用状态" min-width="100px">
            <template slot-scope="{row}">
              <el-switch
                  v-if="!row.fixed"
                  @change="changeStatus($event, row)"
                  v-model="row.status"
                  active-color="#13ce66"
                  inactive-color="#ff4949"
                  :active-value="0"
                  :inactive-value="1">
              </el-switch>
            </template>
          </el-table-column>
          <el-table-column
              v-if="containPermissions(['system:user:update', 'system:user:createUserRole', 'system:user:resetPwd', 'system:user:delete'])"
              label="操作"
              width="270"
              fixed="right"
          >
            <!--          row.id !== userInfo.id &&-->
            <template v-if="isAdmin || (row.roles.findIndex(r => r.code === adminCode) === -1)" slot-scope="{row}">
              <el-button type="text" icon="el-icon-edit" @click="$refs.operaUserWindow.open('编辑用户', row)" v-permissions="['system:user:update']">编辑</el-button>
              <el-button type="text" @click="$refs.allocationEnterprises.open('分配企业', row)" v-if="userInfo.type !== 1">分配企业</el-button>
              <el-button type="text" icon="el-icon-s-custom" @click="$refs.roleConfigWindow.open(row)" v-permissions="['system:user:createUserRole']">配置角色</el-button>
              <el-button type="text" @click="$refs.resetPwdWindow.open(row)" v-permissions="['system:user:resetPwd']">重置密码</el-button>
              <!--            <el-button v-if="!row.fixed" type="text" icon="el-icon-delete" @click="deleteById(row)" v-permissions="['system:user:delete']">删除</el-button>-->
            </template>
          </el-table-column>
        </el-table>
        <pagination
            @size-change="handleSizeChange"
            @current-change="handlePageChange"
            :pagination="tableData.pagination"
        ></pagination>
      </template>
      <!-- æ–°å»º/修改 -->
      <OperaUserWindow ref="operaUserWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
      <!-- é…ç½®è§’色 -->
      <RoleConfigWindow ref="roleConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
      <!-- é‡ç½®å¯†ç  -->
      <ResetPwdWindow ref="resetPwdWindow"/>
      <!--  åˆ†é…ä¼ä¸š  -->
      <allocationEnterprises ref="allocationEnterprises" @success="handlePageChange(tableData.pagination.pageIndex)"/>
    </TableLayout>
  </GlobalWindow>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import GlobalWindow from '@/components/common/GlobalWindow'
import OperaUserWindow from '@/components/system/user/OperaUserWindow'
import allocationEnterprises from '@/components/system/user/allocationEnterprises'
import RoleConfigWindow from '@/components/system/user/RoleConfigWindow'
import ResetPwdWindow from '@/components/system/user/ResetPwdWindow'
import { updUserStatus } from '@/api/system/user'
export default {
  name: 'OperaCompanyUserWindow',
  extends: BaseTable,
  components: { allocationEnterprises, ResetPwdWindow, RoleConfigWindow,GlobalWindow, OperaUserWindow, TableLayout, Pagination },
  data () {
    return {
      // æœç´¢
      visible:false,
      title:'企业角色管理',
      searchForm: {
        username: '', // åå­—
        realname: '', // å§“名
        companyId: null, // éƒ¨é—¨ID
        mobile: '' // æ‰‹æœºå·ç 
      }
    }
  },
  created () {
  },
  methods: {
    open(title, row){
      this.config({
        module: '用户',
        api: '/system/companyUser',
        'field.main': 'realname',
        sorts: [{
          property: 'CREATE_TIME',
          direction: 'DESC'
        }]
      })
      this.title = title
      this.visible = true
      this.searchForm.companyId=row.id
      this.search()
    },
    changeStatus(status, row) {
      updUserStatus({
        id: row.id,
        status
      }).then(res => {
        this.search()
      }).catch(err => {
        row.status = row.status === 0 ? 1 : 0
      })
    }
  }
}
</script>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
// åˆ—表头像处理
.table-column-avatar {
  img {
    width: 48px;
  }
}
</style>
company/src/components/business/OperaCompanyUserWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,164 @@
<template>
    <GlobalWindow
        :title="title"
        width="100%"
        :withFooter="false"
        :visible.sync="visible"
    >
      <TableLayout :permissions="['system:user:query']">
        <!-- æœç´¢è¡¨å• -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline>
          <el-form-item label="姓名" prop="realname">
            <el-input v-model="searchForm.realname" v-trim placeholder="请输入" @keypress.enter.native="search"/>
          </el-form-item>
          <section>
            <el-button type="primary" icon="el-icon-search" @click="search">搜索</el-button>
            <el-button @click="reset">重置</el-button>
          </section>
        </el-form>
        <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
        <template v-slot:table-wrap>
          <ul class="toolbar" v-permissions="['system:user:create', 'system:user:delete']">
            <li v-permissions="['system:user:create']"><el-button type="primary" @click="$refs.operaUserWindow.open('新增账号',null,{company:company})">新增账号</el-button></li>
            <!--        <li v-permissions="['system:user:delete']"><el-button icon="el-icon-delete" @click="deleteByIdInBatch">删除</el-button></li>-->
          </ul>
          <!--      @selection-change="handleSelectionChange"-->
          <el-table
              v-loading="isWorking.search"
              :data="tableData.list"
              :default-sort = "{prop: 'createTime', order: 'descending'}"
              stripe
              @sort-change="handleSortChange"
          >
            <el-table-column label="序号" width="80px">
              <template slot-scope="scope">
                <span>{{scope.$index + 1}}</span>
              </template>
            </el-table-column>
            <el-table-column prop="username" label="账号" min-width="120px"></el-table-column>
            <el-table-column prop="realname" label="姓名" min-width="100px"></el-table-column>
            <el-table-column prop="mobile" label="联系方式" min-width="100px"></el-table-column>
            <el-table-column prop="roles" label="角色" min-width="160px" class-name="table-column-strings">
              <template slot-scope="{row}">
                <ul>
                  <li v-for="role in row.roles" :key="role.id">{{role.name}}</li>
                </ul>
              </template>
            </el-table-column>
            <el-table-column label="启用状态" min-width="100px">
              <template slot-scope="{row}">
                <el-switch
                    v-if="!row.fixed"
                    @change="changeStatus($event, row)"
                    v-model="row.status"
                    active-color="#13ce66"
                    inactive-color="#ff4949"
                    :active-value="0"
                    :inactive-value="1">
                </el-switch>
              </template>
            </el-table-column>
            <el-table-column
                v-if="containPermissions(['system:user:update', 'system:user:createUserRole', 'system:user:resetPwd', 'system:user:delete'])"
                label="操作"
                width="270"
                fixed="right"
            >
              <!--          row.id !== userInfo.id &&-->
              <template v-if="isAdmin || (row.roles.findIndex(r => r.code === adminCode) === -1)" slot-scope="{row}">
                <el-button type="text" icon="el-icon-edit" @click="$refs.operaUserWindow.open('编辑用户', row)" v-permissions="['system:user:update']">编辑</el-button>
                <el-button type="text" icon="el-icon-s-custom" @click="$refs.roleConfigWindow.open(row)" v-permissions="['system:user:createUserRole']">配置角色</el-button>
                <el-button type="text" @click="$refs.resetPwdWindow.open(row)" v-permissions="['system:user:resetPwd']">重置密码</el-button>
                <!--            <el-button v-if="!row.fixed" type="text" icon="el-icon-delete" @click="deleteById(row)" v-permissions="['system:user:delete']">删除</el-button>-->
              </template>
            </el-table-column>
          </el-table>
          <pagination
              @size-change="handleSizeChange"
              @current-change="handlePageChange"
              :pagination="tableData.pagination"
          ></pagination>
        </template>
        <!-- æ–°å»º/修改 -->
        <OperaUserWindow ref="operaUserWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
        <!-- é…ç½®è§’色 -->
        <RoleConfigWindow ref="roleConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
        <!-- é‡ç½®å¯†ç  -->
        <ResetPwdWindow ref="resetPwdWindow"/>
        <!--  åˆ†é…ä¼ä¸š  -->
        <allocationEnterprises ref="allocationEnterprises" @success="handlePageChange(tableData.pagination.pageIndex)"/>
      </TableLayout>
    </GlobalWindow>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import TableLayout from '@/layouts/TableLayout'
import BaseTable from '@/components/base/BaseTable'
import GlobalWindow from '@/components/common/GlobalWindow'
import OperaUserWindow from '@/components/system/user/OperaUserWindow'
import allocationEnterprises from '@/components/system/user/allocationEnterprises'
import RoleConfigWindow from '@/components/system/user/RoleConfigWindow'
import ResetPwdWindow from '@/components/system/user/ResetPwdWindow'
import { updUserStatus } from '@/api/system/companyUser'
export default {
  name: 'OperaCompanyUserWindow',
  extends: BaseTable,
  components: { allocationEnterprises, ResetPwdWindow, RoleConfigWindow,GlobalWindow, OperaUserWindow, TableLayout, Pagination },
  data () {
    return {
      // æœç´¢
      visible:false,
      title:'用户管理',
      company:null,
      searchForm: {
        username: '', // åå­—
        realname: '', // å§“名
        companyId: null, // éƒ¨é—¨ID
        mobile: '' // æ‰‹æœºå·ç 
      }
    }
  },
  created () {
  },
  methods: {
    open(title, row){
      this.config({
        module: '用户',
        api: '/system/companyUser',
        'field.main': 'realname',
        sorts: [{
          property: 'CREATE_TIME',
          direction: 'DESC'
        }]
      })
      this.company=row
      this.title = title
      this.visible = true
      this.searchForm.companyId=row.id
      this.search()
    },
    changeStatus(status, row) {
      updUserStatus({
        id: row.id,
        status
      }).then(res => {
        this.search()
      }).catch(err => {
        row.status = row.status === 0 ? 1 : 0
      })
    }
  }
}
</script>
<style scoped lang="scss">
@import "@/assets/style/variables.scss";
// åˆ—表头像处理
.table-column-avatar {
  img {
    width: 48px;
  }
}
</style>
company/src/views/business/company.vue
@@ -23,42 +23,46 @@
                :data="tableData.list"
                stripe
            >
                <el-table-column prop="name" label="企业名称" min-width="100px"></el-table-column>
                <el-table-column prop="code" label="统一信用代码" min-width="100px"></el-table-column>
                <el-table-column prop="createDate" label="添加时间" min-width="100px"></el-table-column>
                <el-table-column prop="phone" label="绑定手机号" min-width="100px"></el-table-column>
                <el-table-column label="启用状态" min-width="100px">
                    <template slot-scope="{row}">
                        <el-switch
                            @change="changeStatus($event, row)"
                            v-model="row.status"
                            active-color="#13ce66"
                            inactive-color="#ff4949"
                            :active-value="0"
                            :inactive-value="1">
                        </el-switch>
                    </template>
                </el-table-column>
                <el-table-column label="电子签认证状态" min-width="100px">
                    <template slot-scope="{row}">
                      <span v-if="row.signStatus === 0">待认证</span>
                      <span v-if="row.signStatus === 1">认证中</span>
                      <span v-if="row.signStatus === 2">认证失败</span>
                      <span v-if="row.signStatus === 3">认证通过</span>
                    </template>
                </el-table-column>
                <el-table-column
                <el-table-column prop="name" label="企业名称" min-width="150px" fixed  align="center"></el-table-column>
                <el-table-column prop="code" label="统一信用代码" min-width="150px" fixed     align="center"></el-table-column>
              <el-table-column prop="phone" label="绑定手机号" min-width="100px" fixed     align="center"></el-table-column>
              <el-table-column label="启用状态" min-width="60px">
                <template slot-scope="{row}">
                  <el-switch
                          @change="changeStatus($event, row)"
                          v-model="row.status"
                          active-color="#13ce66"
                          inactive-color="#ff4949"
                          :active-value="0"
                          :inactive-value="1">
                  </el-switch>
                </template>
              </el-table-column>
              <el-table-column label="电子签状态" min-width="80px"
                               align="center">
                <template slot-scope="{row}">
                  <span v-if="row.signStatus === 0">待认证</span>
                  <span v-if="row.signStatus === 1">认证中</span>
                  <span v-if="row.signStatus === 2">认证失败</span>
                  <span v-if="row.signStatus === 3">认证通过</span>
                </template>
              </el-table-column>
              <el-table-column prop="createDate" label="添加时间" min-width="120px"    align="center"></el-table-column>
              <el-table-column
                    v-if="containPermissions(['business:company:update', 'business:company:delete'])"
                    label="操作"
                    min-width="120"
                    align="center"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.OperaCompanyDescWindow.open('企业详情', row)"  v-permissions="['business:company:update']">查看详情</el-button>
                        <el-button type="text" @click="edit(row)" v-permissions="['business:company:update']">修改</el-button>
<!--
                        <el-button type="text" @click="$refs.operaCompanyWindow.open('编辑企业信息表', row)" v-permissions="['business:company:update']">电子签认证</el-button>
-->
                      <!--                     <el-button type="text" @click="$refs.OperaCompanyRoleWindow.open('企业角色管理-'+row.name, row)"  v-permissions="['business:company:update']">角色管理</el-button>
                                           <el-button type="text"  @click="$refs.OperaCompanyUserWindow.open('企业账号管理-'+row.name, row)" v-permissions="['business:company:update']">账号管理</el-button>
                                           <el-button type="text" @click="$refs.operaCompanyWindow.open('编辑企业信息表', row)" v-permissions="['business:company:update']">电子签认证</el-button>
                   -->
                    </template>
                </el-table-column>
            </el-table>
@@ -73,6 +77,8 @@
        <OperaCompanyWindow ref="operaCompanyWindow" @success="handlePageChange" />
        <!-- è¯¦æƒ… -->
        <OperaCompanyDescWindow ref="OperaCompanyDescWindow" @success="handlePageChange" />
        <OperaCompanyUserWindow ref="OperaCompanyUserWindow" />
        <OperaCompanyRoleWindow ref="OperaCompanyRoleWindow"  />
    </TableLayout>
</template>
@@ -81,12 +87,14 @@
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaCompanyWindow from '@/components/business/OperaCompanyWindow'
import OperaCompanyRoleWindow from '@/components/business/OperaCompanyRoleWindow'
import OperaCompanyUserWindow from '@/components/business/OperaCompanyUserWindow'
import OperaCompanyDescWindow from '@/components/business/OperaCompanyDescWindow'
import { updateStatus, getById } from '@/api/business/company'
export default {
  name: 'Company',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaCompanyWindow, OperaCompanyDescWindow },
  components: { TableLayout, Pagination, OperaCompanyWindow,OperaCompanyRoleWindow, OperaCompanyUserWindow,OperaCompanyDescWindow },
  data () {
    return {
      // æœç´¢
company/src/views/business/insuranceApplyShop.vue
@@ -83,7 +83,8 @@
                  <span :class="'apply-status'+row.status" >{{row.statusInfo}}</span>
                </template>
              </el-table-column>
              <el-table-column prop="solutionsName" fixed label="保险方案" align="center" min-width="150"></el-table-column>
              <el-table-column prop="companyName" fixed label="投保企业" align="center" min-width="130"></el-table-column>
              <el-table-column prop="solutionsName" fixed label="保险方案" align="center" min-width="120"></el-table-column>
              <el-table-column label="类型" fixed  align="center">
                <template slot-scope="{row}">
                  <span style="color: #00BA92" v-if="row.solutionType == 1">委托投保</span>
server/platform/src/main/java/com/doumee/api/system/SystemUserController.java
@@ -70,6 +70,16 @@
        systemUserBiz.create(systemUser);
        return ApiResponse.success(null);
    }
    @Trace(withRequestParameters = false)
    @PreventRepeat
    @ApiOperation("新建企业或者商户账号")
    @PostMapping("/createCompany")
    @RequiresPermissions("system:user:create")
    public ApiResponse createCompany(@Validated(OperaType.Create.class) @RequestBody CreateSystemUserDTO systemUser) {
        systemUser.setCreateUser(this.getLoginUser().getId());
        systemUserBiz.createCompany(systemUser);
        return ApiResponse.success(null);
    }
    @PreventRepeat
    @ApiOperation("修改用户状态")
    @GetMapping("/updUserStatus")
@@ -117,6 +127,12 @@
    public ApiResponse<PageData<SystemUserListVO>> findPage (@RequestBody PageWrap<QuerySystemUserDTO> pageWrap) {
        return ApiResponse.success(systemUserService.findPage(pageWrap));
    }
    @ApiOperation("分页查询")
    @PostMapping("/pageCompany")
    @RequiresPermissions("system:user:query")
    public ApiResponse<PageData<SystemUserListVO>> findPageCompany (@RequestBody PageWrap<QuerySystemUserDTO> pageWrap) {
        return ApiResponse.success(systemUserService.findPageCompany(pageWrap));
    }
    @ApiOperation("分页查询系统用户")
    @PostMapping("/findAllPage")
    @RequiresPermissions("system:user:query")
server/service/src/main/java/com/doumee/biz/system/SystemUserBiz.java
@@ -45,6 +45,7 @@
     * @date 2023/03/21 14:49
     */
    void create(CreateSystemUserDTO systemUser);
    void createCompany(CreateSystemUserDTO systemUser);
    /**
     * ä¿®æ”¹ç”¨æˆ·ä¿¡æ¯
@@ -60,13 +61,6 @@
     */
    void createUserRole(CreateUserRoleDTO dto);
    /**
     * ä¼ä¸šåˆ›å»ºç”¨æˆ·
     * @param createCompanyUserDTO
     */
    void companyCreateUser(CreateCompanyUserDTO createCompanyUserDTO);
    void companyUpdUser(CreateCompanyUserDTO updCreateCompanyUserDTO);
    void updPassword(CreateCompanyUserDTO updCreateCompanyUserDTO);
server/service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -177,6 +177,80 @@
        }
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void createCompany(CreateSystemUserDTO systemUser) {
        // éªŒè¯ç”¨æˆ·å
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(!Constants.equalsInteger(loginUserInfo.getType(),Constants.UserType.SYSTEM.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED);
        }
//        systemUser.setUsername(systemUser.getMobile());
        if(StringUtils.isBlank(systemUser.getMobile()) || StringUtils.isBlank(systemUser.getCaptcha())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        if( systemUser.getCompanyId() == null){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        String  phoneAtuh = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.COMPANY_PHONE_AUTH).getCode();
        if(!debugModel && !StringUtils.equals(phoneAtuh,Constants.ONE+"")){
            SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,systemUser.getMobile(),systemUser.getCaptcha());
        }
        Company company = companyService.findById(systemUser.getCompanyId());
        if(company == null ||Constants.equalsInteger(company.getIsdeleted(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,当前企业信息不正确!");
        }
        SystemUser queryUserDto = new SystemUser();
        queryUserDto.setUsername(systemUser.getUsername());
        queryUserDto.setDeleted(Boolean.FALSE);
//        queryUserDto.setType(Constants.ZERO);
        SystemUser user = systemUserService.findOne(queryUserDto);
        if (user != null) {
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "登录账号已存在");
        }
        // éªŒè¯æ‰‹æœºå·
       if (StringUtils.isNotBlank(systemUser.getMobile())) {
            queryUserDto = new SystemUser();
            queryUserDto.setDeleted(Boolean.FALSE);
            queryUserDto.setMobile(systemUser.getMobile());
            user = systemUserService.findOne(queryUserDto);
            if (user != null) {
                throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "手机号已存在");
            }
        }
        // ç”Ÿæˆå¯†ç ç›
        String salt = RandomStringUtils.randomAlphabetic(6);
        // ç”Ÿæˆå¯†ç 
        systemUser.setPassword(Utils.Secure.encryptPassword(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.DEFAULT_PASSWORD).getCode(), salt));
        systemUser.setSalt(salt);
        systemUser.setType(Constants.equalsInteger(company.getType(),Constants.ONE)?Constants.UserType.ZHUBO.getKey():Constants.UserType.COMPANY.getKey());
        systemUser.setType(loginUserInfo.getType());
        systemUser.setStatus(Constants.ZERO);
        Integer userId = systemUserService.create(systemUser);
        // è®¾ç½®éƒ¨é—¨
        if (systemUser.getDepartmentId() != null) {
            SystemDepartmentUser systemDepartmentUser = new SystemDepartmentUser();
            systemDepartmentUser.setDepartmentId(systemUser.getDepartmentId());
            systemDepartmentUser.setUserId(userId);
            systemDepartmentUser.setOperaUser(systemUser.getCreateUser());
            systemDepartmentUser.setOperaTime(new Date());
            systemDepartmentUserService.create(systemDepartmentUser);
        }else {
            SystemDepartmentUser systemDepartmentUser = new SystemDepartmentUser();
            QueryWrapper<SystemDepartment> wrapper = new QueryWrapper<>();
            wrapper.lambda().isNull(SystemDepartment::getParentId).last("limit 1");
            SystemDepartment systemDepartment = systemDepartmentService.findOne(wrapper);
            systemDepartmentUser.setDepartmentId(systemDepartment.getId());
            systemDepartmentUser.setUserId(userId);
            systemDepartmentUser.setOperaUser(systemUser.getCreateUser());
            systemDepartmentUser.setOperaTime(new Date());
            systemDepartmentUserService.create(systemDepartmentUser);
        }
    }
    @Override
    public void updateById(CreateSystemUserDTO systemUser) {
@@ -248,76 +322,6 @@
            SystemUserRole newUserRole = new SystemUserRole();
            newUserRole.setUserId(dto.getUserId());
            newUserRole.setRoleId(roleId);
            systemUserRoleService.create(newUserRole);
        }
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void companyCreateUser(CreateCompanyUserDTO createCompanyUserDTO) {
        if(Objects.isNull(createCompanyUserDTO)
                ||StringUtils.isBlank(createCompanyUserDTO.getUserName())
                ||StringUtils.isBlank(createCompanyUserDTO.getRealName())
                ||StringUtils.isBlank(createCompanyUserDTO.getPassword()) ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        SystemUser queryUserDto = new SystemUser();
        queryUserDto.setUsername(createCompanyUserDTO.getUserName());
        queryUserDto.setDeleted(Boolean.FALSE);
        SystemUser user = systemUserService.findOne(queryUserDto);
        if (user != null) {
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "登录账号已存在");
        }
        if(createCompanyUserDTO.getType().equals(Constants.UserType.ZHUBO.getKey())){
            Company company = companyService.findById(loginUserInfo.getCompanyId());
            SystemUser zbUserNum = new SystemUser();
            zbUserNum.setCompanyId(loginUserInfo.getCompanyId());
            zbUserNum.setDeleted(Boolean.FALSE);
            zbUserNum.setType(Constants.UserType.ZHUBO.getKey());
        }
        SystemUser systemUser  = new SystemUser();
        BeanUtils.copyProperties(createCompanyUserDTO,systemUser);
        systemUser.setCompanyId(loginUserInfo.getCompanyId());
        systemUser.setRealname(createCompanyUserDTO.getRealName());
        systemUser.setUsername(createCompanyUserDTO.getUserName());
        // ç”Ÿæˆå¯†ç ç›
        String salt = RandomStringUtils.randomAlphabetic(6);
        // ç”Ÿæˆå¯†ç 
        systemUser.setPassword(Utils.Secure.encryptPassword(systemUser.getPassword(), salt));
        systemUser.setSalt(salt);
        Integer userId = systemUserService.create(systemUser);
        if(systemUser.getType().equals(Constants.UserType.COMPANY.getKey())){
            SystemUserRole newUserRole = new SystemUserRole();
            newUserRole.setUserId(userId);
            newUserRole.setRoleId(createCompanyUserDTO.getRoleId());
            systemUserRoleService.create(newUserRole);
        }
    }
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void companyUpdUser(CreateCompanyUserDTO updCreateCompanyUserDTO) {
        if(Objects.isNull(updCreateCompanyUserDTO)
                ||Objects.isNull(updCreateCompanyUserDTO.getId())
                ||StringUtils.isBlank(updCreateCompanyUserDTO.getRealName())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        SystemUser systemUser  = systemUserService.findById(updCreateCompanyUserDTO.getId());
        if(Objects.isNull(systemUser)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        systemUser.setRealname(updCreateCompanyUserDTO.getRealName());
        systemUser.setMobile(updCreateCompanyUserDTO.getMobile());
        systemUserService.updateById(systemUser);
        if(systemUser.getType().equals(Constants.UserType.COMPANY.getKey())){
            // åˆ é™¤å…³è”角色
            SystemUserRole deleteDto = new SystemUserRole();
            deleteDto.setUserId(systemUser.getId());
            systemUserRoleService.delete(deleteDto);
            SystemUserRole newUserRole = new SystemUserRole();
            newUserRole.setUserId(systemUser.getId());
            newUserRole.setRoleId(updCreateCompanyUserDTO.getRoleId());
            systemUserRoleService.create(newUserRole);
        }
    }
server/service/src/main/java/com/doumee/service/system/SystemUserService.java
@@ -91,8 +91,5 @@
    long count(SystemUser systemUser);
    PageData<SystemUserListVO>  findPageCompany(PageWrap<QuerySystemUserDTO> pageWrap);
}
server/service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
@@ -167,6 +167,33 @@
        }
        return PageData.from(new PageInfo<>(userList));
    }
    @Override
    public PageData<SystemUserListVO> findPageCompany(PageWrap<QuerySystemUserDTO> pageWrap) {
        // æ ¹éƒ¨é—¨æ¡ä»¶å¤„理(需查询根部门下所有部门的用户)
        if (pageWrap.getModel().getRootDeptId() != null) {
//            pageWrap.getModel().setDepartmentIds(getDeptIds(pageWrap.getModel().getRootDeptId()));
        } else {
//            List<SystemDepartment> list = systemDepartmentService.findList(new QueryWrapper<>());
//            List<Integer> collect = list.stream().map(s -> s.getId()).collect(Collectors.toList());
//            pageWrap.getModel().setDepartmentIds(collect);
        }
        if (pageWrap.getModel().getCompanyId() == null) {
            pageWrap.getModel().setCompanyId(-1);
        }
        // æ‰§è¡ŒæŸ¥è¯¢
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
        List<SystemUserListVO> userList = systemUserMapper.selectManageList(pageWrap.getModel(), pageWrap.getOrderByClause());
        String zhuboRoomUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.ZHUBO_ROOM_URL).getCode();
        for (SystemUserListVO user : userList) {
            // æŸ¥è¯¢ç”¨æˆ·è§’色列表
            user.setRoles(systemRoleService.findByUserId(user.getId()));
            // æŸ¥è¯¢ç”¨æˆ·å²—位列表
//            user.setPositions(systemPositionService.findByUserId(user.getId()));
            user.setZhuboRoomUrl(zhuboRoomUrl);
        }
        return PageData.from(new PageInfo<>(userList));
    }
    @Override
    public long count(SystemUser systemUser) {