From 3c580c86f68e8c1043288e5e0cc92dc6434cb143 Mon Sep 17 00:00:00 2001 From: BianLzhaoMin <11485688+bianliangzhaomin123@user.noreply.gitee.com> Date: Tue, 18 Nov 2025 18:01:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.production | 2 +- src/store/getters.js | 34 +- src/store/modules/user.js | 326 ++++++++++-------- .../project-manage/all-project/config.js | 1 + .../project-manage/all-project/index.vue | 59 +++- .../project-manage/dept-project/index.vue | 19 +- .../sub-base-info/add-or-edit-form.vue | 68 +++- .../sub-manage/sub-base-info/index.vue | 2 + .../person-entry/index.vue | 3 + 9 files changed, 346 insertions(+), 168 deletions(-) diff --git a/.env.production b/.env.production index e597bc9..be62ffb 100644 --- a/.env.production +++ b/.env.production @@ -4,7 +4,7 @@ VUE_APP_TITLE = 实名制管理系统 # 生产环境配置 ENV = 'production' VUE_APP_ENV = 'production' -VUE_APP_SHOW_PARAMETER = true +VUE_APP_SHOW_PARAMETER = false # 实名制管理系统/生产环境 VUE_APP_BASE_API = '/hd-real-name' diff --git a/src/store/getters.js b/src/store/getters.js index 137c80d..027d40d 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -1,19 +1,21 @@ const getters = { - sidebar: state => state.app.sidebar, - size: state => state.app.size, - device: state => state.app.device, - dict: state => state.dict.dict, - visitedViews: state => state.tagsView.visitedViews, - cachedViews: state => state.tagsView.cachedViews, - token: state => state.user.token, - avatar: state => state.user.avatar, - name: state => state.user.name, - introduction: state => state.user.introduction, - roles: state => state.user.roles, - permissions: state => state.user.permissions, - permission_routes: state => state.permission.routes, - topbarRouters: state => state.permission.topbarRouters, - defaultRoutes: state => state.permission.defaultRoutes, - sidebarRouters: state => state.permission.sidebarRouters + sidebar: (state) => state.app.sidebar, + size: (state) => state.app.size, + device: (state) => state.app.device, + dict: (state) => state.dict.dict, + visitedViews: (state) => state.tagsView.visitedViews, + cachedViews: (state) => state.tagsView.cachedViews, + token: (state) => state.user.token, + avatar: (state) => state.user.avatar, + name: (state) => state.user.name, + introduction: (state) => state.user.introduction, + roles: (state) => state.user.roles, + permissions: (state) => state.user.permissions, + permission_routes: (state) => state.permission.routes, + topbarRouters: (state) => state.permission.topbarRouters, + defaultRoutes: (state) => state.permission.defaultRoutes, + sidebarRouters: (state) => state.permission.sidebarRouters, + companyId: (state) => state.user.companyId, + companyLevel: (state) => state.user.companyLevel, } export default getters diff --git a/src/store/modules/user.js b/src/store/modules/user.js index b660b65..e2ec96c 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -1,4 +1,12 @@ -import { login, logout, getInfo, refreshToken, getPhoneCode, isLogin,isAdmin} from '@/api/login' +import { + login, + logout, + getInfo, + refreshToken, + getPhoneCode, + isLogin, + isAdmin, +} from '@/api/login' import { getToken, setToken, setExpiresIn, removeToken } from '@/utils/auth' // 更严格的手机号和邮箱正则表达式 @@ -6,157 +14,195 @@ const phonePattern = /^(\+86)?1[3-9]\d{9}$/ // 支持前缀 +86 const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ // 构建 payload 函数 -const buildPayload = ({ loginMethod, username, password, uuid, code, mobile, verificationCode,phoneUuid }) => { - let loginType = '' - if (loginMethod === 'mobile') { - loginType = phonePattern.test(mobile.trim()) ? 'PHONE_OTP' : emailPattern.test(mobile.trim()) ? 'EMAIL_OTP' : 'PHONE_OTP' - return { - username: mobile.trim(), - verificationCode, - uuid, - code, - loginType, - phoneUuid +const buildPayload = ({ + loginMethod, + username, + password, + uuid, + code, + mobile, + verificationCode, + phoneUuid, +}) => { + let loginType = '' + if (loginMethod === 'mobile') { + loginType = phonePattern.test(mobile.trim()) + ? 'PHONE_OTP' + : emailPattern.test(mobile.trim()) + ? 'EMAIL_OTP' + : 'PHONE_OTP' + return { + username: mobile.trim(), + verificationCode, + uuid, + code, + loginType, + phoneUuid, + } + } else { + loginType = phonePattern.test(username.trim()) + ? 'PHONE_PASSWORD' + : emailPattern.test(username.trim()) + ? 'EMAIL_PASSWORD' + : 'USERNAME_PASSWORD' + return { + username: username.trim(), + password, + verificationCode, + uuid, + code, + loginType, + phoneUuid, + } } - } else { - loginType = phonePattern.test(username.trim()) ? 'PHONE_PASSWORD' : emailPattern.test(username.trim()) ? 'EMAIL_PASSWORD' : 'USERNAME_PASSWORD' - return { - username: username.trim(), - password, - verificationCode, - uuid, - code, - loginType, - phoneUuid - } - } } const user = { - state: { - token: getToken(), - id: '', - name: '', - avatar: '', - roles: [], - permissions: [] - }, - - mutations: { - SET_TOKEN(state, token) { - state.token = token - }, - SET_EXPIRES_IN(state, time) { - state.expires_in = time - }, - SET_ID(state, id) { - state.id = id - }, - SET_NAME(state, name) { - state.name = name - }, - SET_AVATAR(state, avatar) { - state.avatar = avatar - }, - SET_ROLES(state, roles) { - state.roles = roles - }, - SET_PERMISSIONS(state, permissions) { - state.permissions = permissions - } - }, - - actions: { - IsLogin({ commit }, userInfo) { - const payload = buildPayload(userInfo) - return isLogin(payload) - .then(res => res) - .catch(error => Promise.reject(error)) - }, - IsAdmin({ commit }, userInfo) { - const payload = buildPayload(userInfo) - return isAdmin(payload) - .then(res => res) - .catch(error => Promise.reject(error)) + state: { + token: getToken(), + id: '', + name: '', + avatar: '', + roles: [], + permissions: [], + companyId: '', + companyLevel: '', }, - // 登录 - Login({ commit }, userInfo) { - const payload = buildPayload(userInfo) - return login(payload) - .then(res => { - const { access_token, expires_in } = res.data - setToken(access_token) - commit('SET_TOKEN', access_token) - setExpiresIn(expires_in) - commit('SET_EXPIRES_IN', expires_in) - return res; - }) - .catch(error => Promise.reject(error)) + mutations: { + SET_TOKEN(state, token) { + state.token = token + }, + SET_EXPIRES_IN(state, time) { + state.expires_in = time + }, + SET_ID(state, id) { + state.id = id + }, + SET_NAME(state, name) { + state.name = name + }, + SET_AVATAR(state, avatar) { + state.avatar = avatar + }, + SET_ROLES(state, roles) { + state.roles = roles + }, + SET_PERMISSIONS(state, permissions) { + state.permissions = permissions + }, + + SET_COMPANY_ID(state, companyId) { + state.companyId = companyId + }, + SET_COMPANY_LEVEL(state, companyLevel) { + state.companyLevel = companyLevel + }, }, - // 获取手机验证码 - GetPhoneCode({ commit }, userInfo) { - const payload = { - username: userInfo.mobile.trim(), - uuid: userInfo.uuid, - code: userInfo.code, - phoneUuid: userInfo.phoneUuid, - verificationCodeType: userInfo.mobileCodeType - } - return getPhoneCode(payload) - .then(res => res) - .catch(error => Promise.reject(error)) - }, + actions: { + IsLogin({ commit }, userInfo) { + const payload = buildPayload(userInfo) + return isLogin(payload) + .then((res) => res) + .catch((error) => Promise.reject(error)) + }, + IsAdmin({ commit }, userInfo) { + const payload = buildPayload(userInfo) + return isAdmin(payload) + .then((res) => res) + .catch((error) => Promise.reject(error)) + }, - // 获取用户信息 - GetInfo({ commit }) { - return getInfo() - .then(res => { - const user = res.user - const avatar = user.avatar ? user.avatar : require('@/assets/images/profile.jpg') - commit('SET_ROLES', res.roles && res.roles.length > 0 ? res.roles : ['ROLE_DEFAULT']) - commit('SET_PERMISSIONS', res.permissions) - commit('SET_ID', user.userId) - commit('SET_NAME', user.userName) - commit('SET_AVATAR', avatar) - return res - }) - .catch(error => Promise.reject(error)) - }, + // 登录 + Login({ commit }, userInfo) { + const payload = buildPayload(userInfo) + return login(payload) + .then((res) => { + const { access_token, expires_in } = res.data + setToken(access_token) + commit('SET_TOKEN', access_token) + setExpiresIn(expires_in) + commit('SET_EXPIRES_IN', expires_in) + return res + }) + .catch((error) => Promise.reject(error)) + }, - // 刷新 token - RefreshToken({ commit, state }) { - return refreshToken(state.token) - .then(res => { - const expiresIn = res.data - setExpiresIn(expiresIn) - commit('SET_EXPIRES_IN', expiresIn) - }) - .catch(error => Promise.reject(error)) - }, + // 获取手机验证码 + GetPhoneCode({ commit }, userInfo) { + const payload = { + username: userInfo.mobile.trim(), + uuid: userInfo.uuid, + code: userInfo.code, + phoneUuid: userInfo.phoneUuid, + verificationCodeType: userInfo.mobileCodeType, + } + return getPhoneCode(payload) + .then((res) => res) + .catch((error) => Promise.reject(error)) + }, - // 退出登录 - LogOut({ commit, state }) { - return logout(state.token) - .then(() => { - commit('SET_TOKEN', '') - commit('SET_ROLES', []) - commit('SET_PERMISSIONS', []) - removeToken() - }) - .catch(error => Promise.reject(error)) - }, + // 获取用户信息 + GetInfo({ commit }) { + return getInfo() + .then((res) => { + const user = res.user + const avatar = user.avatar + ? user.avatar + : require('@/assets/images/profile.jpg') + commit( + 'SET_ROLES', + res.roles && res.roles.length > 0 + ? res.roles + : ['ROLE_DEFAULT'], + ) + commit('SET_PERMISSIONS', res.permissions) + commit('SET_ID', user.userId) + commit('SET_NAME', user.userName) + commit('SET_AVATAR', avatar) - // 前端退出 - FedLogOut({ commit }) { - return new Promise(resolve => { - commit('SET_TOKEN', '') - removeToken() - resolve() - }) - } - } + // 存储用户的公司id 和公司级别 + commit('SET_COMPANY_ID', user.bandId) + commit('SET_COMPANY_LEVEL', user.roleLevel) + + return res + }) + .catch((error) => Promise.reject(error)) + }, + + // 刷新 token + RefreshToken({ commit, state }) { + return refreshToken(state.token) + .then((res) => { + const expiresIn = res.data + setExpiresIn(expiresIn) + commit('SET_EXPIRES_IN', expiresIn) + }) + .catch((error) => Promise.reject(error)) + }, + + // 退出登录 + LogOut({ commit, state }) { + return logout(state.token) + .then(() => { + commit('SET_TOKEN', '') + commit('SET_ROLES', []) + commit('SET_PERMISSIONS', []) + removeToken() + }) + .catch((error) => Promise.reject(error)) + }, + + // 前端退出 + FedLogOut({ commit }) { + return new Promise((resolve) => { + commit('SET_TOKEN', '') + removeToken() + resolve() + }) + }, + }, } export default user diff --git a/src/views/basic-manage/project-manage/all-project/config.js b/src/views/basic-manage/project-manage/all-project/config.js index dfa5720..8b7acb0 100644 --- a/src/views/basic-manage/project-manage/all-project/config.js +++ b/src/views/basic-manage/project-manage/all-project/config.js @@ -8,6 +8,7 @@ export const formLabel = [ ] export const columnsList = [ + { t_props: 'subComName', t_label: '所属分公司' }, { t_props: 'mainProName', t_label: '总工程名称' }, { t_props: 'volLevel', t_label: '电压等级' }, diff --git a/src/views/basic-manage/project-manage/all-project/index.vue b/src/views/basic-manage/project-manage/all-project/index.vue index 853e139..9672fc4 100644 --- a/src/views/basic-manage/project-manage/all-project/index.vue +++ b/src/views/basic-manage/project-manage/all-project/index.vue @@ -94,6 +94,23 @@ :model="addOrEditForm" :rules="addOrEditFormRules" > + + + + + import TableModel from '@/components/TableModel' import DialogModel from '@/components/DialogModel' + import { formLabel, columnsList, dialogConfig } from './config' import { addAndEditAllProjectAPI, deleteAllProjectAPI, getAllProjectListAPI, } from '@/api/basic-manage/project-manage/all-project' +import { getSubCompanySelectListCommonFun } from '@/utils/getCommonData' export default { name: 'All-project', dicts: ['voltage_level', 'project_type', 'project_status'], @@ -215,16 +234,25 @@ export default { columnsList, dialogConfig, getAllProjectListAPI, + subIsDisabled: false, // 所属分公司是否禁用 lotProjectList: [], // 子项目(标段工程)概况 - + branchCompanyOptions: [], // 分公司下拉列表 // 新增或修改表单 addOrEditForm: { + subComId: '', // 所属分公司id id: '', // 主键id volLevel: '', // 电压等级 mainProName: '', // 总工程名称 }, // 新增或修改表单验证 addOrEditFormRules: { + subComId: [ + { + required: true, + trigger: 'change', + message: '请选择所属分公司', + }, + ], mainProName: [ { required: true, @@ -247,6 +275,11 @@ export default { } }, + async created() { + // 获取分公司下拉列表 + this.branchCompanyOptions = await getSubCompanySelectListCommonFun() // 获取所属分公司列表 + }, + methods: { // 导出按钮 onHandleExportAllProject(queryParams) { @@ -261,14 +294,16 @@ export default { // 新增或修改 onHandleAddOrEditAllProject(type, data) { + this.getCurrentCompanyIdAndLevel() // 获取当前用户的公司id和公司级别 this.dialogConfig.outerTitle = type === 1 ? '新增总工程' : '修改总工程' if (type === 2) { - const { mainProName, volLevel, id } = data + const { mainProName, volLevel, id, subComId } = data this.addOrEditForm = { id, volLevel, + subComId: subComId === null ? '' : subComId * 1, mainProName, } } @@ -377,6 +412,26 @@ export default { return status || '' }, + + // 选择项目部 + onHandleSelectOrgId(node) { + this.addOrEditForm.subComId = node.parentId + // this.addOrEditForm.orgId = node.id + }, + + // 获取当前用户的公司id和公司级别 + getCurrentCompanyIdAndLevel() { + // 获取当前用户的公司id + const companyId = this.$store.getters.companyId + // 获取当前用户的公司级别 + const companyLevel = this.$store.getters.companyLevel + + if (companyLevel === '分公司级') { + this.addOrEditForm.subComId = companyId * 1 + } + + this.subIsDisabled = companyLevel === '分公司级' + }, }, } diff --git a/src/views/basic-manage/project-manage/dept-project/index.vue b/src/views/basic-manage/project-manage/dept-project/index.vue index c880aab..364c57e 100644 --- a/src/views/basic-manage/project-manage/dept-project/index.vue +++ b/src/views/basic-manage/project-manage/dept-project/index.vue @@ -102,7 +102,8 @@ placeholder="请选择所属分公司" v-model="addOrEditForm.subComId" :disabled=" - dialogConfig.outerTitle === '修改项目部' + dialogConfig.outerTitle === '修改项目部' || + subIsDisabled " > + + + + + + + + @@ -44,6 +64,8 @@ /> + + - - + - + - + import UploadImgFormData from '@/components/UploadImgFormData' import { addAndEditSubBaseInfoAPI } from '@/api/basic-manage/sub-manage/sub-base-info' +import { getSubCompanySelectListCommonFun } from '@/utils/getCommonData' export default { name: 'AddOrEditForm', components: { @@ -144,6 +163,8 @@ export default { }, data() { return { + subIsDisabled: false, // 所属分公司是否禁用 + branchCompanyOptions: [], // 分公司下拉列表 editUploadFileList: [], // 修改时已上传的文件列表 addOrEditForm: { id: null, // 主键id @@ -151,6 +172,7 @@ export default { subAddress: '', // 营业住址 legalPerson: '', // 法定代表人 legalPersonPhone: '', // 联系电话 + subComId: '', // 所属分公司id idCard: [], // 身份证正反面 businessLicense: [], // 营业执照 @@ -174,6 +196,14 @@ export default { }, ], + subComId: [ + { + required: true, + trigger: 'change', + message: '请选择所属分公司', + }, + ], + legalPersonPhone: [ { trigger: 'blur', @@ -213,6 +243,10 @@ export default { }, } }, + async created() { + this.branchCompanyOptions = await getSubCompanySelectListCommonFun() // 获取所属分公司列表 + this.getCurrentCompanyIdAndLevel() // 获取当前用户的公司id和公司级别 + }, methods: { // 确定按钮 onHandleConfirmAddOrEditFun() { @@ -224,6 +258,7 @@ export default { id, idCard, subName, + subComId, subAddress, legalPerson, businessLicense, @@ -247,6 +282,7 @@ export default { subAddress, legalPerson, legalPersonPhone, + subComId, } businessLicense.forEach((item) => { @@ -336,6 +372,20 @@ export default { resetForm() { this.$refs.addOrEditFormRef.resetFields() }, + + // 获取当前用户的公司id和公司级别 + getCurrentCompanyIdAndLevel() { + // 获取当前用户的公司id + const companyId = this.$store.getters.companyId + // 获取当前用户的公司级别 + const companyLevel = this.$store.getters.companyLevel + + if (companyLevel === '分公司级') { + this.addOrEditForm.subComId = companyId * 1 + } + + this.subIsDisabled = companyLevel === '分公司级' + }, }, watch: { @@ -349,9 +399,10 @@ export default { legalPerson, contractFile, legalPersonPhone, + subComId, } = newVal - if (contractFile.length > 0) { + if (contractFile && contractFile.length > 0) { this.editUploadFileList = contractFile // 所有文件 // 营业执照 @@ -404,6 +455,7 @@ export default { subName, subAddress, legalPerson, + subComId, legalPersonPhone, }) } diff --git a/src/views/basic-manage/sub-manage/sub-base-info/index.vue b/src/views/basic-manage/sub-manage/sub-base-info/index.vue index 1ae0a84..e904a75 100644 --- a/src/views/basic-manage/sub-manage/sub-base-info/index.vue +++ b/src/views/basic-manage/sub-manage/sub-base-info/index.vue @@ -170,6 +170,8 @@ export default { if (type === 2) { Object.assign(this.editFormData, data) + this.editFormData.subComId = + data.subComId === null ? '' : data.subComId * 1 } else { this.editFormData = {} } diff --git a/src/views/construction-person/entry-and-exit-manage/person-entry/index.vue b/src/views/construction-person/entry-and-exit-manage/person-entry/index.vue index 4efa215..cb8d90d 100644 --- a/src/views/construction-person/entry-and-exit-manage/person-entry/index.vue +++ b/src/views/construction-person/entry-and-exit-manage/person-entry/index.vue @@ -6,6 +6,9 @@ :showOperation="true" :showRightTools="true" ref="personEntryTableRef" + :sendParams="{ + einStatus: '1', + }" :columnsList="columnsList" :request-api="getEntryPersonListAPI" >