更新后端传tenantid

This commit is contained in:
扫地僧 2026-02-26 23:43:02 +08:00
parent f8437d15b4
commit 07d3614d9c
4 changed files with 107 additions and 31 deletions

View File

@ -5,6 +5,9 @@ import { onMounted } from 'vue';
// 使用 auth store 获取用户信息 // 使用 auth store 获取用户信息
const authStore = useAuthStore(); const authStore = useAuthStore();
// 获取租户ID
const tenantId = (authStore.user as any)?.tenant_id;
// 获取用户信息 // 获取用户信息
const userInfo = authStore.user; const userInfo = authStore.user;
if (userInfo && userInfo.id) { if (userInfo && userInfo.id) {

View File

@ -64,18 +64,44 @@ export function deleteOrganization(id) {
}); });
} }
/**
* 获取企业单位列表
* @returns {Promise}
*/
export function getCompanys() {
return request({
url: '/admin/erp/getCompanys',
method: 'get'
});
}
/**
* 获取部门列表
* @param {number} parentId 隶属单位ID
* @returns {Promise}
*/
export function getDepartments(parentId) {
return request({
url: '/admin/erp/getDepartments',
method: 'get',
params: parentId ? { parent_id: parentId } : {}
});
}
/************************************************* /*************************************************
****************** 员工相关接口 ****************** ****************** 员工相关接口 ******************
*************************************************/ *************************************************/
/** /**
* 获取员工列表 * 获取员工列表
* @param {number} tenantId 租户ID
* @returns {Promise} * @returns {Promise}
*/ */
export function getEmployeeList() { export function getEmployeeList(tenantId) {
return request({ return request({
url: '/admin/erp/getEmployee', url: '/admin/erp/getEmployee',
method: 'get' method: 'get',
params: { tenant_id: tenantId }
}); });
} }

View File

