sc
This commit is contained in:
@@ -4,9 +4,9 @@ VITE_NODE_ENV=development
|
|||||||
VITE_DEV=true
|
VITE_DEV=true
|
||||||
|
|
||||||
# 请求路径
|
# 请求路径
|
||||||
VITE_BASE_URL='http://localhost:48080'
|
# VITE_BASE_URL='http://localhost:48080'
|
||||||
|
|
||||||
# VITE_BASE_URL='http://47.98.161.246:48080'
|
VITE_BASE_URL='http://47.98.161.246:48080'
|
||||||
# VITE_BASE_URL='http://114.55.169.15:48080'
|
# VITE_BASE_URL='http://114.55.169.15:48080'
|
||||||
|
|
||||||
# 上传路径
|
# 上传路径
|
||||||
|
|||||||
@@ -20,10 +20,10 @@ export const updateOkrNode = (data) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查询详情
|
// 查询详情
|
||||||
export const getOkrNodeDetail = (nodeId) => {
|
export const getOkrNodeDetail = (params) => {
|
||||||
return request.get({
|
return request.get({
|
||||||
url: '/admin-api/okr/node/get',
|
url: '/admin-api/okr/node/get',
|
||||||
params: { nodeId }
|
params
|
||||||
// headers: { 'instance-id': 1016 }
|
// headers: { 'instance-id': 1016 }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -108,3 +108,30 @@ export const getOkrRelationTreeChildren = (params) => {
|
|||||||
// headers: { 'instance-id': 1016 }
|
// headers: { 'instance-id': 1016 }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取我的组员
|
||||||
|
export const getMyMemberList = (params) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/admin-api/okr/node/my-members',
|
||||||
|
params
|
||||||
|
// headers: { 'instance-id': 1016 }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取我的组员节点树
|
||||||
|
export const getMySonNodeTree = (params) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/admin-api/okr/node/member/node/list',
|
||||||
|
params
|
||||||
|
// headers: { 'instance-id': 1016 }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取我的组员OKR列表
|
||||||
|
export const getMySonOkrPage = (params) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/admin-api/okr/node/member/objective/list',
|
||||||
|
params
|
||||||
|
// headers: { 'instance-id': 1016 }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ export interface DeptVO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 查询部门(精简)列表
|
// 查询部门(精简)列表
|
||||||
export const getSimpleDeptList = async (): Promise<DeptVO[]> => {
|
export const getSimpleDeptList = async (params: any): Promise<any[]> => {
|
||||||
return await request.get({ url: '/admin-api/system/dept/list-all-simple' })
|
return await request.get({ url: '/admin-api/system/dept/list-all-simple', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询部门列表
|
// 查询部门列表
|
||||||
|
|||||||
@@ -57,17 +57,15 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12" :offset="0">
|
<el-col :span="12" :offset="0">
|
||||||
<el-form-item label="开通系统" prop="instanceIds">
|
<el-form-item label="业务系统" prop="instanceId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="formData.instanceIds"
|
v-model="formData.instanceId"
|
||||||
placeholder="选择开通系统"
|
placeholder="选择主业务系统"
|
||||||
multiple
|
|
||||||
collapse-tags
|
|
||||||
clearable
|
clearable
|
||||||
filterable
|
filterable
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in instanceIdsOptions"
|
v-for="item in instanceIdOptions"
|
||||||
:key="item.instanceId"
|
:key="item.instanceId"
|
||||||
:label="item.instanceName"
|
:label="item.instanceName"
|
||||||
:disabled="item.status == 1"
|
:disabled="item.status == 1"
|
||||||
@@ -105,16 +103,7 @@ const dialogVisible = ref(false) // 弹窗的是否展示
|
|||||||
const dialogTitle = ref('') // 弹窗的标题
|
const dialogTitle = ref('') // 弹窗的标题
|
||||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||||
const formData = ref({
|
const formData = ref<any>({})
|
||||||
id: undefined,
|
|
||||||
parentId: undefined,
|
|
||||||
name: undefined,
|
|
||||||
sort: 1,
|
|
||||||
leaderUserId: undefined,
|
|
||||||
status: CommonStatusEnum.ENABLE,
|
|
||||||
remark: undefined,
|
|
||||||
instanceIds: undefined
|
|
||||||
})
|
|
||||||
const formRules = reactive<any>({
|
const formRules = reactive<any>({
|
||||||
parentId: [{ required: true, message: '上级部门不能为空', trigger: 'blur' }],
|
parentId: [{ required: true, message: '上级部门不能为空', trigger: 'blur' }],
|
||||||
name: [{ required: true, message: '部门名称不能为空', trigger: 'blur' }],
|
name: [{ required: true, message: '部门名称不能为空', trigger: 'blur' }],
|
||||||
@@ -128,7 +117,7 @@ const formRules = reactive<any>({
|
|||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
const deptTree = ref() // 树形结构
|
const deptTree = ref() // 树形结构
|
||||||
const employeeOptions = ref<any>([]) // 用户列表
|
const employeeOptions = ref<any>([]) // 用户列表
|
||||||
const instanceIdsOptions = ref<any>([]) // 实例ids
|
const instanceIdOptions = ref<any>([]) // 实例ids
|
||||||
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (type: string, id?: number) => {
|
const open = async (type: string, id?: number) => {
|
||||||
@@ -141,6 +130,7 @@ const open = async (type: string, id?: number) => {
|
|||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
formData.value = await DeptApi.getDept(id)
|
formData.value = await DeptApi.getDept(id)
|
||||||
|
formData.value.remark = formData.value.remark || ''
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
@@ -151,7 +141,7 @@ const open = async (type: string, id?: number) => {
|
|||||||
})
|
})
|
||||||
//实例
|
//实例
|
||||||
getSimpleAppList().then((data) => {
|
getSimpleAppList().then((data) => {
|
||||||
instanceIdsOptions.value = data
|
instanceIdOptions.value = data
|
||||||
})
|
})
|
||||||
// 获得部门树
|
// 获得部门树
|
||||||
await getTree()
|
await getTree()
|
||||||
@@ -194,7 +184,7 @@ const resetForm = () => {
|
|||||||
leaderUserId: undefined,
|
leaderUserId: undefined,
|
||||||
status: CommonStatusEnum.ENABLE,
|
status: CommonStatusEnum.ENABLE,
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
instanceIds: undefined
|
instanceId: undefined
|
||||||
}
|
}
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
<el-table v-loading="loading" :data="list" row-key="id" default-expand-all border>
|
<el-table v-loading="loading" :data="list" row-key="id" default-expand-all border>
|
||||||
<el-table-column prop="name" label="部门名称" />
|
<el-table-column prop="name" label="部门名称" />
|
||||||
<el-table-column prop="leaderUserName" label="负责人" width="120" />
|
<el-table-column prop="leaderUserName" label="负责人" width="120" />
|
||||||
<el-table-column prop="instanceNames" label="业务系统" width="200" />
|
<el-table-column prop="instanceName" label="业务系统" width="200" />
|
||||||
<el-table-column prop="sort" label="排序" width="80" />
|
<el-table-column prop="sort" label="排序" width="80" />
|
||||||
<el-table-column prop="status" label="状态" width="100">
|
<el-table-column prop="status" label="状态" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
@@ -68,6 +68,7 @@ const { t } = useI18n() // 国际化
|
|||||||
const loading = ref(true) // 列表的加载中
|
const loading = ref(true) // 列表的加载中
|
||||||
const list = ref() // 列表的数据
|
const list = ref() // 列表的数据
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
|
allFlag: true,
|
||||||
name: undefined
|
name: undefined
|
||||||
})
|
})
|
||||||
const queryFormRef = ref() // 搜索的表单
|
const queryFormRef = ref() // 搜索的表单
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ const open = async (type: string, id?: number) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 加载部门树
|
// 加载部门树
|
||||||
deptList.value = handleTree(await DeptApi.getSimpleDeptList())
|
deptList.value = handleTree(await DeptApi.getSimpleDeptList({ allFlag: true }))
|
||||||
// 加载岗位列表
|
// 加载岗位列表
|
||||||
roleOptions.value = await RoleApi.getSimpleRoleList()
|
roleOptions.value = await RoleApi.getSimpleRoleList()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ function handleAddNode() {
|
|||||||
|
|
||||||
function handleEditOkr() {
|
function handleEditOkr() {
|
||||||
dialogOkr.value.close()
|
dialogOkr.value.close()
|
||||||
dialogOkrInfo.value.open('update', searchForm.value.nodeId)
|
dialogOkrInfo.value.open('update', searchForm.value.nodeId, 2)
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleUpdateProcess() {
|
function handleUpdateProcess() {
|
||||||
@@ -124,7 +124,8 @@ const dialogOkr = ref(null)
|
|||||||
function handleShowOkr(id) {
|
function handleShowOkr(id) {
|
||||||
dialogOkr.value.open({
|
dialogOkr.value.open({
|
||||||
nodeId: id,
|
nodeId: id,
|
||||||
canEdit: isCurrentLeafNode.value
|
canEdit: isCurrentLeafNode.value,
|
||||||
|
queryType: 2
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -18,7 +18,23 @@
|
|||||||
<span class="text-14px ml-0.25">ork落地</span>
|
<span class="text-14px ml-0.25">ork落地</span>
|
||||||
<div class="ml-20px text-14px">
|
<div class="ml-20px text-14px">
|
||||||
<span>【节点】</span>
|
<span>【节点】</span>
|
||||||
<span>{{ nodeInfo.allNodeName }}</span>
|
<span
|
||||||
|
v-for="(item, index) in nodeInfo.parentNodes"
|
||||||
|
:key="item.nodeId"
|
||||||
|
@click="handleChildItem(item)"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
class="cursor-pointer"
|
||||||
|
:style="{
|
||||||
|
color: index < nodeInfo.parentNodes.length - 1 ? '#409eff' : '#333',
|
||||||
|
borderBottom:
|
||||||
|
index < nodeInfo.parentNodes.length - 1 ? '1px solid #409eff' : 'none'
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
{{ item.nodeName }}
|
||||||
|
</span>
|
||||||
|
<span v-if="index != nodeInfo.parentNodes.length - 1"> -> </span>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
@@ -351,9 +367,11 @@ const nodeInfo = ref({})
|
|||||||
const nodeRecords = ref([])
|
const nodeRecords = ref([])
|
||||||
const commentTypeOptions = ref([])
|
const commentTypeOptions = ref([])
|
||||||
|
|
||||||
|
const queryType = ref(1)
|
||||||
function open(curNode) {
|
function open(curNode) {
|
||||||
canEdit.value = curNode.canEdit
|
canEdit.value = curNode.canEdit
|
||||||
nodeInfo.value.nodeId = curNode.nodeId
|
nodeInfo.value.nodeId = curNode.nodeId
|
||||||
|
queryType.value = curNode.queryType
|
||||||
// 获取数据详情
|
// 获取数据详情
|
||||||
searchInfo(curNode)
|
searchInfo(curNode)
|
||||||
show.value = true
|
show.value = true
|
||||||
@@ -363,13 +381,12 @@ const employeeOptions = ref([])
|
|||||||
|
|
||||||
function searchInfo(curNode) {
|
function searchInfo(curNode) {
|
||||||
try {
|
try {
|
||||||
getOkrNodeDetail(curNode.nodeId).then((resp) => {
|
getOkrNodeDetail({ nodeId: curNode.nodeId, queryType: queryType.value }).then((resp) => {
|
||||||
nodeInfo.value = {
|
nodeInfo.value = {
|
||||||
...resp,
|
...resp,
|
||||||
executor: resp.executor || []
|
executor: resp.executor || []
|
||||||
}
|
}
|
||||||
canEdit.value =
|
canEdit.value = canEdit.value && nodeInfo.value.executor.includes(currentUserId + '')
|
||||||
canEdit.value && currentUserId == nodeInfo.value.executor.includes(currentUserId)
|
|
||||||
if (resp.objectives) {
|
if (resp.objectives) {
|
||||||
okrList.value = resp.objectives.map((item) => ({
|
okrList.value = resp.objectives.map((item) => ({
|
||||||
...item,
|
...item,
|
||||||
@@ -414,7 +431,7 @@ function handleMention(item) {
|
|||||||
function handleSaveProcess() {
|
function handleSaveProcess() {
|
||||||
okrTableRef.value.updateProcess(nodeInfo.value.nodeId).then(() => {
|
okrTableRef.value.updateProcess(nodeInfo.value.nodeId).then(() => {
|
||||||
message.success('更新成功')
|
message.success('更新成功')
|
||||||
searchInfo()
|
searchInfo({ nodeId: nodeInfo.value.nodeId })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -378,7 +378,7 @@ const defaultProps = {
|
|||||||
}
|
}
|
||||||
const sourceOptions = ref([])
|
const sourceOptions = ref([])
|
||||||
const objectList = ref([])
|
const objectList = ref([])
|
||||||
function open(type, val) {
|
function open(type, val, queryType) {
|
||||||
show.value = true
|
show.value = true
|
||||||
title.value = type == 'update' ? '修改Okr' : '新增Okr'
|
title.value = type == 'update' ? '修改Okr' : '新增Okr'
|
||||||
formType.value = type
|
formType.value = type
|
||||||
@@ -399,7 +399,10 @@ function open(type, val) {
|
|||||||
if (val) {
|
if (val) {
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
getOkrNodeDetail(val).then((resp) => {
|
getOkrNodeDetail({
|
||||||
|
nodeId: val,
|
||||||
|
queryType
|
||||||
|
}).then((resp) => {
|
||||||
form.value = resp
|
form.value = resp
|
||||||
if (resp.objectives) {
|
if (resp.objectives) {
|
||||||
objectList.value = resp.objectives.map((item) => ({
|
objectList.value = resp.objectives.map((item) => ({
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ const dialogOkrInfo = ref(null)
|
|||||||
|
|
||||||
function handleEditOkr() {
|
function handleEditOkr() {
|
||||||
dialogOkr.value.close()
|
dialogOkr.value.close()
|
||||||
dialogOkrInfo.value.open('update', 1)
|
dialogOkrInfo.value.open('update', 1, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleUpdateProcess() {
|
function handleUpdateProcess() {
|
||||||
@@ -93,7 +93,8 @@ const dialogOkr = ref(null)
|
|||||||
function handleShowOkr(id) {
|
function handleShowOkr(id) {
|
||||||
dialogOkr.value.open({
|
dialogOkr.value.open({
|
||||||
nodeId: id,
|
nodeId: id,
|
||||||
canEdit: true
|
canEdit: true,
|
||||||
|
queryType: 1
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
94
src/views/OKR/Management/Components/MySon.vue
Normal file
94
src/views/OKR/Management/Components/MySon.vue
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
<el-row>
|
||||||
|
<el-tree-select
|
||||||
|
v-model="searchForm.nodeId"
|
||||||
|
:data="peroidList"
|
||||||
|
:props="defaultProps"
|
||||||
|
:render-after-expand="false"
|
||||||
|
:default-expand-all="false"
|
||||||
|
style="width: 400px"
|
||||||
|
@change="getOkrList"
|
||||||
|
/>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-button type="info" @click="handleShowOkr(searchForm.nodeId)"> 节点详情 </el-button>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<OkrTable ref="okrTableRef" canEdit />
|
||||||
|
<DialogOkr ref="dialogOkr" @edit="handleEditOkr" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="MyDuty">
|
||||||
|
import OkrTable from './OkrTable.vue'
|
||||||
|
import DialogOkr from './DialogOkr.vue'
|
||||||
|
import { listToTree } from '@/utils/tree'
|
||||||
|
|
||||||
|
import { getMySonNodeTree, getMySonOkrPage } from '@/api/okr/okr'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
userId: {
|
||||||
|
type: Number,
|
||||||
|
default: undefined
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const defaultProps = {
|
||||||
|
value: 'nodeId',
|
||||||
|
label: 'nodeName',
|
||||||
|
children: 'children'
|
||||||
|
}
|
||||||
|
|
||||||
|
const okrTableRef = ref(null)
|
||||||
|
const searchForm = ref({
|
||||||
|
nodeId: undefined
|
||||||
|
})
|
||||||
|
|
||||||
|
const peroidList = ref([])
|
||||||
|
|
||||||
|
handleSearchPeroid()
|
||||||
|
|
||||||
|
function handleSearchPeroid() {
|
||||||
|
getMySonNodeTree({ userId: props.userId }).then((resp) => {
|
||||||
|
peroidList.value = listToTree(resp.tree, {
|
||||||
|
id: 'nodeId',
|
||||||
|
pid: 'parentId',
|
||||||
|
children: 'children'
|
||||||
|
})
|
||||||
|
searchForm.value.nodeId = resp.nodeId
|
||||||
|
getOkrList()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOkrList() {
|
||||||
|
getMySonOkrPage({
|
||||||
|
...searchForm.value,
|
||||||
|
userId: props.userId
|
||||||
|
}).then((resp) => {
|
||||||
|
const list = resp
|
||||||
|
nextTick(() => {
|
||||||
|
okrTableRef.value.prepareData(list)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const dialogOkr = ref(null)
|
||||||
|
function handleShowOkr(id) {
|
||||||
|
dialogOkr.value.open({
|
||||||
|
nodeId: id,
|
||||||
|
canEdit: true,
|
||||||
|
queryType: 1
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
:deep(.el-overlay-dialog) {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -178,6 +178,7 @@ function openOkr() {
|
|||||||
clickNode.value &&
|
clickNode.value &&
|
||||||
dialogOkr.value.open({
|
dialogOkr.value.open({
|
||||||
nodeId: clickNode.value.nodeId,
|
nodeId: clickNode.value.nodeId,
|
||||||
|
queryType: 2,
|
||||||
canEdit: !clickNode.value.children || clickNode.value.children.length == 0
|
canEdit: !clickNode.value.children || clickNode.value.children.length == 0
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -275,10 +275,8 @@ function handleDelete(row) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleNotice(row) {
|
function handleNotice(row) {
|
||||||
console.log(row)
|
|
||||||
|
|
||||||
message.confirm('即将发送微信通知提醒执行人,是否继续?').then(() => {
|
message.confirm('即将发送微信通知提醒执行人,是否继续?').then(() => {
|
||||||
urgeWait({ workId: row.workId }).then(() => {
|
urgeWait(row.workId).then(() => {
|
||||||
message.success('发送成功')
|
message.success('发送成功')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<el-tab-pane label="目标关系树" name="3">
|
<el-tab-pane label="目标关系树" name="3">
|
||||||
<ObjectList v-if="tabIndex == 3" />
|
<ObjectList v-if="tabIndex == 3" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane disabled>
|
<el-tab-pane disabled v-if="employeeList.length > 0">
|
||||||
<template #label>
|
<template #label>
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
<el-divider
|
<el-divider
|
||||||
@@ -31,9 +31,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="张三">张三</el-tab-pane>
|
<el-tab-pane
|
||||||
<el-tab-pane label="李四">李四</el-tab-pane>
|
v-for="item in employeeList"
|
||||||
<el-tab-pane label="王二">王二</el-tab-pane>
|
:key="item.userId"
|
||||||
|
:label="item.userName"
|
||||||
|
:name="item.userId"
|
||||||
|
>
|
||||||
|
<MySon v-if="tabIndex == item.userId" :userId="item.userId" />
|
||||||
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -41,11 +46,21 @@
|
|||||||
<script setup name="OkrManagement">
|
<script setup name="OkrManagement">
|
||||||
import AllTarget from './Components/AllTarget.vue'
|
import AllTarget from './Components/AllTarget.vue'
|
||||||
import MyDuty from './Components/MyDuty.vue'
|
import MyDuty from './Components/MyDuty.vue'
|
||||||
|
import MySon from './Components/MySon.vue'
|
||||||
import ObjectList from './Components/ObjectList.vue'
|
import ObjectList from './Components/ObjectList.vue'
|
||||||
import WaitTarget from './Components/WaitTarget.vue'
|
import WaitTarget from './Components/WaitTarget.vue'
|
||||||
|
|
||||||
|
import { getMyMemberList } from '@/api/okr/okr'
|
||||||
|
|
||||||
const tabIndex = ref('0')
|
const tabIndex = ref('0')
|
||||||
const height = ref(innerHeight - 115)
|
const height = ref(innerHeight - 115)
|
||||||
|
|
||||||
|
const employeeList = ref([])
|
||||||
|
onMounted(() => {
|
||||||
|
getMyMemberList().then((res) => {
|
||||||
|
employeeList.value = res
|
||||||
|
})
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -25,7 +25,14 @@
|
|||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="组织部门" prop="dept">
|
<el-form-item label="组织部门" prop="dept">
|
||||||
<el-input v-model="formData.dept" placeholder="请输入部门" />
|
<el-tree-select
|
||||||
|
v-model="formData.deptId"
|
||||||
|
:data="deptList"
|
||||||
|
:props="defaultProps"
|
||||||
|
check-strictly
|
||||||
|
node-key="id"
|
||||||
|
placeholder="请选择部门"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@@ -189,8 +196,10 @@
|
|||||||
<script name="DialogEmployee" setup>
|
<script name="DialogEmployee" setup>
|
||||||
import { CommonStatusEnum } from '@/utils/constants'
|
import { CommonStatusEnum } from '@/utils/constants'
|
||||||
import { formatDate } from '@/utils/formatTime'
|
import { formatDate } from '@/utils/formatTime'
|
||||||
|
import { defaultProps, handleTree } from '@/utils/tree'
|
||||||
import { getPlanSimpleList } from '@/api/pers/attendancePlan'
|
import { getPlanSimpleList } from '@/api/pers/attendancePlan'
|
||||||
import { getSimpleAppList } from '@/api/system/app'
|
import { getSimpleAppList } from '@/api/system/app'
|
||||||
|
import * as DeptApi from '@/api/system/dept'
|
||||||
|
|
||||||
import * as EmployeeApi from '@/api/pers/employee'
|
import * as EmployeeApi from '@/api/pers/employee'
|
||||||
|
|
||||||
@@ -219,6 +228,8 @@ const attendanceSettingIdOptions = ref([])
|
|||||||
const instanceIdsOptions = ref([])
|
const instanceIdsOptions = ref([])
|
||||||
const employeeOptions = ref([])
|
const employeeOptions = ref([])
|
||||||
|
|
||||||
|
const deptList = ref([])
|
||||||
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (type, id) => {
|
const open = async (type, id) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
@@ -234,6 +245,7 @@ const open = async (type, id) => {
|
|||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
deptList.value = handleTree(await DeptApi.getSimpleDeptList({ allFlag: true }))
|
||||||
getOptions()
|
getOptions()
|
||||||
}
|
}
|
||||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||||
|
|||||||
Reference in New Issue
Block a user