Browse Source

修改文件

ZaiZai 9 months ago
parent
commit
2fa3b7586f

+ 7 - 0
src/api/modules/system/role.js

@@ -23,6 +23,13 @@ export default {
             data: form,
         })
     },
+    async treeTow() {
+        return HcApi({
+            url: '/api/blade-system/role/treeTow',
+            method: 'get',
+            params: {},
+        })
+    },
     async del(ids) {
         return HcApi({
             url: '/api/blade-system/param/remove',

+ 23 - 2
src/api/modules/system/user.js

@@ -110,11 +110,32 @@ export default {
             params: form,
         })
     },
-    async removeUserProjectInfoAndRoleById(form) {
+    async getProjectContractList(userId) {
+        return HcApi({
+            url: '/api/blade-manager/projectInfo/get-project-contract-list',
+            method: 'get',
+            params: { userId },
+        })
+    },
+    async saveUserInfoByProjectTow(form) {
+        return HcApi({
+            url: '/api/blade-manager/contractInfo/save-userInfo-by-project-tow',
+            method: 'post',
+            data: form,
+        })
+    },
+    async removeUsersByIds(ids) {
+        return HcApi({
+            url: '/api/blade-manager/contractInfo/remove-users-by-ids',
+            method: 'post',
+            params: { ids },
+        })
+    },
+    async removeUserProjectInfoAndRoleById(id) {
         return HcApi({
             url: '/api/blade-manager/contractInfo/remove-userProjectInfo-role-byId',
             method: 'post',
-            params: form,
+            params: { id },
         })
     },
 }

+ 152 - 2
src/views/system/modules/user/data.vue

@@ -89,7 +89,52 @@
                 </el-form>
             </el-tab-pane>
             <el-tab-pane label="职能描述">
-                <HcRelatedProject />
+                <div class="relative overflow-hidden">
+                    <el-row :gutter="14">
+                        <el-col :span="7">
+                            <el-select v-model="relatedProjectForm.projectId" filterable clearable block @change="projectChange" @clear="projectClear">
+                                <el-option v-for="(item) in projectList" :key="item.id" :label="item.projectName" :value="item.id" />
+                            </el-select>
+                        </el-col>
+                        <el-col :span="7">
+                            <el-select v-model="relatedProjectForm.contractId" filterable clearable block @change="contractChange">
+                                <el-option v-for="(item) in contractList" :key="item.id" :label="item.contractName" :value="item.id" />
+                            </el-select>
+                        </el-col>
+                        <el-col :span="6">
+                            <el-select v-model="relatedProjectForm.roleId" filterable clearable block @change="roleChange">
+                                <el-option v-for="(item) in roleList" :key="item.roleId" :label="item.roleName" :value="item.roleId" />
+                            </el-select>
+                        </el-col>
+                        <el-col :span="4">
+                            <el-button type="success" @click="addRelatedProject">确认添加</el-button>
+                        </el-col>
+                    </el-row>
+                </div>
+                <el-divider border-style="dashed" />
+                <div v-for="(item, index) in userProjectContract" :key="index" class="relative mb-[14px] overflow-hidden">
+                    <el-row :gutter="14">
+                        <el-col :span="7">
+                            <el-input v-model="item.projectName" disabled />
+                        </el-col>
+                        <el-col :span="7">
+                            <el-select :model-value="item.userContractId" popper-class="user-project-contract" filterable block>
+                                <el-option v-for="(items, indexs) in item.dataInfo" :key="indexs" :label="items.contractName" :value="items.id">
+                                    <div class="hc-flex" @click.stop="userContractClick(items, index)">
+                                        <div class="name flex-1 text-truncate">{{ items.contractName }}</div>
+                                        <div class="del ml-10px text-red" @click.stop="delContractClick(items, index)">删除</div>
+                                    </div>
+                                </el-option>
+                            </el-select>
+                        </el-col>
+                        <el-col :span="6">
+                            <el-input v-model="item.userRoleName" disabled />
+                        </el-col>
+                        <el-col :span="4">
+                            <el-button type="danger" @click="delRelatedProject(item)">确定删除</el-button>
+                        </el-col>
+                    </el-row>
+                </div>
             </el-tab-pane>
         </el-tabs>
         <template #footer>
@@ -103,9 +148,12 @@
 import { ref, watch } from 'vue'
 import { getDictionaryData } from '~uti/tools'
 import { getArrValue, getObjValue, isNullES, isPhone } from 'js-fast-way'
-import mainApi from '~api/system/user'
 import tenantApi from '~api/system/tenant'
+import projectApi from '~api/project/project'
+import contractApi from '~api/project/contract'
+import roleApi from '~api/system/role'
 import deptApi from '~api/system/dept'
+import mainApi from '~api/system/user'
 
 const props = defineProps({
     info: {
@@ -141,6 +189,8 @@ const getDataApi = () => {
     const { id, userType } = info
     getTenantSelect()
     getUserTypeData()
+    getProjectDataList()
+    getRoleDataList()
     if (isNullES(id)) return
     formModel.value = {
         ...info,
@@ -151,6 +201,7 @@ const getDataApi = () => {
         return parseInt(item, 10) // 使用基数10进行解析,保证正确性
     })
     getDeptTreeData()
+    getProjectContractList()
     console.log(info)
 }
 
@@ -206,6 +257,102 @@ const getDeptTreeData = async () => {
     deptTreeData.value = getArrValue(data)
 }
 
+//获取当前配置好的参建项目
+const userProjectContract = ref([])
+const getProjectContractList = async () => {
+    const { id } = formModel.value
+    const { data } = await mainApi.getProjectContractList(id)
+    const res = getArrValue(data)
+    for (let i = 0; i < res.length; i++) {
+        const arr = getArrValue(res[i].dataInfo)
+        res[i].dataInfo = arr
+        if (arr.length > 0) {
+            const roleTypes = isNullES(arr[0].roleType) ? '' : arr[0].roleType + '|'
+            res[i].userContractId = arr[0].id
+            res[i].userRoleName = roleTypes + arr[0].roleName
+        }
+    }
+    userProjectContract.value = res
+}
+
+//已配置的合同段选择
+const userContractClick = ({ id, roleType, roleName }, index) => {
+    const form = userProjectContract.value[index]
+    const roleTypes = isNullES(roleType) ? '' : roleType + '|'
+    form.userContractId = id
+    form.userRoleName = roleTypes + roleName
+}
+
+//已配置的合同段删除
+const delContractClick = async ({ id }) => {
+    const { isRes } = await mainApi.removeUsersByIds(id)
+    if (!isRes) return
+    window.$message.success('删除成功')
+    await getProjectContractList()
+}
+
+//删除参建项目
+const delRelatedProject = async ({ userContractId }) => {
+    const { isRes } = await mainApi.removeUserProjectInfoAndRoleById(userContractId)
+    if (!isRes) return
+    window.$message.success('删除成功')
+    await getProjectContractList()
+}
+
+//职能描述相关数据
+const projectList = ref([])
+const getProjectDataList = async () => {
+    const { data } = await projectApi.page({ current: 1, size: 999 })
+    projectList.value = getArrValue(data?.records)
+}
+
+//获取合同段数据
+const contractList = ref([])
+const getContractDataList = async () => {
+    const { projectId } = relatedProjectForm.value
+    if (isNullES(projectId)) return
+    const { data } = await contractApi.getList(projectId)
+    contractList.value = getArrValue(data)
+}
+
+//获取角色
+const roleList = ref([])
+const getRoleDataList = async () => {
+    const { data } = await roleApi.treeTow()
+    roleList.value = getArrValue(data)
+}
+
+//职能描述,添加表单
+const relatedProjectForm = ref({ projectId: '', contractId: '', roleId: '' })
+
+//项目选择
+const projectChange = () => {
+    const { projectId } = relatedProjectForm.value
+    getContractDataList()
+}
+
+//清空选择的项目
+const projectClear = () => {
+    relatedProjectForm.value.contractId = null
+    contractList.value = []
+}
+
+//合同段选择
+const contractChange = () => {
+    const { contractId } = relatedProjectForm.value
+}
+
+//角色选择
+const roleChange = () => {
+    const { roleId } = relatedProjectForm.value
+}
+
+//添加项目合同段
+const addRelatedProject = () => {
+    const form = relatedProjectForm.value
+    console.log(form)
+}
+
 //提交表单
 const submitLoading = ref(false)
 const dialogSubmit = async () => {
@@ -325,4 +472,7 @@ const formRules2 = {
         margin-bottom: 14px;
     }
 }
+.user-project-contract .el-select-dropdown__item {
+    padding: 0 20px;
+}
 </style>

+ 1 - 1
src/views/system/user.vue

@@ -69,7 +69,7 @@ onActivated(()=> {
 
 //搜索表单
 const searchFormType = ref('account')
-const searchFormName = ref('')
+const searchFormName = ref('pengct')
 const searchForm = ref({ deptId: null, current: 1, size: 30, total: 0 })
 
 //获取用户平台