@ -3,12 +3,12 @@
<el-form :model="form" :rules="rules" ref="formRef" label-width="100px"> <el-form :model="form" :rules="rules" ref="formRef" label-width="100px">
<div class="form-title">账号信息</div> <div class="form-title">账号信息</div>
<!-- 账号 --> <!-- 账号 -->
<el-form-item label="账号"> <el-form-item label="账号" required>
<el-input v-model="form.account" :disabled="!isAdd" placeholder="请输入账号" /> <el-input v-model="form.account" :disabled="!isAdd" placeholder="请输入账号" />
</el-form-item> </el-form-item>
<!-- 密码 --> <!-- 密码 -->
<el-form-item label="密码" prop="password" v-if="isAdd"> <el-form-item label="密码" prop="password" v-if="isAdd" required>
<el-input <el-input
v-model="form.password" v-model="form.password"
type="password" type="password"
@ -19,7 +19,7 @@
</el-form-item> </el-form-item>
<!-- 确认密码 --> <!-- 确认密码 -->
<el-form-item label="确认密码" prop="confirmPassword" v-if="isAdd"> <el-form-item label="确认密码" prop="confirmPassword" v-if="isAdd" required>
<el-input <el-input
v-model="form.confirmPassword" v-model="form.confirmPassword"
type="password" type="password"
@ -33,12 +33,12 @@
<div class="form-title">个人信息</div> <div class="form-title">个人信息</div>
<!-- 姓名 --> <!-- 姓名 -->
<el-form-item label="姓名"> <el-form-item label="姓名" required>
<el-input v-model="form.name" placeholder="请输入姓名" /> <el-input v-model="form.name" placeholder="请输入姓名" />
</el-form-item> </el-form-item>
<!-- 性别 --> <!-- 性别 -->
<el-form-item label="性别"> <el-form-item label="性别" required>
<el-radio-group v-model="form.sex" placeholder="请选择性别"> <el-radio-group v-model="form.sex" placeholder="请选择性别">
<el-radio-button label="男" :value="1" /> <el-radio-button label="男" :value="1" />
<el-radio-button label="女" :value="2" /> <el-radio-button label="女" :value="2" />
@ -46,7 +46,7 @@
</el-form-item> </el-form-item>
<!-- 生日 --> <!-- 生日 -->
<el-form-item label="生日"> <el-form-item label="生日" required>
<el-date-picker <el-date-picker
v-model="form.birthday" v-model="form.birthday"
type="date" type="date"
@ -55,17 +55,21 @@
</el-form-item> </el-form-item>
<!-- 隶属单位 --> <!-- 隶属单位 -->
<el-form-item label="隶属单位"> <el-form-item label="隶属单位" required>
<el-input v-model="form.affiliate_unit" placeholder="请输入隶属单位" /> <el-select v-model="form.affiliate_unit" placeholder="请选择隶属单位" clearable style="width: 100%">
<el-option v-for="item in companyList" :key="item.id" :label="item.org_name" :value="item.id" />
</el-select>
</el-form-item> </el-form-item>
<!-- 部门 --> <!-- 部门 -->
<el-form-item label="部门"> <el-form-item label="部门" required>
<el-input v-model="form.department" placeholder="请输入部门" /> <el-select v-model="form.department" placeholder="请先选择隶属单位" clearable style="width: 100%" :disabled="!form.affiliate_unit">
<el-option v-for="item in departmentList" :key="item.id" :label="item.org_name" :value="item.id" />
</el-select>
</el-form-item> </el-form-item>
<!-- 职位 --> <!-- 职位 -->
<el-form-item label="职位"> <el-form-item label="职位" required>
<el-input v-model="form.position" placeholder="请输入职位" /> <el-input v-model="form.position" placeholder="请输入职位" />
</el-form-item> </el-form-item>
@ -75,12 +79,12 @@
</el-form-item> </el-form-item>
<!-- 民族 --> <!-- 民族 -->
<el-form-item label="民族"> <el-form-item label="民族" required>
<el-input v-model="form.nationality" placeholder="请输入民族" /> <el-input v-model="form.nationality" placeholder="请输入民族" />
</el-form-item> </el-form-item>
<!-- 手机 --> <!-- 手机 -->
<el-form-item label="手机"> <el-form-item label="手机" required>
<el-input v-model="form.phone" placeholder="请输入手机号" /> <el-input v-model="form.phone" placeholder="请输入手机号" />
</el-form-item> </el-form-item>
@ -90,12 +94,12 @@
</el-form-item> </el-form-item>
<!-- 邮箱 --> <!-- 邮箱 -->
<el-form-item label="邮箱"> <el-form-item label="邮箱" required>
<el-input v-model="form.email" placeholder="请输入邮箱" /> <el-input v-model="form.email" placeholder="请输入邮箱" />
</el-form-item> </el-form-item>
<!-- 家庭住址 --> <!-- 家庭住址 -->
<el-form-item label="家庭住址"> <el-form-item label="家庭住址" required>
<el-input v-model="form.home_address" placeholder="请输入家庭住址" /> <el-input v-model="form.home_address" placeholder="请输入家庭住址" />
</el-form-item> </el-form-item>
@ -122,10 +126,10 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, watch } from "vue"; import { ref, computed, watch } from "vue";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { createEmployee, editEmployee, getEmployeeDetail } from "@/api/erp"; import { createEmployee, editEmployee, getEmployeeDetail, getCompanys, getDepartments } from "@/api/erp";
const props = defineProps({ const props = defineProps({
modelValue: { modelValue: {
type: Boolean, type: Boolean,
@ -142,11 +146,34 @@
}); });
const emit = defineEmits(["update:modelValue", "submit", "close"]); const emit = defineEmits(["update:modelValue", "submit", "close"]);
const visible = ref(false); const visible = ref(false);
const formRef = ref<any>(null); const formRef = ref<any>(null);
const isAdd = ref(false); const isAdd = ref(false);
const companyList = ref<any[]>([]);
const departmentList = ref<any[]>([]);
//
const loadCompanyList = async () => {
try {
const res = await getCompanys();
companyList.value = res.data || res || [];
} catch (e) {
console.error("获取公司列表失败", e);
}
};
//
const loadDepartments = async (parentId?: number) => {
try {
const res = await getDepartments(parentId);
departmentList.value = res.data || res || [];
} catch (e) {
console.error("获取部门列表失败", e);
}
};
const form = ref<any>({ const form = ref<any>({
id: null, id: null,
account: "", account: "",
@ -158,8 +185,19 @@
confirmPassword: "", confirmPassword: "",
email: "", email: "",
status: 1, status: 1,
affiliate_unit: "",
department: "",
}); });
//
watch(() => form.value.affiliate_unit, (newVal) => {
form.value.department = "";
departmentList.value = [];
if (newVal) {
loadDepartments(newVal);
}
});
const dialogTitle = computed(() => { const dialogTitle = computed(() => {
return isAdd.value ? "添加用户" : "编辑用户"; return isAdd.value ? "添加用户" : "编辑用户";
}); });
@ -341,7 +379,7 @@
status: form.value.status, status: form.value.status,
password: form.value.password, password: form.value.password,
}; };
await createEmployee(submitData); await createEmployee(submitData);
ElMessage.success("添加成功"); ElMessage.success("添加成功");
} else { } else {
@ -350,7 +388,7 @@
ElMessage.error("用户ID不能为空"); ElMessage.error("用户ID不能为空");
return; return;
} }
const submitData: any = { const submitData: any = {
id: form.value.id, id: form.value.id,
account: form.value.account, account: form.value.account,
@ -396,6 +434,7 @@
email: "", email: "",
status: 1, status: 1,
}; };
loadCompanyList();
visible.value = true; visible.value = true;
// //
if (formRef.value) { if (formRef.value) {
@ -404,6 +443,7 @@
}, },
openEdit: (user: any) => { openEdit: (user: any) => {
isAdd.value = false; isAdd.value = false;
loadCompanyList();
visible.value = true; visible.value = true;
// //
if (formRef.value) { if (formRef.value) {
@ -413,6 +453,7 @@
loadUserData(user); loadUserData(user);
}, },
open: (user?: any) => { open: (user?: any) => {
loadCompanyList();
if (user) { if (user) {
isAdd.value = false; isAdd.value = false;
loadUserData(user); loadUserData(user);

View File

@ -69,6 +69,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
import { Plus, Refresh } from "@element-plus/icons-vue"; import { Plus, Refresh } from "@element-plus/icons-vue";
import { getEmployeeList, deleteEmployee } from "@/api/erp"; import { getEmployeeList, deleteEmployee } from "@/api/erp";
import Edit from "./components/edit.vue"; import Edit from "./components/edit.vue";
import { useAuthStore } from "@/stores/auth";
const users = ref<any[]>([]); const users = ref<any[]>([]);
const loading = ref(false); const loading = ref(false);
@ -77,11 +78,16 @@ const pageSize = ref(10);
const total = ref(0); const total = ref(0);
const editRef = ref<any>(null); const editRef = ref<any>(null);
const authStore = useAuthStore();
const tenantId = (authStore.user as any)?.tenant_id;
// console.log(tenantId);
// //
const fetchData = async () => { const fetchData = async (tenantId: number) => {
loading.value = true; loading.value = true;
try { try {
const res = await getEmployeeList(); const res = await getEmployeeList(tenantId);
users.value = res.data || res || []; users.value = res.data || res || [];
total.value = users.value.length; total.value = users.value.length;
} catch (e: any) { } catch (e: any) {
@ -93,7 +99,7 @@ const fetchData = async () => {
// //
const refresh = () => { const refresh = () => {
fetchData(); fetchData(tenantId);
}; };
// //
@ -119,7 +125,7 @@ const handleDelete = async (row: any) => {
}); });
await deleteEmployee(row.id); await deleteEmployee(row.id);
ElMessage.success("删除成功"); ElMessage.success("删除成功");
fetchData(); fetchData(tenantId);
} catch (e: any) { } catch (e: any) {
if (e !== "cancel") { if (e !== "cancel") {
ElMessage.error(e?.message || "删除失败"); ElMessage.error(e?.message || "删除失败");
@ -130,11 +136,11 @@ const handleDelete = async (row: any) => {
// //
const handlePageChange = (val: number) => { const handlePageChange = (val: number) => {
page.value = val; page.value = val;
fetchData(); fetchData(tenantId);
}; };
onMounted(() => { onMounted(() => {
fetchData(); fetchData(tenantId);
}); });
</script> </script>