Commit f994bdcc authored by lwy's avatar lwy

机构管理,用户管理

parent 58203947
...@@ -6,16 +6,16 @@ ...@@ -6,16 +6,16 @@
:model="queryParams" :model="queryParams"
:inline="true" :inline="true"
> >
<el-form-item label="部门名称" prop="deptName"> <el-form-item label="" prop="deptName">
<el-input <el-input
v-model="queryParams.deptName" v-model="queryParams.deptName"
placeholder="请输入部门名称" placeholder="请输入搜索关键词"
clearable clearable
style="width: 200px" style="width: 200px"
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <!-- <el-form-item label="状态" prop="status">
<el-select <el-select
v-model="queryParams.status" v-model="queryParams.status"
placeholder="部门状态" placeholder="部门状态"
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>-->
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery" <el-button type="primary" icon="Search" @click="handleQuery"
>搜索</el-button >搜索</el-button
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
v-hasPermi="['system:dept:add']" v-hasPermi="['system:dept:add']"
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
v-model:show-search="showSearch" v-model:show-search="showSearch"
@query-table="getList" @query-table="getList"
></right-toolbar> ></right-toolbar>
</el-row> </el-row>-->
<el-table <el-table
v-if="refreshTable" v-if="refreshTable"
...@@ -70,20 +70,35 @@ ...@@ -70,20 +70,35 @@
> >
<el-table-column <el-table-column
prop="deptName" prop="deptName"
label="部门名称" label="机构名称"
width="260" width="570"
></el-table-column> ></el-table-column>
<el-table-column <!-- <el-table-column
prop="orderNum" prop="orderNum"
label="排序" label="排序"
width="200" width="200"
></el-table-column> ></el-table-column>-->
<el-table-column prop="status" label="状态" width="100"> <!-- <el-table-column prop="status" label="状态" width="100">
<template #default="scope"> <template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" /> <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>-->
<el-table-column <el-table-column
prop="type"
label="机构类型"
width="500"
></el-table-column>
<el-table-column
label="同步时间"
align="center"
prop="updateTime"
width="500"
>
<template #default="scope">
<span>{{ parseTime(scope.row.updateTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column
label="创建时间" label="创建时间"
align="center" align="center"
prop="createTime" prop="createTime"
...@@ -92,8 +107,8 @@ ...@@ -92,8 +107,8 @@
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>-->
<el-table-column <!-- <el-table-column
label="操作" label="操作"
align="center" align="center"
class-name="small-padding fixed-width" class-name="small-padding fixed-width"
...@@ -125,9 +140,16 @@ ...@@ -125,9 +140,16 @@
>删除</el-button >删除</el-button
> >
</template> </template>
</el-table-column> </el-table-column>-->
</el-table> </el-table>
<!-- 分页 -->
<pagination
v-show="total > 0"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
:total="total"
@pagination="getList"
/>
<!-- 添加或修改部门对话框 --> <!-- 添加或修改部门对话框 -->
<el-dialog v-model="open" :title="title" width="600px" append-to-body> <el-dialog v-model="open" :title="title" width="600px" append-to-body>
<el-form ref="deptRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="deptRef" :model="form" :rules="rules" label-width="80px">
...@@ -231,6 +253,7 @@ const open = ref(false) ...@@ -231,6 +253,7 @@ const open = ref(false)
const loading = ref(true) const loading = ref(true)
const showSearch = ref(true) const showSearch = ref(true)
const title = ref('') const title = ref('')
const total = ref(0)
const deptOptions = ref([]) const deptOptions = ref([])
const isExpandAll = ref(true) const isExpandAll = ref(true)
const refreshTable = ref(true) const refreshTable = ref(true)
...@@ -238,6 +261,8 @@ const refreshTable = ref(true) ...@@ -238,6 +261,8 @@ const refreshTable = ref(true)
const data = reactive({ const data = reactive({
form: {}, form: {},
queryParams: { queryParams: {
pageNum: 1,
pageSize: 10,
deptName: undefined, deptName: undefined,
status: undefined, status: undefined,
}, },
...@@ -275,6 +300,7 @@ function getList() { ...@@ -275,6 +300,7 @@ function getList() {
loading.value = true loading.value = true
listDept(queryParams.value).then((response) => { listDept(queryParams.value).then((response) => {
deptList.value = proxy.handleTree(response.data, 'deptId') deptList.value = proxy.handleTree(response.data, 'deptId')
total.value = response.total
loading.value = false loading.value = false
}) })
} }
...@@ -383,3 +409,14 @@ function handleDelete(row) { ...@@ -383,3 +409,14 @@ function handleDelete(row) {
getList() getList()
</script> </script>
<style scoped>
/* 自定义样式优化布局 */
.el-table {
width: 100%; /* 确保表格宽度占满容器 */
}
.el-table-column {
box-sizing: border-box; /* 避免因边框影响实际宽度 */
}
</style>
<template> <template>
<div class="app-container"> <div class="app-container">
<el-row :gutter="20"> <el-col>
<splitpanes <el-form
:horizontal="appStore.device === 'mobile'" v-show="showSearch"
class="default-theme" ref="queryRef"
:model="queryParams"
:inline="true"
label-width="68px"
> >
<!--部门数据--> <el-form-item label="" prop="userType">
<pane size="16"> <el-select
<el-col> v-model="queryParams.userType"
<div class="head-container"> placeholder="用户类型"
<el-input clearable
v-model="deptName" style="width: 240px"
placeholder="请输入部门名称" >
clearable <el-option
prefix-icon="Search" v-for="dict in sys_user_type"
style="margin-bottom: 20px" :key="dict.value"
/> :label="dict.label"
</div> :value="dict.value"
<div class="head-container"> />
<el-tree </el-select>
ref="deptTreeRef" </el-form-item>
:data="deptOptions" <el-form-item label="" prop="deptName">
:props="{ label: 'label', children: 'children' }" <el-input
:expand-on-click-node="false" v-model="queryParams.deptName"
:filter-node-method="filterNode" placeholder="所在机构"
node-key="id" clearable
highlight-current style="width: 240px"
default-expand-all @keyup.enter="handleQuery"
@node-click="handleNodeClick" />
/> </el-form-item>
</div> <el-form-item label="" prop="nickName">
</el-col> <el-input
</pane> v-model="queryParams.nickName"
<!--用户数据--> placeholder="姓名"
<pane size="84"> clearable
<el-col> style="width: 240px"
<el-form @keyup.enter="handleQuery"
v-show="showSearch" />
ref="queryRef" </el-form-item>
:model="queryParams" <!-- 事业部出来再改 -->
:inline="true" <el-form-item label="" prop="divsion">
label-width="68px" <el-input
> v-model="queryParams.divsion"
<el-form-item label="用户名称" prop="userName"> placeholder="事业部"
<el-input clearable
v-model="queryParams.userName" style="width: 240px"
placeholder="请输入用户名称" @keyup.enter="handleQuery"
clearable />
style="width: 240px" </el-form-item>
@keyup.enter="handleQuery" <el-form-item label="" prop="factoryName">
/> <el-input
</el-form-item> v-model="queryParams.factoryName"
<el-form-item label="手机号码" prop="phonenumber"> placeholder="制造工厂"
<el-input clearable
v-model="queryParams.phonenumber" style="width: 240px"
placeholder="请输入手机号码" @keyup.enter="handleQuery"
clearable />
style="width: 240px" </el-form-item>
@keyup.enter="handleQuery" <el-form-item label="" prop="phonenumber">
/> <el-input
</el-form-item> v-model="queryParams.phonenumber"
<el-form-item label="状态" prop="status"> placeholder="联系电话"
<el-select clearable
v-model="queryParams.status" style="width: 240px"
placeholder="用户状态" @keyup.enter="handleQuery"
clearable />
style="width: 240px" </el-form-item>
> <el-form-item label="" prop="status">
<el-option <el-select
v-for="dict in sys_normal_disable" v-model="queryParams.status"
:key="dict.value" placeholder="用户状态"
:label="dict.label" clearable
:value="dict.value" style="width: 240px"
/> >
</el-select> <el-option
</el-form-item> v-for="dict in sys_user_status"
<el-form-item label="创建时间" style="width: 308px"> :key="dict.value"
<el-date-picker :label="dict.label"
v-model="dateRange" :value="dict.value"
value-format="YYYY-MM-DD" />
type="daterange" </el-select>
range-separator="-" </el-form-item>
start-placeholder="开始日期" <el-form-item label="" prop="roleNames">
end-placeholder="结束日期" <el-input
></el-date-picker> v-model="queryParams.roleNames"
</el-form-item> placeholder="系统角色"
<el-form-item> clearable
<el-button type="primary" icon="Search" @click="handleQuery" style="width: 240px"
>搜索</el-button @keyup.enter="handleQuery"
> />
<el-button icon="Refresh" @click="resetQuery">重置</el-button> </el-form-item>
</el-form-item> <el-form-item>
</el-form> <el-button type="primary" icon="Search" @click="handleQuery"
>搜索</el-button
<el-row :gutter="10" class="mb8"> >
<el-col :span="1.5"> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button </el-form-item>
v-hasPermi="['system:user:add']" </el-form>
<el-button
v-hasPermi="['system:user:add']"
style="float: right;margin: 12px 0"
type="primary"
plain
icon="Plus"
@click="handleAdd"
>新建管理员</el-button
>
<el-table
v-loading="loading"
:data="userList"
@selection-change="handleSelectionChange"
>
<!-- <el-table-column type="selection" width="50" align="center" />-->
<el-table-column
v-if="columns[0].visible"
key="userId"
label="序号"
align="center"
prop="userId"
/>
<el-table-column label="用户类型" align="center" prop="userType">
<template #default="scope">
<dict-tag :options="sys_user_type" :value="scope.row.userType" />
</template>
</el-table-column>
<el-table-column
v-if="columns[3].visible"
key="deptName"
label="所在机构"
align="center"
prop="dept.deptName"
:show-overflow-tooltip="true"
/>
<el-table-column
v-if="columns[1].visible"
key="userName"
label="用户名"
align="center"
prop="userName"
:show-overflow-tooltip="true"
/>
<el-table-column
v-if="columns[2].visible"
key="nickName"
label="姓名"
align="center"
prop="nickName"
:show-overflow-tooltip="true"
/>
<el-table-column label="性别" align="center" prop="sex">
<template #default="scope">
<dict-tag :options="sys_user_sex" :value="scope.row.sex" />
</template>
</el-table-column>
<el-table-column
v-if="columns[2].visible"
key="divsion"
label="事业部权限"
align="center"
prop="divsion"
:show-overflow-tooltip="true"
/>
<el-table-column
v-if="columns[2].visible"
key="factoryName"
label="制造工厂权限"
align="center"
prop="factoryName"
:show-overflow-tooltip="true"
/>
<el-table-column
v-if="columns[4].visible"
key="phonenumber"
label="手机号"
align="center"
prop="phonenumber"
width="120"
/>
<el-table-column label="用户状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_user_status" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column
v-if="columns[6].visible"
key="roleNames"
label="系统角色"
align="center"
prop="roleNames"
width="120"
/>
<el-table-column
v-if="columns[7].visible"
label="同步时间"
align="center"
prop="updateTime"
width="160"
>
<template #default="scope">
<span>{{ parseTime(scope.row.updateTime) }}</span>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
width="150"
class-name="small-padding fixed-width"
>
<template #default="scope">
<el-button
v-hasPermi="['system:user:edit']"
link
v-if="scope.row.userId === 1"
type="primary" type="primary"
plain @click="handleUpdate(scope.row)"
icon="Plus" >修改</el-button>
@click="handleAdd" <el-button
>新增</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['system:user:edit']" v-hasPermi="['system:user:edit']"
type="success" link
plain v-if="scope.row.userId !== 1"
icon="Edit" type="primary"
:disabled="single" @click="handleAuthRole(scope.row)"
@click="handleUpdate" >分配角色</el-button>
>修改</el-button <el-button
> link
</el-col> v-if="scope.row.userId !== 1"
<el-col :span="1.5"> type="primary"
<el-button @click="divsionDialog = true"
v-hasPermi="['system:user:remove']" >配置事业部</el-button> <!--v-hasPermi="['system:user:edit']"-->
type="danger" <el-button
plain v-hasPermi="['system:user:edit']"
icon="Delete" link
:disabled="multiple" v-if="scope.row.userId !== 1"
@click="handleDelete" type="primary"
>删除</el-button @click="dialogFactory = true"
> >配置制造工厂</el-button>
</el-col> </template>
<el-col :span="1.5"> </el-table-column>
<el-button </el-table>
v-hasPermi="['system:user:import']" <pagination
type="info" v-show="total > 0"
plain v-model:page="queryParams.pageNum"
icon="Upload" v-model:limit="queryParams.pageSize"
@click="handleImport" :total="total"
>导入</el-button @pagination="getList"
> />
</el-col> </el-col>
<el-col :span="1.5"> <!--事业部 出来再改-->
<el-button <el-dialog v-model="divsionDialog" title="配置事业部" width="600px" append-to-body>
v-hasPermi="['system:user:export']" <el-form ref="userRef" :model="form" label-width="80px">
type="warning" <el-form-item>
plain <el-checkbox-group v-model="selecteDivsions">
icon="Download" <div style="display: flex; flex-wrap: wrap;">
@click="handleExport" <div v-for="(divsion, index) in allDivsions" :key="index" style="width: 33%; margin-bottom: 10px;">
>导出</el-button <el-checkbox :label="divsion">{{ divsion }}</el-checkbox>
> </div>
</el-col> </div>
<right-toolbar </el-checkbox-group>
v-model:show-search="showSearch" </el-form-item>
:columns="columns" </el-form>
@query-table="getList" <template #footer>
></right-toolbar> <span class="dialog-footer">
</el-row> <el-button @click="cancel">取 消</el-button>
<el-button type="primary" @click="submitForm">保 存</el-button>
<el-table </span>
v-loading="loading" </template>
:data="userList" </el-dialog>
@selection-change="handleSelectionChange"
> <!-- 配置制造工厂 -->
<el-table-column type="selection" width="50" align="center" /> <el-dialog v-model="dialogFactory" title="配置制造工厂" width="600px" append-to-body>
<el-table-column <el-form ref="userRef" :model="form" label-width="80px">
v-if="columns[0].visible" <el-form-item label="制造工厂" prop="factoryName">
key="userId" <el-checkbox-group v-model="selectedFactories">
label="用户编号" <div style="display: flex; flex-wrap: wrap;">
align="center" <div v-for="(factory, index) in allFactories" :key="index" style="width: 33%; margin-bottom: 10px;">
prop="userId" <el-checkbox :label="factory">{{ factory }}</el-checkbox>
/> </div>
<el-table-column </div>
v-if="columns[1].visible" </el-checkbox-group>
key="userName" </el-form-item>
label="用户名称" </el-form>
align="center" <template #footer>
prop="userName" <span class="dialog-footer">
:show-overflow-tooltip="true" <el-button @click="cancel">取 消</el-button>
/> <el-button type="primary" @click="submitForm">保 存</el-button>
<el-table-column </span>
v-if="columns[2].visible" </template>
key="nickName" </el-dialog>
label="用户昵称"
align="center"
prop="nickName"
:show-overflow-tooltip="true"
/>
<el-table-column
v-if="columns[3].visible"
key="deptName"
label="部门"
align="center"
prop="dept.deptName"
:show-overflow-tooltip="true"
/>
<el-table-column
v-if="columns[4].visible"
key="phonenumber"
label="手机号码"
align="center"
prop="phonenumber"
width="120"
/>
<el-table-column
v-if="columns[5].visible"
key="status"
label="状态"
align="center"
>
<template #default="scope">
<el-switch
v-model="scope.row.status"
active-value="0"
inactive-value="1"
@change="handleStatusChange(scope.row)"
></el-switch>
</template>
</el-table-column>
<el-table-column
v-if="columns[6].visible"
label="创建时间"
align="center"
prop="createTime"
width="160"
>
<template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
width="150"
class-name="small-padding fixed-width"
>
<template #default="scope">
<el-tooltip
v-if="scope.row.userId !== 1"
content="修改"
placement="top"
>
<el-button
v-hasPermi="['system:user:edit']"
link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
></el-button>
</el-tooltip>
<el-tooltip
v-if="scope.row.userId !== 1"
content="删除"
placement="top"
>
<el-button
v-hasPermi="['system:user:remove']"
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
></el-button>
</el-tooltip>
<el-tooltip
v-if="scope.row.userId !== 1"
content="重置密码"
placement="top"
>
<el-button
v-hasPermi="['system:user:resetPwd']"
link
type="primary"
icon="Key"
@click="handleResetPwd(scope.row)"
></el-button>
</el-tooltip>
<el-tooltip
v-if="scope.row.userId !== 1"
content="分配角色"
placement="top"
>
<el-button
v-hasPermi="['system:user:edit']"
link
type="primary"
icon="CircleCheck"
@click="handleAuthRole(scope.row)"
></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
:total="total"
@pagination="getList"
/>
</el-col>
</pane>
</splitpanes>
</el-row>
<!-- 添加或修改用户配置对话框 --> <!-- 添加或修改用户配置对话框 -->
<el-dialog v-model="open" :title="title" width="600px" append-to-body> <el-dialog v-model="open" :title="title" width="600px" append-to-body>
<el-form ref="userRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="userRef" :model="form" :rules="rules" label-width="80px">
<el-row> <el-form-item label="用户类型">
<el-col :span="12"> <el-select v-model="form.userType" placeholder="请选择" disabled>
<el-form-item label="用户昵称" prop="nickName"> <el-option
v-for="dict in sys_user_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="用户名" prop="userName">
<el-input
v-model="form.userName"
placeholder="请输入用户名"
maxlength="30"
/>
</el-form-item>
<el-form-item label="用户姓名" prop="nickName">
<el-input <el-input
v-model="form.nickName" v-model="form.nickName"
placeholder="请输入用户昵称" placeholder="请输入用户姓名"
maxlength="30" maxlength="30"
/> />
</el-form-item> </el-form-item>
</el-col> <!--事业部数据出来后修改-->
<el-col :span="12"> <el-form-item label="所属事业部" prop="divsion">
<el-form-item label="归属部门" prop="deptId"> <el-input
<el-tree-select v-model="form.divsion"
v-model="form.deptId" placeholder="请输入事业部"
:data="enabledDeptOptions" maxlength="30"/>
:props="{ value: 'id', label: 'label', children: 'children' }"
value-key="id"
placeholder="请选择归属部门"
check-strictly
/>
</el-form-item> </el-form-item>
</el-col> <el-form-item label="联系电话" prop="phonenumber">
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber">
<el-input <el-input
v-model="form.phonenumber" v-model="form.phonenumber"
placeholder="请输入手机号码" placeholder="请输入联系电话"
maxlength="11" maxlength="11"
/> />
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input
v-model="form.email"
placeholder="请输入邮箱"
maxlength="50"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item <el-form-item
v-if="form.userId == undefined" v-if="form.userId == undefined"
label="用户名称" label="用户名称"
...@@ -357,10 +348,7 @@ ...@@ -357,10 +348,7 @@
maxlength="30" maxlength="30"
/> />
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item <el-form-item
v-if="form.userId == undefined"
label="用户密码" label="用户密码"
prop="password" prop="password"
> >
...@@ -372,64 +360,24 @@ ...@@ -372,64 +360,24 @@
show-password show-password
/> />
</el-form-item> </el-form-item>
</el-col> <el-form-item label="系统角色" prop="roleNames">
</el-row> <el-input
<el-row> disabled
<el-col :span="12"> v-model="form.roleNames"
<el-form-item label="用户性别"> placeholder="请输入系统角色"
<el-select v-model="form.sex" placeholder="请选择"> maxlength="30"
<el-option />
v-for="dict in sys_user_sex" </el-form-item>
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态"> <el-form-item label="状态">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio <el-radio
v-for="dict in sys_normal_disable" v-for="dict in sys_user_status"
:key="dict.value" :key="dict.value"
:value="dict.value" :value="dict.value"
>{{ dict.label }}</el-radio >{{ dict.label }}</el-radio
> >
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="岗位">
<el-select v-model="form.postIds" multiple placeholder="请选择">
<el-option
v-for="item in postOptions"
:key="item.postId"
:label="item.postName"
:value="item.postId"
:disabled="item.status == 1"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色">
<el-select v-model="form.roleIds" multiple placeholder="请选择">
<el-option
v-for="item in roleOptions"
:key="item.roleId"
:label="item.roleName"
:value="item.roleId"
:disabled="item.status == 1"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注"> <el-form-item label="备注">
<el-input <el-input
v-model="form.remark" v-model="form.remark"
...@@ -437,8 +385,6 @@ ...@@ -437,8 +385,6 @@
placeholder="请输入内容" placeholder="请输入内容"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
...@@ -516,11 +462,18 @@ import 'splitpanes/dist/splitpanes.css' ...@@ -516,11 +462,18 @@ import 'splitpanes/dist/splitpanes.css'
const router = useRouter() const router = useRouter()
const appStore = useAppStore() const appStore = useAppStore()
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const { sys_normal_disable, sys_user_sex } = proxy.useDict( const { sys_normal_disable, sys_user_sex, sys_user_status, sys_user_type } = proxy.useDict(
'sys_normal_disable', 'sys_normal_disable',
'sys_user_sex', 'sys_user_sex',
'sys_user_status',
'sys_user_type'
) )
const dialogFactory = ref(false)
const divsionDialog = ref(false)
// 选中的工厂列表
const selectedFactories = ref([]);
// 选中的事业部
const selecteDivsions = ref([]);
const userList = ref([]) const userList = ref([])
const open = ref(false) const open = ref(false)
const loading = ref(true) const loading = ref(true)
...@@ -537,6 +490,7 @@ const enabledDeptOptions = ref(undefined) ...@@ -537,6 +490,7 @@ const enabledDeptOptions = ref(undefined)
const initPassword = ref(undefined) const initPassword = ref(undefined)
const postOptions = ref([]) const postOptions = ref([])
const roleOptions = ref([]) const roleOptions = ref([])
/*** 用户导入参数 */ /*** 用户导入参数 */
const upload = reactive({ const upload = reactive({
// 是否显示弹出层(用户导入) // 是否显示弹出层(用户导入)
...@@ -560,7 +514,8 @@ const columns = ref([ ...@@ -560,7 +514,8 @@ const columns = ref([
{ key: 3, label: `部门`, visible: true }, { key: 3, label: `部门`, visible: true },
{ key: 4, label: `手机号码`, visible: true }, { key: 4, label: `手机号码`, visible: true },
{ key: 5, label: `状态`, visible: true }, { key: 5, label: `状态`, visible: true },
{ key: 6, label: `创建时间`, visible: true }, { key: 6, label: `系统角色`, visible: true },
{ key: 7, label: `创建时间`, visible: true },
]) ])
const data = reactive({ const data = reactive({
...@@ -619,6 +574,10 @@ const data = reactive({ ...@@ -619,6 +574,10 @@ const data = reactive({
const { queryParams, form, rules } = toRefs(data) const { queryParams, form, rules } = toRefs(data)
const isEditMode = computed(() => {
return title.value === "编辑";
});
/** 通过条件过滤节点 */ /** 通过条件过滤节点 */
const filterNode = (value, data) => { const filterNode = (value, data) => {
if (!value) return true if (!value) return true
...@@ -630,6 +589,54 @@ watch(deptName, (val) => { ...@@ -630,6 +589,54 @@ watch(deptName, (val) => {
proxy.$refs['deptTreeRef'].filter(val) proxy.$refs['deptTreeRef'].filter(val)
}) })
// 所有可选的事业部
const allDivsions = ref([
'奇瑞', '星途', '智界', '捷途', 'iCAR'
]);
watch(() => form.value.divsion, (newVal) => {
try {
const divsionObj = JSON.parse(newVal || '{}');
selecteDivsions.value = Object.values(factoryObj);
} catch (e) {
selecteDivsions.value = [];
}
}, { immediate: true });
// 监听选中的工厂变化,更新表单数据
watch(selecteDivsions, (newVal) => {
const divsionObj = {};
newVal.forEach((item, index) => {
divsionObj[index] = item;
});
form.value.divsion = JSON.stringify(divsionObj);
}, { deep: true });
// 所有可选的工厂列表
const allFactories = ref([
'整车二工厂', '整车三工厂', '整车四工厂',
'智造一工厂', '智造二工厂', '大连工厂',
'青岛工厂', '鄂尔多斯工厂', '开封工厂',
'城南工厂', '城北工厂', '齐河工厂',
'石家庄工厂'
]);
watch(() => form.value.factoryName, (newVal) => {
try {
const factoryObj = JSON.parse(newVal || '{}');
selectedFactories.value = Object.values(factoryObj);
} catch (e) {
selectedFactories.value = [];
}
}, { immediate: true });
// 监听选中的工厂变化,更新表单数据
watch(selectedFactories, (newVal) => {
const factoryObj = {};
newVal.forEach((item, index) => {
factoryObj[index] = item;
});
form.value.factoryName = JSON.stringify(factoryObj);
}, { deep: true });
/** 查询用户列表 */ /** 查询用户列表 */
function getList() { function getList() {
loading.value = true loading.value = true
...@@ -681,8 +688,9 @@ function handleQuery() { ...@@ -681,8 +688,9 @@ function handleQuery() {
function resetQuery() { function resetQuery() {
dateRange.value = [] dateRange.value = []
proxy.resetForm('queryRef') proxy.resetForm('queryRef')
queryParams.value.status = undefined; // 显式清除状态字段
queryParams.value.deptId = undefined queryParams.value.deptId = undefined
proxy.$refs.deptTreeRef.setCurrentKey(null) // proxy.$refs.deptTreeRef.setCurrentKey(null)
handleQuery() handleQuery()
} }
...@@ -829,7 +837,9 @@ function reset() { ...@@ -829,7 +837,9 @@ function reset() {
phonenumber: undefined, phonenumber: undefined,
email: undefined, email: undefined,
sex: undefined, sex: undefined,
roleNames: '超级管理员',
status: '0', status: '0',
userType: '00',
remark: undefined, remark: undefined,
postIds: [], postIds: [],
roleIds: [], roleIds: [],
...@@ -839,6 +849,8 @@ function reset() { ...@@ -839,6 +849,8 @@ function reset() {
/** 取消按钮 */ /** 取消按钮 */
function cancel() { function cancel() {
dialogFactory.value = false
divsionDialog.value = false
open.value = false open.value = false
reset() reset()
} }
...@@ -865,6 +877,12 @@ function handleUpdate(row) { ...@@ -865,6 +877,12 @@ function handleUpdate(row) {
roleOptions.value = response.roles roleOptions.value = response.roles
form.value.postIds = response.postIds form.value.postIds = response.postIds
form.value.roleIds = response.roleIds form.value.roleIds = response.roleIds
// 根据 roleIds 生成 roleNames
const roleNames = roleOptions.value
.filter(role => form.value.roleIds.includes(role.roleId))
.map(role => role.roleName)
.join(', ');
form.value.roleNames = roleNames; // 赋值到表单
open.value = true open.value = true
title.value = '修改用户' title.value = '修改用户'
form.password = '' form.password = ''
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment