|
@@ -1,40 +1,96 @@
|
|
|
<template>
|
|
|
<div class="app-container">
|
|
|
- <div class="setting_title">用户管理</div>
|
|
|
- <el-divider />
|
|
|
-
|
|
|
+ <div class="tree-container">
|
|
|
+ <div style="padding: 10px; display: flex">
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-refresh-right"
|
|
|
+ size="small"
|
|
|
+ style="padding: 9px 10px; margin-right: 6px"
|
|
|
+ @click="refreshDepartment()"
|
|
|
+ />
|
|
|
+ <el-input v-model="filterText" placeholder="输入关键字进行过滤" size="small" clearable />
|
|
|
+ </div>
|
|
|
+ <el-tree
|
|
|
+ ref="listTree"
|
|
|
+ :data="departmentList"
|
|
|
+ :props="defaultProps"
|
|
|
+ default-expand-all
|
|
|
+ highlight-current
|
|
|
+ :expand-on-click-node="false"
|
|
|
+ :filter-node-method="filterNode"
|
|
|
+ node-key="id"
|
|
|
+ @node-click="handleNodeClick"
|
|
|
+ >
|
|
|
+ <div slot-scope="{ node, data }" class="custom-tree-node">
|
|
|
+ <i
|
|
|
+ :class="data.children && data.children.length > 0 ? 'el-icon-folder-opened' : 'el-icon-document-remove'"
|
|
|
+ /><span>{{ node.label }}</span>
|
|
|
+ </div>
|
|
|
+ </el-tree>
|
|
|
+ </div>
|
|
|
<div class="mymain-container">
|
|
|
- <Collapse :screen-form="screenForm">
|
|
|
- <template #right_btn>
|
|
|
- <el-button size="mini" @click="resetScreenForm">清空</el-button>
|
|
|
- <el-button size="mini" type="primary" @click="submitScreenForm">搜索</el-button>
|
|
|
- </template>
|
|
|
- <template #search>
|
|
|
- <el-form ref="screenForm" :model="screenForm" label-width="150px" size="mini" label-position="left">
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :xs="24" :sm="12" :lg="8">
|
|
|
- <el-form-item label="账号/用户名名称:" prop="userName">
|
|
|
- <el-input v-model="screenForm.userName" placeholder="请输入账号/用户名名称" />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-form>
|
|
|
- </template>
|
|
|
- </Collapse>
|
|
|
- <div class="btn-group clearfix">
|
|
|
+ <div class="screen-container">
|
|
|
+ <!-- <div class="top clearfix">
|
|
|
+ <div class="title fl">条件筛选</div>
|
|
|
+ </div> -->
|
|
|
+ <Collapse :screen-form="screenForm">
|
|
|
+ <template #right_btn>
|
|
|
+ <el-button size="mini" @click="resetScreenForm">清空</el-button>
|
|
|
+ <el-button size="mini" type="primary" @click="submitScreenForm">搜索</el-button>
|
|
|
+ </template>
|
|
|
+ <template #search>
|
|
|
+ <el-form ref="screenForm" :model="screenForm" label-width="150px" size="mini" label-position="left">
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :xs="24" :sm="12" :lg="8">
|
|
|
+ <el-form-item label="账号/用户名名称:" prop="name">
|
|
|
+ <el-input v-model="screenForm.name" placeholder="请输入账号/用户名名称" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :xs="24" :sm="12" :lg="8">
|
|
|
+ <el-form-item label="角色:" prop="roleId">
|
|
|
+ <el-select v-model="screenForm.roleId" class="selectStyle" placeholder="请选择" filterable>
|
|
|
+ <el-option v-for="(v, i) in roleList" :key="i" :label="v.name" :value="v.adminRoleId" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ </template>
|
|
|
+ </Collapse>
|
|
|
+ </div>
|
|
|
+ <div class="btn-group clearfix" style="margin-top: 20px">
|
|
|
<div class="fl">
|
|
|
- <el-button
|
|
|
- v-if="checkBtnRole('add')"
|
|
|
- size="small"
|
|
|
- type="primary"
|
|
|
- icon="el-icon-plus"
|
|
|
- @click="addOrEdit('add')"
|
|
|
- >新增账号</el-button
|
|
|
+ <el-button size="mini" type="primary" @click="openAccountForm('add')">添加账号</el-button>
|
|
|
+ </div>
|
|
|
+ <div class="fr">
|
|
|
+ <el-button v-if="checkBtnRole('download')" size="mini" @click="handleDownload">下载导入模板</el-button>
|
|
|
+ <ExportButton class="import-btn" :ex-url="'admin/user/user/listExport'" :ex-params="exParams" />
|
|
|
+ <ImportButton
|
|
|
+ class="import-btn"
|
|
|
+ im-text="批量变更仓库和产品分类"
|
|
|
+ :im-url="'admin/user/batch/update'"
|
|
|
+ @importSuccess="getList"
|
|
|
+ />
|
|
|
+
|
|
|
+ <el-upload
|
|
|
+ v-if="checkBtnRole('import')"
|
|
|
+ class="import-btn"
|
|
|
+ action=""
|
|
|
+ :http-request="handleImport"
|
|
|
+ :file-list="importFileList"
|
|
|
+ :show-file-list="false"
|
|
|
>
|
|
|
+ <!-- v-if="checkBtnRole('import')" -->
|
|
|
+ <el-button size="mini" type="primary" :loading="importLoading">{{
|
|
|
+ importLoading ? '导入中...' : '导入'
|
|
|
+ }}</el-button>
|
|
|
+ </el-upload>
|
|
|
+ <!--/admin/user/batch/update
|
|
|
+ <el-button size="small" type="primary" @click="handleExport">导出</el-button>
|
|
|
+
|
|
|
+ <el-button size="small" type="primary" :loading="importLoading" @click="clickImport">{{ importLoading ? '导入中...' : '导入' }}</el-button>
|
|
|
+-->
|
|
|
</div>
|
|
|
- <!-- <div class="fr">-->
|
|
|
- <!-- <ImportButton :im-url="'stock/importToll'" @importSuccess="getList" />-->
|
|
|
- <!-- </div>-->
|
|
|
</div>
|
|
|
|
|
|
<div class="table">
|
|
@@ -47,29 +103,98 @@
|
|
|
highlight-current-row
|
|
|
stripe
|
|
|
>
|
|
|
- <el-table-column align="left" label="序号" type="index" width="50" />
|
|
|
- <el-table-column align="left" label="账号" prop="userName" />
|
|
|
- <el-table-column align="left" label="账号名称" prop="nickName" />
|
|
|
- <el-table-column align="left" label="创建时间" prop="createTime" />
|
|
|
- <el-table-column align="left" label="最后登录时间" prop="lastLoginTime" />
|
|
|
- <el-table-column align="left" label="主帐号" prop="isMaster">
|
|
|
+ <!-- <el-table-column align="center" type="selection" width="55" fixed></el-table-column> -->
|
|
|
+ <el-table-column
|
|
|
+ show-overflow-tooltip
|
|
|
+ align="center"
|
|
|
+ label="账号"
|
|
|
+ prop="userName"
|
|
|
+ min-width="120"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ show-overflow-tooltip
|
|
|
+ align="center"
|
|
|
+ label="用户名"
|
|
|
+ prop="nickName"
|
|
|
+ min-width="160"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ show-overflow-tooltip
|
|
|
+ align="center"
|
|
|
+ label="角色"
|
|
|
+ prop="roleName"
|
|
|
+ min-width="100"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ show-overflow-tooltip
|
|
|
+ align="center"
|
|
|
+ label="修改人"
|
|
|
+ prop="updateBy"
|
|
|
+ min-width="160"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ show-overflow-tooltip
|
|
|
+ align="center"
|
|
|
+ label="修改时间"
|
|
|
+ prop="updateTime"
|
|
|
+ min-width="160"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ show-overflow-tooltip
|
|
|
+ align="center"
|
|
|
+ label="创建时间"
|
|
|
+ prop="createTime"
|
|
|
+ min-width="160"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ show-overflow-tooltip
|
|
|
+ align="center"
|
|
|
+ label="最后登录时间"
|
|
|
+ prop="lastLoginTime"
|
|
|
+ min-width="160"
|
|
|
+ />
|
|
|
+ <el-table-column show-overflow-tooltip align="center" label="状态" class-name="status-col">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-tag v-if="scope.row.isMaster" type="success">是</el-tag>
|
|
|
- <el-tag v-else type="danger">否</el-tag>
|
|
|
+ <el-tag size="mini" :type="scope.row.status ? 'success' : 'danger'">{{
|
|
|
+ scope.row.status ? '正常' : '冻结'
|
|
|
+ }}</el-tag>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column align="center" label="操作" width="180">
|
|
|
+ <el-table-column align="center" label="操作" min-width="160">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-button type="text" @click="addOrEdit('edit', scope.row)">编辑</el-button>
|
|
|
- <el-button type="text" @click="addOrEdit('password', scope.row)">重置密码</el-button>
|
|
|
- <el-popconfirm title="确定删除吗?" @onConfirm="handleDel(scope.row)">
|
|
|
- <el-button slot="reference" type="text" size="mini"> 删除 </el-button>
|
|
|
- </el-popconfirm>
|
|
|
- <!-- <el-button
|
|
|
- v-if="checkBtnRole('detail')"
|
|
|
+ <template v-if="checkBtnRole('status')">
|
|
|
+ <el-popconfirm
|
|
|
+ v-if="scope.row.status"
|
|
|
+ style="margin-right: 10px"
|
|
|
+ title="确定冻结吗?"
|
|
|
+ @onConfirm="changeStatus(scope.row.adminUserId, 0)"
|
|
|
+ >
|
|
|
+ <el-button slot="reference" type="text">冻结</el-button>
|
|
|
+ </el-popconfirm>
|
|
|
+ <el-popconfirm
|
|
|
+ v-else
|
|
|
+ style="margin-right: 10px"
|
|
|
+ title="确定恢复吗?"
|
|
|
+ @onConfirm="changeStatus(scope.row.adminUserId, 1)"
|
|
|
+ >
|
|
|
+ <el-button slot="reference" type="text">恢复</el-button>
|
|
|
+ </el-popconfirm>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <el-button
|
|
|
+ v-if="checkBtnRole('edit')"
|
|
|
type="text"
|
|
|
- @click="setMenuRole(scope.row.adminUserId, 'role')"
|
|
|
- >设置权限</el-button> -->
|
|
|
+ @click="openAccountForm('edit', scope.row.adminUserId)"
|
|
|
+ >编辑</el-button>
|
|
|
+ <el-button
|
|
|
+ v-if="checkBtnRole('reset')"
|
|
|
+ type="text"
|
|
|
+ @click="handleReset(scope.row.adminUserId)"
|
|
|
+ >重置密码</el-button>
|
|
|
+
|
|
|
+ <!-- <el-popconfirm style="margin-left: 10px;" title="确定删除吗?" @onConfirm="deleteAccount(scope.row.id)" v-if="checkBtnRole('del')">
|
|
|
+ <el-button slot="reference" type="text">删除</el-button>
|
|
|
+ </el-popconfirm> -->
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -90,180 +215,375 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- <!-- 设置权限 -->
|
|
|
+ <!-- 添加编辑账号 -->
|
|
|
<el-dialog
|
|
|
- title="设置权限"
|
|
|
- :visible.sync="roleFormVisible"
|
|
|
+ :title="AccountFormType == 'add' ? '添加账号' : '编辑账号'"
|
|
|
+ :visible.sync="AccountFormVisible"
|
|
|
:show-close="false"
|
|
|
width="40%"
|
|
|
:close-on-click-modal="false"
|
|
|
- custom-class="tree-dialog"
|
|
|
- top="50px"
|
|
|
>
|
|
|
- <el-tree
|
|
|
- ref="tree"
|
|
|
- :data="menuRoleList"
|
|
|
- show-checkbox
|
|
|
- :check-strictly="true"
|
|
|
- :default-expand-all="true"
|
|
|
- :expand-on-click-node="false"
|
|
|
- node-key="moduleId"
|
|
|
- highlight-current
|
|
|
- :props="defaultProps"
|
|
|
+ <el-form
|
|
|
+ ref="AccountForm"
|
|
|
+ :model="AccountForm"
|
|
|
+ :rules="AccountFormRules"
|
|
|
+ label-position="left"
|
|
|
+ label-width="100px"
|
|
|
>
|
|
|
- <span slot-scope="{ node, data }" class="custom-tree-node">
|
|
|
- <span>{{ node.label }}</span>
|
|
|
- <span v-if="data.type < 3">
|
|
|
- <el-button type="text" size="mini" @click="() => quickSelection(data)">一键全选</el-button>
|
|
|
- <el-button type="text" size="mini" style="color: #f56c6c" @click="() => quickCancel(data)"
|
|
|
- >一键取消</el-button
|
|
|
- >
|
|
|
+ <el-form-item label="账号" prop="account">
|
|
|
+ <el-input v-model="AccountForm.account" autocomplete="off" placeholder="请输入账号" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="用户名" prop="nickName">
|
|
|
+ <el-input v-model="AccountForm.nickName" autocomplete="off" placeholder="请输入用户名" />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="角色组" prop="role">
|
|
|
+ <el-select v-model="AccountForm.role" placeholder="请选择角色组" style="width: 100%" filterable>
|
|
|
+ <el-option
|
|
|
+ v-for="(item, index) in roleList"
|
|
|
+ :key="index"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.adminRoleId"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-show="roleObj.type === 0" label="部门" prop="department">
|
|
|
+ <el-tree
|
|
|
+ ref="tree"
|
|
|
+ :data="departmentList"
|
|
|
+ show-checkbox
|
|
|
+ :check-strictly="true"
|
|
|
+ node-key="adminWebsitId"
|
|
|
+ highlight-current
|
|
|
+ :props="props"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-show="roleObj.type === 0 && roleObj.name === '经销商'" label="经销商" prop="dealer">
|
|
|
+ <el-select v-model="AccountForm.dealer" placeholder="请选择经销商" style="width: 100%" filterable>
|
|
|
+ <el-option v-for="(item, index) in dealerList" :key="index" :label="item.name" :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-show="roleObj.type === 1 || roleObj.type === 2" label="商户" prop="merchant">
|
|
|
+ <el-select v-model="AccountForm.merchant" placeholder="请选择商户" style="width: 100%" filterable>
|
|
|
+ <el-option
|
|
|
+ v-for="(item, index) in merchantList"
|
|
|
+ :key="index"
|
|
|
+ :label="item.adminCompanyName"
|
|
|
+ :value="item.adminCompanyId"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-show="roleObj.type === 0 && roleObj.name === '经销商'" label="集团公司" prop="isGroup">
|
|
|
+ <el-radio-group v-model="AccountForm.isGroup">
|
|
|
+ <el-radio :label="true">是</el-radio>
|
|
|
+ <el-radio :label="false">否</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ v-show="roleObj.type === 0 && roleObj.name === '经销商' && !AccountForm.isGroup"
|
|
|
+ label="所属集团"
|
|
|
+ prop="company"
|
|
|
+ >
|
|
|
+ <el-select v-model="AccountForm.company" placeholder="请选择所属集团" style="width: 100%" filterable>
|
|
|
+ <el-option v-for="(item, index) in groupList" :key="index" :label="item.name" :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-show="roleObj.type === 0 && roleObj.name === '经销商'" label="是否折让" prop="isDiscount">
|
|
|
+ <el-radio-group v-model="AccountForm.isDiscount">
|
|
|
+ <el-radio :label="true">是</el-radio>
|
|
|
+ <el-radio :label="false">否</el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="AccountFormType == 'add'" label="密码" prop="newPassword">
|
|
|
+ <el-input
|
|
|
+ ref="password1"
|
|
|
+ v-model="AccountForm.newPassword"
|
|
|
+ autocomplete="off"
|
|
|
+ placeholder="请输入密码"
|
|
|
+ :type="passwordType1"
|
|
|
+ />
|
|
|
+ <span class="show-pwd" @click="showPwd(1)">
|
|
|
+ <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
|
|
|
</span>
|
|
|
- </span>
|
|
|
- </el-tree>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="AccountFormType == 'add'" label="确认密码" prop="confirmPassword">
|
|
|
+ <el-input
|
|
|
+ ref="password2"
|
|
|
+ v-model="AccountForm.confirmPassword"
|
|
|
+ autocomplete="off"
|
|
|
+ placeholder="请再次输入密码"
|
|
|
+ :type="passwordType2"
|
|
|
+ />
|
|
|
+ <span class="show-pwd" @click="showPwd(2)">
|
|
|
+ <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
|
|
|
+ </span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="可用仓库" prop="correspondIds">
|
|
|
+ <el-select
|
|
|
+ v-model="AccountForm.correspondIds"
|
|
|
+ multiple
|
|
|
+ placeholder="请选择可用仓库"
|
|
|
+ style="width: 100%"
|
|
|
+ filterable
|
|
|
+ >
|
|
|
+ <el-option v-for="(item, index) in stockList" :key="index" :label="item.name" :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="物料分类" prop="k3CategoryIds">
|
|
|
+ <el-select
|
|
|
+ v-model="AccountForm.k3CategoryIds"
|
|
|
+ multiple
|
|
|
+ placeholder="请选择物料分类"
|
|
|
+ style="width: 100%"
|
|
|
+ filterable
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item, index) in categoryList"
|
|
|
+ :key="index"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="roleObj.name === '经销商'" label="商用经销商" prop="isShangyong">
|
|
|
+ <el-radio-group v-model="AccountForm.isShangyong" size="mini">
|
|
|
+ <el-radio v-for="item in [{label:'是',value:true},{label:'否', value:false}]" :key="item.value" :label="item.value">
|
|
|
+ {{item.label}}
|
|
|
+ </el-radio>
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
- <el-button @click="roleFormVisible = false">{{ editId != 1 ? '取 消' : '关 闭' }}</el-button>
|
|
|
- <el-button v-if="editId != 1" type="primary" @click="submitRoleForm('role')">确 定</el-button>
|
|
|
+ <el-button @click="cancelAccountForm">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="submitAccountForm">确 定</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
+ <!-- 重置密码 -->
|
|
|
<el-dialog
|
|
|
- :visible.sync="dialogVisible"
|
|
|
+ title="重置密码"
|
|
|
+ :visible.sync="resetFormVisible"
|
|
|
+ :show-close="false"
|
|
|
+ width="40%"
|
|
|
:close-on-click-modal="false"
|
|
|
- width="45%"
|
|
|
- :title="'add' === addFormType ? '新增' : '修改'"
|
|
|
- @close="cancelAddForm"
|
|
|
>
|
|
|
- <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="140px" class="demo-ruleForm">
|
|
|
- <el-form-item label="账号" prop="account">
|
|
|
- <el-input v-model="ruleForm.account" type="text" autocomplete="off" disabled placeholder="系统自动生成" />
|
|
|
+ <el-form ref="resetForm" :model="resetForm" :rules="resetFormRules" label-position="left" label-width="100px">
|
|
|
+ <el-form-item label="输入新密码" prop="newPassword">
|
|
|
+ <el-input
|
|
|
+ ref="password1"
|
|
|
+ v-model="resetForm.newPassword"
|
|
|
+ autocomplete="off"
|
|
|
+ placeholder="请输入新密码"
|
|
|
+ :type="passwordType1"
|
|
|
+ />
|
|
|
+ <span class="show-pwd" @click="showPwd(1)">
|
|
|
+ <svg-icon :icon-class="passwordType1 === 'password' ? 'eye' : 'eye-open'" />
|
|
|
+ </span>
|
|
|
</el-form-item>
|
|
|
- <template v-if="addFormType !== 'password'">
|
|
|
- <el-form-item label="工装登录名额限制" prop="workLoginLimit">
|
|
|
- <el-input
|
|
|
- type="number"
|
|
|
- v-model.number="ruleForm.workLoginLimit"
|
|
|
- autocomplete="off"
|
|
|
- placeholder="请输入工装登录名额限制"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="家装登录名额限制" prop="homeLoginLimit">
|
|
|
- <el-input
|
|
|
- type="number"
|
|
|
- v-model.number="ruleForm.homeLoginLimit"
|
|
|
- autocomplete="off"
|
|
|
- placeholder="请输入家装登录名额限制"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="跨区登录名额限制" prop="spanLoginLimit">
|
|
|
- <el-input
|
|
|
- type="number"
|
|
|
- v-model.number="ruleForm.spanLoginLimit"
|
|
|
- autocomplete="off"
|
|
|
- placeholder="请输入跨区登录名额限制"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="上级经销商" prop="parentId">
|
|
|
- <el-select
|
|
|
- v-model="ruleForm.parentId"
|
|
|
- placeholder="请选择上级经销商"
|
|
|
- :disabled="addFormType === 'edit'"
|
|
|
- filterable
|
|
|
- style="width: 100%"
|
|
|
- >
|
|
|
- <el-option v-for="item in subCustomerList" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="子经销商名称" prop="nickName">
|
|
|
- <el-input v-model="ruleForm.nickName" autocomplete="off" placeholder="请输入子经销商名称" />
|
|
|
- </el-form-item>
|
|
|
- </template>
|
|
|
- <el-form-item v-if="addFormType !== 'edit'" label="密码" prop="password">
|
|
|
- <el-input v-model="ruleForm.password" type="password" autocomplete="off" placeholder="请输入密码" />
|
|
|
+ <el-form-item label="确认密码" prop="confirmPassword">
|
|
|
+ <el-input
|
|
|
+ ref="password2"
|
|
|
+ v-model="resetForm.confirmPassword"
|
|
|
+ autocomplete="off"
|
|
|
+ placeholder="请再次输入新密码"
|
|
|
+ :type="passwordType2"
|
|
|
+ />
|
|
|
+ <span class="show-pwd" @click="showPwd(2)">
|
|
|
+ <svg-icon :icon-class="passwordType2 === 'password' ? 'eye' : 'eye-open'" />
|
|
|
+ </span>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
-
|
|
|
- <span slot="footer" class="dialog-footer">
|
|
|
- <!-- <el-button type="primary" style="float: left;" @click="setMenuRole">设置权限</el-button>-->
|
|
|
- <el-button @click="cancelAddForm">取 消</el-button>
|
|
|
- <el-button type="primary" @click="submitAddForm">确 定</el-button>
|
|
|
- </span>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="cancelResetForm">取 消</el-button>
|
|
|
+ <el-button type="primary" @click="submitResetForm">确 定</el-button>
|
|
|
+ </div>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { mapGetters } from 'vuex'
|
|
|
-import { getDealerListV2 } from '@/api/basic_data/dealer'
|
|
|
import {
|
|
|
- addEngineeringUser,
|
|
|
- deleteRole,
|
|
|
- editRole,
|
|
|
- getEngineeringUserList,
|
|
|
- getMenuList,
|
|
|
- getRoleChecked,
|
|
|
- setMenuRole,
|
|
|
- editSubAccount,
|
|
|
- editEngineeringUser,
|
|
|
- getDetailGongCheng,
|
|
|
- delUserGongCheng
|
|
|
+ getStockListStock,
|
|
|
+ getDepartmentList,
|
|
|
+ getAccountList,
|
|
|
+ addAccount,
|
|
|
+ editAccount,
|
|
|
+ deleteAccount,
|
|
|
+ getAccountDetail,
|
|
|
+ getRoleList,
|
|
|
+ getMerchantList,
|
|
|
+ changeAccountStatus,
|
|
|
+ resetPassword
|
|
|
} from '@/api/setting'
|
|
|
+import { getDealerList, getCategoryList } from '@/api/common'
|
|
|
+import { findElem, downloadFiles, handleImportTwo } from '@/utils/util'
|
|
|
|
|
|
export default {
|
|
|
data() {
|
|
|
+ var validatePass = (rule, value, callback) => {
|
|
|
+ if (value === '') {
|
|
|
+ callback(new Error('请输入新密码'))
|
|
|
+ } else if (value && value.length < 6) {
|
|
|
+ callback(new Error('密码长度至少6位'))
|
|
|
+ } else {
|
|
|
+ if (this.resetForm.confirmPassword !== '') {
|
|
|
+ this.$refs.resetForm.validateField('confirmPassword')
|
|
|
+ }
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var validatePass2 = (rule, value, callback) => {
|
|
|
+ if (value === '') {
|
|
|
+ callback(new Error('请再次输入密码'))
|
|
|
+ } else if (value !== this.resetForm.newPassword) {
|
|
|
+ callback(new Error('两次输入密码不一致'))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var validatePass3 = (rule, value, callback) => {
|
|
|
+ if (value === '') {
|
|
|
+ callback(new Error('请输入新密码'))
|
|
|
+ } else if (value && value.length < 6) {
|
|
|
+ callback(new Error('密码长度至少6位'))
|
|
|
+ } else {
|
|
|
+ if (this.AccountForm.confirmPassword !== '') {
|
|
|
+ this.$refs.AccountForm.validateField('confirmPassword')
|
|
|
+ }
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var validatePass4 = (rule, value, callback) => {
|
|
|
+ if (value === '') {
|
|
|
+ callback(new Error('请再次输入密码'))
|
|
|
+ } else if (value !== this.AccountForm.newPassword) {
|
|
|
+ callback(new Error('两次输入密码不一致'))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var validateName = (rule, value, callback) => {
|
|
|
+ if (!/^[A-Za-z0-9]+$/.test(value)) {
|
|
|
+ callback(new Error('帐号只能用英文字母和数字组成'))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
return {
|
|
|
- imageURL: this.$imageUrl,
|
|
|
+ stockList: [], // 仓库列表
|
|
|
+ baseURL: process.env.VUE_APP_BASE_API,
|
|
|
dataList: null, // 列表数据
|
|
|
+ moduleList: null, // 模块列表
|
|
|
listLoading: true, // 列表加载loading
|
|
|
+ screenForm: {
|
|
|
+ // 筛选表单数据
|
|
|
+ name: '', // 名称
|
|
|
+ roleId: ''
|
|
|
+ },
|
|
|
currentPage: 1, // 当前页码
|
|
|
pageSize: 10, // 每页数量
|
|
|
listTotal: 0, // 列表总数
|
|
|
-
|
|
|
- editId: null,
|
|
|
- addFormType: 'add',
|
|
|
- addFormVisible: false,
|
|
|
- addForm: {
|
|
|
- name: '' // 角色名
|
|
|
+ selectDepartment: null, // 选中的部门
|
|
|
+ isCollapse: true,
|
|
|
+ AccountFormType: 'add',
|
|
|
+ AccountFormVisible: false,
|
|
|
+ AccountForm: {
|
|
|
+ account: '', // 账号
|
|
|
+ nickName: '', // 用户名
|
|
|
+ merchant: '', // 商户
|
|
|
+ dealer: '', // 经销商
|
|
|
+ role: '', // 角色组
|
|
|
+ correspondIds: [], // 仓库
|
|
|
+ isGroup: false,
|
|
|
+ company: '',
|
|
|
+ isDiscount: true,
|
|
|
+ newPassword: '', // 新密码
|
|
|
+ confirmPassword: '', // 确认密码
|
|
|
+ k3CategoryIds: [],
|
|
|
+ isShangyong: false, // 是否商用经销商
|
|
|
},
|
|
|
- addFormRules: {
|
|
|
- name: [{ required: true, message: '请输入角色名', trigger: 'blur' }]
|
|
|
+ AccountFormRules: {
|
|
|
+ account: [{ required: true, validator: validateName, trigger: 'blur' }],
|
|
|
+ nickName: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
|
|
|
+ role: [{ required: true, message: '请选择角色组', trigger: 'change' }],
|
|
|
+ correspondIds: [{ required: true, message: '请选择可用仓库', trigger: 'change' }],
|
|
|
+ isShangyong: [{ required: true, message: '请选择商用经销商', trigger: 'change' }],
|
|
|
+ newPassword: [{ required: true, validator: validatePass3, trigger: 'blur' }],
|
|
|
+ confirmPassword: [{ required: true, validator: validatePass4, trigger: 'blur' }]
|
|
|
},
|
|
|
-
|
|
|
- roleFormVisible: false,
|
|
|
-
|
|
|
- menuRoleList: [],
|
|
|
+ editAccountId: null,
|
|
|
+ categoryList: [],
|
|
|
+ filterText: '',
|
|
|
+ departmentList: [],
|
|
|
defaultProps: {
|
|
|
children: 'children',
|
|
|
- label: 'moduleName'
|
|
|
+ label: 'name'
|
|
|
},
|
|
|
- dialogVisible: false,
|
|
|
- ruleForm: {
|
|
|
- account: '',
|
|
|
- password: '',
|
|
|
- parentId: '',
|
|
|
- nickName: '',
|
|
|
- spanLoginLimit: 5,
|
|
|
- homeLoginLimit: 5,
|
|
|
- workLoginLimit: 5
|
|
|
+ props: {
|
|
|
+ multiple: true,
|
|
|
+ value: 'adminWebsitId',
|
|
|
+ label: 'name',
|
|
|
+ children: 'children'
|
|
|
+ },
|
|
|
+
|
|
|
+ tableSelection: [],
|
|
|
+
|
|
|
+ importLoading: false, // 导入加载loading
|
|
|
+ importFileList: [], // 导入列表
|
|
|
+
|
|
|
+ resetId: null,
|
|
|
+ resetFormVisible: false,
|
|
|
+ resetForm: {
|
|
|
+ newPassword: '', // 新密码
|
|
|
+ confirmPassword: '' // 确认密码
|
|
|
},
|
|
|
- rules: {
|
|
|
- password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
|
|
|
- parentId: [{ required: true, message: '请选择上级经销商', trigger: 'change' }],
|
|
|
- nickName: [{ required: true, message: '请输入子经销商名称', trigger: 'blur' }]
|
|
|
+ resetFormRules: {
|
|
|
+ newPassword: [{ required: true, validator: validatePass, trigger: 'blur' }],
|
|
|
+ confirmPassword: [{ required: true, validator: validatePass2, trigger: 'blur' }]
|
|
|
},
|
|
|
- subCustomerList: [],
|
|
|
- screenForm: {
|
|
|
- // 筛选表单数据
|
|
|
- userName: '' // 名称
|
|
|
- }
|
|
|
+
|
|
|
+ roleList: [], // 角色列表
|
|
|
+ roleObj: {}, // 选中的角色
|
|
|
+ merchantList: [],
|
|
|
+ dealerList: [],
|
|
|
+ groupList: [],
|
|
|
+
|
|
|
+ passwordType1: 'password',
|
|
|
+ passwordType2: 'password'
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
- ...mapGetters(['userid', 'name', 'parentId'])
|
|
|
+ exParams() {
|
|
|
+ return {
|
|
|
+ userName: this.screenForm.name,
|
|
|
+ roleId: this.screenForm.roleId,
|
|
|
+ isMaster: true
|
|
|
+ }
|
|
|
+ }
|
|
|
},
|
|
|
- created() {
|
|
|
+ watch: {
|
|
|
+ filterText(val) {
|
|
|
+ this.$refs.listTree.filter(val)
|
|
|
+ },
|
|
|
+ 'AccountForm.role'() {
|
|
|
+ if (this.AccountForm.role) {
|
|
|
+ const index = findElem(this.roleList, 'adminRoleId', this.AccountForm.role)
|
|
|
+ this.roleObj = this.roleList[index]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async created() {
|
|
|
+ this.getTree()
|
|
|
this.getList()
|
|
|
+ this.getStockList()
|
|
|
+ await this.getRoleList()
|
|
|
},
|
|
|
methods: {
|
|
|
+ // 获取仓库仓位对应关系列表
|
|
|
+ async getStockList() {
|
|
|
+ const res = await getStockListStock({ pageSize: -1, pageNum: 1 })
|
|
|
+ this.stockList = res.data.records
|
|
|
+ },
|
|
|
// 查询按钮权限
|
|
|
checkBtnRole(value) {
|
|
|
// let btnRole = this.$route.meta.roles;
|
|
@@ -272,25 +592,112 @@ export default {
|
|
|
// return index >= 0 ? true : false;
|
|
|
return true
|
|
|
},
|
|
|
- // 获取子经销商
|
|
|
- getDealerListV2() {
|
|
|
- getDealerListV2({
|
|
|
- pageNum: 1,
|
|
|
- pageSize: -1
|
|
|
- }).then(res => {
|
|
|
- this.subCustomerList = res.data.records
|
|
|
+
|
|
|
+ // 获取角色列表
|
|
|
+ async getRoleList() {
|
|
|
+ const result = await new Promise((resolve, reject) => {
|
|
|
+ getRoleList({ pageNum: 1, pageSize: -1 })
|
|
|
+ .then(res => {
|
|
|
+ this.roleList = res.data.records
|
|
|
+ resolve(res.data)
|
|
|
+ })
|
|
|
+ .catch(res => {
|
|
|
+ resolve([])
|
|
|
+ })
|
|
|
+ })
|
|
|
+ return result
|
|
|
+ },
|
|
|
+ // 获取金蝶品类
|
|
|
+ async getCategoryList() {
|
|
|
+ const result = await new Promise((resolve, reject) => {
|
|
|
+ getCategoryList({ pageNum: 1, pageSize: -1 })
|
|
|
+ .then(res => {
|
|
|
+ this.categoryList = res.data.records
|
|
|
+ resolve(res.data)
|
|
|
+ })
|
|
|
+ .catch(res => {
|
|
|
+ resolve([])
|
|
|
+ })
|
|
|
})
|
|
|
+ return result
|
|
|
},
|
|
|
+ // 获取商户列表
|
|
|
+ async getMerchantList() {
|
|
|
+ const result = await new Promise((resolve, reject) => {
|
|
|
+ getMerchantList({
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: -1
|
|
|
+ })
|
|
|
+ .then(res => {
|
|
|
+ this.merchantList = res.data.records
|
|
|
+ resolve(res.data.records)
|
|
|
+ })
|
|
|
+ .catch(res => {
|
|
|
+ resolve([])
|
|
|
+ })
|
|
|
+ })
|
|
|
+ return result
|
|
|
+ },
|
|
|
+
|
|
|
+ // 获取经销商列表
|
|
|
+ async getDealerList(id) {
|
|
|
+ const result = await new Promise((resolve, reject) => {
|
|
|
+ getDealerList({
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: -1,
|
|
|
+ bindUser: false,
|
|
|
+ adminUserId: id || ''
|
|
|
+ })
|
|
|
+ .then(res => {
|
|
|
+ this.dealerList = res.data.records
|
|
|
+ resolve(res.data.records)
|
|
|
+ })
|
|
|
+ .catch(res => {
|
|
|
+ resolve([])
|
|
|
+ })
|
|
|
+ })
|
|
|
+ return result
|
|
|
+ },
|
|
|
+
|
|
|
+ // 获取集团列表
|
|
|
+ async getGroupList(id) {
|
|
|
+ const result = await new Promise((resolve, reject) => {
|
|
|
+ getDealerList({
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: -1
|
|
|
+ })
|
|
|
+ .then(res => {
|
|
|
+ this.groupList = res.data.records
|
|
|
+ resolve(res.data.records)
|
|
|
+ })
|
|
|
+ .catch(res => {
|
|
|
+ resolve([])
|
|
|
+ })
|
|
|
+ })
|
|
|
+ return result
|
|
|
+ },
|
|
|
+
|
|
|
+ // 获取部门列表
|
|
|
+ getTree() {
|
|
|
+ getDepartmentList().then(res => {
|
|
|
+ this.departmentList = res.data
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ // 获取账号列表
|
|
|
getList() {
|
|
|
this.listLoading = true
|
|
|
+
|
|
|
const params = {
|
|
|
pageNum: this.currentPage,
|
|
|
pageSize: this.pageSize,
|
|
|
- parentId: this.parentId,
|
|
|
- userName: this.screenForm.userName,
|
|
|
- isMaster: false
|
|
|
+ adminWebsitId: this.selectDepartment ? this.selectDepartment.adminWebsitId : '',
|
|
|
+ userName: this.screenForm.name,
|
|
|
+ roleId: this.screenForm.roleId,
|
|
|
+ isMaster: true
|
|
|
}
|
|
|
- getEngineeringUserList(params).then(res => {
|
|
|
+
|
|
|
+ getAccountList(params).then(res => {
|
|
|
this.dataList = res.data.records
|
|
|
this.listTotal = res.data.total
|
|
|
this.listLoading = false
|
|
@@ -310,229 +717,381 @@ export default {
|
|
|
this.getList()
|
|
|
},
|
|
|
|
|
|
- // 操作 - 删除
|
|
|
- handleDelete(id) {
|
|
|
- deleteRole({ adminRoleId: id }).then(res => {
|
|
|
- this.getList()
|
|
|
- this.$successMsg()
|
|
|
- })
|
|
|
+ // 提交筛选表单
|
|
|
+ submitScreenForm() {
|
|
|
+ this.currentPage = 1
|
|
|
+ this.getList()
|
|
|
},
|
|
|
- handleDel(row) {
|
|
|
- delUserGongCheng({ userName: row.userName }).then(res => {
|
|
|
- this.$successMsg('删除成功')
|
|
|
- this.getList()
|
|
|
- })
|
|
|
+
|
|
|
+ // 重置筛选表单
|
|
|
+ resetScreenForm() {
|
|
|
+ this.$refs.screenForm.resetFields()
|
|
|
+ this.currentPage = 1
|
|
|
+ this.getList()
|
|
|
},
|
|
|
- // 新增编辑
|
|
|
- addOrEdit(type, row) {
|
|
|
- this.addFormType = type
|
|
|
- if (row) {
|
|
|
- getDetailGongCheng({ adminUserId: row.adminUserId }).then(res => {
|
|
|
- if (type === 'edit') {
|
|
|
- this.ruleForm = {
|
|
|
- account: res.data.userName,
|
|
|
- password: '',
|
|
|
- nickName: res.data.nickName,
|
|
|
- adminUserId: res.data.adminUserId,
|
|
|
- parentId: res.data.parentId,
|
|
|
- spanLoginLimit: res.data.spanLoginLimit,
|
|
|
- homeLoginLimit: res.data.homeLoginLimit,
|
|
|
- workLoginLimit: res.data.workLoginLimit
|
|
|
- }
|
|
|
- }
|
|
|
- if (type === 'password') {
|
|
|
- this.ruleForm = {
|
|
|
- account: res.data.userName,
|
|
|
- password: '',
|
|
|
- adminUserId: res.data.adminUserId
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
- this.dialogVisible = true
|
|
|
|
|
|
- this.getDealerListV2()
|
|
|
+ // 筛选部门
|
|
|
+ filterNode(value, data) {
|
|
|
+ if (!value) return true
|
|
|
+ return data.name.indexOf(value) !== -1
|
|
|
},
|
|
|
|
|
|
- // 取消 新增编辑
|
|
|
- cancelAddForm() {
|
|
|
- this.$refs.ruleForm.resetFields()
|
|
|
+ // 选择部门
|
|
|
+ handleNodeClick(data) {
|
|
|
+ console.log(data)
|
|
|
+ if (this.selectDepartment && data.adminWebsitId === this.selectDepartment.adminWebsitId) {
|
|
|
+ this.$refs.listTree.setCurrentKey(null)
|
|
|
+ this.selectDepartment = null
|
|
|
+ } else {
|
|
|
+ this.selectDepartment = data
|
|
|
+ }
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
|
|
|
- this.$nextTick(() => {
|
|
|
- this.dialogVisible = false
|
|
|
- })
|
|
|
+ // 刷新部门
|
|
|
+ refreshDepartment() {
|
|
|
+ this.$refs.listTree.setCurrentKey(null)
|
|
|
+ this.selectDepartment = null
|
|
|
+ this.getTree()
|
|
|
+ this.getList()
|
|
|
},
|
|
|
|
|
|
- // 提交 新增编辑
|
|
|
- submitAddForm() {
|
|
|
- this.$refs.ruleForm.validate(valid => {
|
|
|
- const params = {
|
|
|
- userName: this.ruleForm.account,
|
|
|
- password: this.ruleForm.password,
|
|
|
- parentId: this.ruleForm.parentId,
|
|
|
- nickName: this.ruleForm.nickName,
|
|
|
- spanLoginLimit: this.ruleForm.spanLoginLimit,
|
|
|
- homeLoginLimit: this.ruleForm.homeLoginLimit,
|
|
|
- workLoginLimit: this.ruleForm.workLoginLimit
|
|
|
- // adminModuleIds:this.$refs.tree ? this.$refs.tree.getCheckedKeys().join(',') :
|
|
|
+ // 打开 新增编辑 账号表单
|
|
|
+ async openAccountForm(type, id) {
|
|
|
+ this.AccountFormType = type
|
|
|
+ this.AccountFormVisible = true
|
|
|
+ await this.getMerchantList()
|
|
|
+ await this.getDealerList(id)
|
|
|
+ await this.getGroupList(id)
|
|
|
+ await this.getRoleList()
|
|
|
+ await this.getCategoryList()
|
|
|
+
|
|
|
+ if (type == 'add') {
|
|
|
+ if (this.selectDepartment) {
|
|
|
+ this.$refs.tree.setCheckedKeys([this.selectDepartment.adminWebsitId])
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ if (type == 'edit') {
|
|
|
+ this.editAccountId = id
|
|
|
+ getAccountDetail({ adminUserId: id }).then(res => {
|
|
|
+ console.log(res, 78787)
|
|
|
+ this.AccountForm.account = res.data.userName
|
|
|
+ this.AccountForm.role = res.data.roleId
|
|
|
+ this.AccountForm.nickName = res.data.nickName
|
|
|
+ this.AccountForm.merchant = res.data.companyWechatId
|
|
|
+ this.AccountForm.dealer = res.data.customerId
|
|
|
+ this.AccountForm.isGroup = res.data.isGroupCompany
|
|
|
+ this.AccountForm.company = res.data.groupCompanyId
|
|
|
+ this.AccountForm.isDiscount = res.data.isZr
|
|
|
+ this.AccountForm.correspondIds = res.data.stockCorrespondList
|
|
|
+ this.AccountForm.k3CategoryIds = res.data.k3CategoryList
|
|
|
+ this.AccountForm.isShangyong = res.data.isShangyong
|
|
|
+ this.$refs.tree.setCheckedKeys(res.data.adminWebsitIds || [])
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 取消 新增编辑 账号表单
|
|
|
+ cancelAccountForm() {
|
|
|
+ this.AccountFormVisible = false
|
|
|
+ this.$refs.AccountForm.resetFields()
|
|
|
+ this.passwordType1 = 'password'
|
|
|
+ this.passwordType2 = 'password'
|
|
|
+ },
|
|
|
+
|
|
|
+ // 提交 账号表单
|
|
|
+ submitAccountForm() {
|
|
|
+ console.log(this.AccountForm.correspondIds)
|
|
|
+ this.$refs.AccountForm.validate(valid => {
|
|
|
if (valid) {
|
|
|
- if (this.addFormType === 'password') {
|
|
|
- params.adminUserId = this.ruleForm.adminUserId
|
|
|
- editSubAccount(params).then(res => {
|
|
|
- this.cancelAddForm()
|
|
|
- this.getList()
|
|
|
- this.$successMsg('重置成功')
|
|
|
+ const categoryIds = []
|
|
|
+ this.categoryList.map(k => {
|
|
|
+ this.AccountForm.k3CategoryIds.map(i => {
|
|
|
+ if (i == k.id) {
|
|
|
+ categoryIds.push({
|
|
|
+ k3CategoryId: k.id,
|
|
|
+ k3CategoryName: k.name,
|
|
|
+ k3CategoryNumber: k.number
|
|
|
+ })
|
|
|
+ }
|
|
|
})
|
|
|
+ })
|
|
|
+
|
|
|
+ const params = {
|
|
|
+ userName: this.AccountForm.account,
|
|
|
+ nickName: this.AccountForm.nickName,
|
|
|
+ roleId: this.AccountForm.role,
|
|
|
+ password: this.AccountForm.newPassword,
|
|
|
+ correspondIds: this.AccountForm.correspondIds,
|
|
|
+ isShangyong: this.AccountForm.isShangyong,
|
|
|
+ categoryIds
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.roleObj.type === 0) {
|
|
|
+ params.adminWebsitIds = this.$refs.tree.getCheckedKeys()
|
|
|
+ params.roleName = this.roleObj.name
|
|
|
+ if (this.roleObj.name === '经销商') {
|
|
|
+ params.customerId = this.AccountForm.dealer
|
|
|
+ params.isGroupCompany = this.AccountForm.isGroup
|
|
|
+ params.parentCustomerId = this.AccountForm.company
|
|
|
+ params.isZr = this.AccountForm.isDiscount
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ params.adminCompanyId = this.AccountForm.merchant
|
|
|
}
|
|
|
- if (this.addFormType === 'edit') {
|
|
|
- params.adminUserId = this.ruleForm.adminUserId
|
|
|
- editEngineeringUser(params).then(res => {
|
|
|
- this.cancelAddForm()
|
|
|
+ if (this.AccountFormType == 'edit') {
|
|
|
+ params.adminUserId = this.editAccountId
|
|
|
+ editAccount(params).then(res => {
|
|
|
+ this.cancelAccountForm()
|
|
|
this.getList()
|
|
|
this.$successMsg('编辑成功')
|
|
|
})
|
|
|
- }
|
|
|
- if (this.addFormType === 'add') {
|
|
|
- addEngineeringUser(params).then(res => {
|
|
|
- this.cancelAddForm()
|
|
|
+ } else {
|
|
|
+ addAccount(params).then(res => {
|
|
|
+ this.cancelAccountForm()
|
|
|
this.getList()
|
|
|
- this.$successMsg('新增成功')
|
|
|
+ this.$successMsg('添加成功')
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
|
|
|
- // 设置权限 - 获取列表
|
|
|
- setMenuRole(id, type) {
|
|
|
- this.roleFormVisible = true
|
|
|
- this.editId = id
|
|
|
- getMenuList({ adminUserId: this.userid }).then(res => {
|
|
|
- this.menuRoleList = res.data
|
|
|
+ // 表格选择列
|
|
|
+ handleTableSelection(val) {
|
|
|
+ this.tableSelection = val
|
|
|
+ },
|
|
|
+
|
|
|
+ // 批量删除账号
|
|
|
+ batchDeleteAccount() {
|
|
|
+ if (this.tableSelection.length < 1) {
|
|
|
+ return this.$errorMsg('至少选择一名账号')
|
|
|
+ }
|
|
|
+ this.$confirm(`确定删除选中的账号吗?`, '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
})
|
|
|
- getRoleChecked({ adminUserId: id }).then(res => {
|
|
|
- this.$refs.tree.setCheckedKeys(res.data)
|
|
|
+ .then(() => {
|
|
|
+ const AccountIds = []
|
|
|
+ this.tableSelection.forEach(item => {
|
|
|
+ AccountIds.push(item.id)
|
|
|
+ })
|
|
|
+ deleteAccount({ id: AccountIds.join(',') }).then(res => {
|
|
|
+ this.$successMsg()
|
|
|
+ this.getTree()
|
|
|
+ this.getList()
|
|
|
+ })
|
|
|
+ })
|
|
|
+ .catch(() => {})
|
|
|
+ },
|
|
|
+
|
|
|
+ // 删除账号
|
|
|
+ deleteAccount(id) {
|
|
|
+ deleteAccount({ id: id }).then(res => {
|
|
|
+ this.$successMsg()
|
|
|
+ this.getTree()
|
|
|
+ this.getList()
|
|
|
})
|
|
|
},
|
|
|
|
|
|
- // 设置权限 - 提交数据
|
|
|
- submitRoleForm(type) {
|
|
|
- const params = {
|
|
|
- adminModuleIds: this.$refs.tree.getCheckedKeys().join(','),
|
|
|
- adminRoleId: this.editId
|
|
|
- }
|
|
|
- setMenuRole(params).then(res => {
|
|
|
+ // 操作 - 更改状态(type: 禁用0,启用1)
|
|
|
+ changeStatus(id, type) {
|
|
|
+ type = !!type
|
|
|
+ changeAccountStatus({ adminUserId: id, status: type }).then(res => {
|
|
|
this.getList()
|
|
|
this.$successMsg()
|
|
|
})
|
|
|
-
|
|
|
- this.roleFormVisible = false
|
|
|
},
|
|
|
|
|
|
- // 一键全选
|
|
|
- quickSelection(data) {
|
|
|
- const nowChecked = this.$refs.tree.getCheckedKeys()
|
|
|
- const thisId = data.moduleId
|
|
|
- let childId = []
|
|
|
- if (data.children.length) {
|
|
|
- childId = this.familyTree(data.children)
|
|
|
+ // 显示隐藏密码
|
|
|
+ showPwd(num) {
|
|
|
+ if (num == 1) {
|
|
|
+ if (this.passwordType1 === 'password') {
|
|
|
+ this.passwordType1 = ''
|
|
|
+ } else {
|
|
|
+ this.passwordType1 = 'password'
|
|
|
+ }
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.password1.focus()
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (num == 2) {
|
|
|
+ if (this.passwordType2 === 'password') {
|
|
|
+ this.passwordType2 = ''
|
|
|
+ } else {
|
|
|
+ this.passwordType2 = 'password'
|
|
|
+ }
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.password2.focus()
|
|
|
+ })
|
|
|
}
|
|
|
-
|
|
|
- const setChecked = nowChecked.concat([thisId]).concat(childId)
|
|
|
-
|
|
|
- this.$refs.tree.setCheckedKeys(setChecked)
|
|
|
},
|
|
|
|
|
|
- // 一键取消
|
|
|
- quickCancel(data) {
|
|
|
- const nowChecked = this.$refs.tree.getCheckedKeys()
|
|
|
- const thisId = data.moduleId
|
|
|
- let childId = []
|
|
|
- if (data.children.length) {
|
|
|
- childId = this.familyTree(data.children)
|
|
|
- }
|
|
|
+ // 重置密码
|
|
|
+ handleReset(id) {
|
|
|
+ this.resetId = id
|
|
|
+ this.resetFormVisible = true
|
|
|
+ },
|
|
|
|
|
|
- const setChecked = nowChecked
|
|
|
- if (setChecked.indexOf(thisId) >= 0) {
|
|
|
- setChecked.splice(setChecked.indexOf(thisId), 1)
|
|
|
- }
|
|
|
+ // 取消重置密码
|
|
|
+ cancelResetForm() {
|
|
|
+ this.resetFormVisible = false
|
|
|
+ this.passwordType1 = 'password'
|
|
|
+ this.passwordType2 = 'password'
|
|
|
+ this.$refs.resetForm.resetFields()
|
|
|
+ },
|
|
|
|
|
|
- if (childId.length) {
|
|
|
- for (var i = 0; i < childId.length; i++) {
|
|
|
- if (setChecked.indexOf(childId[i]) >= 0) {
|
|
|
- setChecked.splice(setChecked.indexOf(childId[i]), 1)
|
|
|
+ // 提交重置密码
|
|
|
+ submitResetForm() {
|
|
|
+ this.$refs.resetForm.validate(valid => {
|
|
|
+ if (valid) {
|
|
|
+ const params = {
|
|
|
+ password: this.resetForm.newPassword,
|
|
|
+ adminUserId: this.resetId
|
|
|
}
|
|
|
+ resetPassword(params).then(res => {
|
|
|
+ this.cancelResetForm()
|
|
|
+ this.getList()
|
|
|
+ this.$successMsg()
|
|
|
+ })
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- this.$refs.tree.setCheckedKeys(setChecked)
|
|
|
+ })
|
|
|
},
|
|
|
|
|
|
- // 递归子id
|
|
|
- familyTree(arr) {
|
|
|
- var temp = []
|
|
|
- var forFn = function (list) {
|
|
|
- for (var i = 0; i < list.length; i++) {
|
|
|
- var item = list[i]
|
|
|
- if (item.children) {
|
|
|
- temp.push(item.moduleId)
|
|
|
- forFn(item.children)
|
|
|
- }
|
|
|
- }
|
|
|
+ // 导出
|
|
|
+ handleExport() {
|
|
|
+ const screenData = {
|
|
|
+ adminWebsitId: this.selectDepartment ? this.selectDepartment.websitId : '',
|
|
|
+ keyword: this.screenForm.name
|
|
|
}
|
|
|
- forFn(arr)
|
|
|
- return temp
|
|
|
+ downloadFiles('wechat/enterprise/export', screenData)
|
|
|
},
|
|
|
|
|
|
- changeStatus(id, status) {
|
|
|
- editRole({
|
|
|
- adminRoleId: id,
|
|
|
- visitSysStatus: status
|
|
|
- }).then(res => {
|
|
|
- this.getList()
|
|
|
- this.$successMsg('编辑成功')
|
|
|
- })
|
|
|
- },
|
|
|
- // 提交筛选表单
|
|
|
- submitScreenForm() {
|
|
|
- this.currentPage = 1
|
|
|
- this.getList()
|
|
|
+ // 下载导入模版
|
|
|
+ handleDownload() {
|
|
|
+ downloadFiles('admin/user/download')
|
|
|
},
|
|
|
|
|
|
- // 重置筛选表单
|
|
|
- resetScreenForm() {
|
|
|
- this.$refs.screenForm.resetFields()
|
|
|
- this.currentPage = 1
|
|
|
- this.getList()
|
|
|
+ clickImport() {
|
|
|
+ if (!this.selectDepartment) {
|
|
|
+ return this.$errorMsg('请选择部门')
|
|
|
+ } else {
|
|
|
+ document.querySelector('.import-btn input').click()
|
|
|
+ }
|
|
|
},
|
|
|
+
|
|
|
+ // 导入
|
|
|
+ async handleImport(param) {
|
|
|
+ console.log(param)
|
|
|
+ this.importLoading = true
|
|
|
+ const file = param.file
|
|
|
+ const formData = new FormData()
|
|
|
+ formData.append('file', file)
|
|
|
+
|
|
|
+ const result = await handleImportTwo('/admin/user/importUser', formData)
|
|
|
+ this.importLoading = false
|
|
|
+ this.importFileList = []
|
|
|
+ // console.log(result,999);
|
|
|
+
|
|
|
+ if (result) {
|
|
|
+ this.$alert(result.message, '导入成功', {
|
|
|
+ confirmButtonText: '确定'
|
|
|
+ })
|
|
|
+ const blob = new Blob([result], {
|
|
|
+ type: 'application/vnd.ms-excel,charset=utf-8'
|
|
|
+ })
|
|
|
+ const urll = window.URL.createObjectURL(blob)
|
|
|
+ const link = document.createElement('a')
|
|
|
+ link.download = '导入失败数据.xlsx'
|
|
|
+ link.href = urll
|
|
|
+ link.click()
|
|
|
+ this.getList()
|
|
|
+ } else {
|
|
|
+ this.$alert(result.message, '导入失败', {
|
|
|
+ confirmButtonText: '确定'
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
-<style lang="scss" scoped>
|
|
|
-::v-deep .tree-dialog {
|
|
|
- .el-dialog__body {
|
|
|
- padding: 20px;
|
|
|
+<style scoped lang="scss">
|
|
|
+.import-btn {
|
|
|
+ display: inline-block;
|
|
|
+ margin-left: 10px;
|
|
|
+}
|
|
|
+.app-container {
|
|
|
+ display: flex;
|
|
|
+ .tree-container {
|
|
|
+ width: 18%;
|
|
|
+ height: calc(100vh - 110px);
|
|
|
+ flex-shrink: 0;
|
|
|
+ background: #f5f5f5;
|
|
|
+ margin-right: 2%;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ overflow-y: hidden;
|
|
|
.el-tree {
|
|
|
- max-height: calc(100vh - 140px - 54px - 70px);
|
|
|
- overflow-y: scroll;
|
|
|
- padding: 0 30px;
|
|
|
- > .el-tree-node {
|
|
|
- padding: 15px 0;
|
|
|
- border: 1px dashed #ddd;
|
|
|
- margin-bottom: 15px;
|
|
|
- border-radius: 10px;
|
|
|
+ height: 100%;
|
|
|
+ background: none;
|
|
|
+ width: 100%;
|
|
|
+ overflow: scroll;
|
|
|
+ // ::v-deep .el-tree-node:focus > .el-tree-node__content {
|
|
|
+ // color: #ffffff;
|
|
|
+ // background-color: #409EFF;
|
|
|
+ // }
|
|
|
+ ::v-deep > .el-tree-node {
|
|
|
+ display: inline-block;
|
|
|
+ min-width: 100%;
|
|
|
+ }
|
|
|
+ ::v-deep .el-tree-node > .el-tree-node__content {
|
|
|
+ padding-right: 10px;
|
|
|
+ align-self: baseline;
|
|
|
+ }
|
|
|
+ ::v-deep .el-tree-node.is-current > .el-tree-node__content {
|
|
|
+ background-color: #409eff;
|
|
|
+ .custom-tree-node {
|
|
|
+ i {
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+ span {
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ::v-deep .el-tree-node > .el-tree-node__children {
|
|
|
+ overflow: unset;
|
|
|
+ }
|
|
|
+ .custom-tree-node {
|
|
|
+ i {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #999;
|
|
|
+ }
|
|
|
+ span {
|
|
|
+ font-size: 14px;
|
|
|
+ margin-left: 6px;
|
|
|
+ color: #666;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ .mymain-container {
|
|
|
+ width: 80%;
|
|
|
+ margin-top: 0;
|
|
|
+ }
|
|
|
}
|
|
|
-::v-deep .custom-tree-node {
|
|
|
- flex: 1;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: space-between;
|
|
|
- font-size: 14px;
|
|
|
- padding-right: 8px;
|
|
|
+::v-deep .el-divider--vertical {
|
|
|
+ margin: 0 15px;
|
|
|
+}
|
|
|
+.show-pwd {
|
|
|
+ position: absolute;
|
|
|
+ right: 15px;
|
|
|
+ top: 0;
|
|
|
+ font-size: 16px;
|
|
|
+ cursor: pointer;
|
|
|
+ user-select: none;
|
|
|
}
|
|
|
</style>
|