Files
gxtyzx-admin/src/views/oa/company/detail/index.vue
T
南宁网宿科技 121348e011 Initial commit
2024-04-24 16:36:46 +08:00

204 lines
5.7 KiB
Vue

<template>
<a-page-header
:title="title"
:style="{ padding: screenWidth > 480 ? '16px 24px' : '0' }"
@back="() => $router.go(-1)"
>
<a-spin :spinning="spinning">
<a-card
:bordered="false"
:body-style="{ paddingTop: '5px' }"
v-if="isShow"
>
<a-tabs v-model:active-key="active" @change="onChange">
<a-tab-pane tab="基本信息" key="base">
<CompanyInfo
:data="form"
:logo="logo"
:company-qrcode="companyQrcode"
@done="reload"
/>
</a-tab-pane>
<a-tab-pane
tab="成员管理"
key="users"
v-if="hasRole('superAdmin') || hasRole('admin')"
>
<CompanyUsers :company-id="companyId" :data="form" @done="reload" />
</a-tab-pane>
<a-tab-pane tab="客户资料" key="param">
<CompanyFieldForm
:company-id="companyId"
:data="form"
@done="reload"
/>
</a-tab-pane>
<a-tab-pane tab="企业附件" key="annex">
<CompanyAnnex :company-id="companyId" :data="form" @done="reload" />
</a-tab-pane>
</a-tabs>
</a-card>
<a-card v-else :bordered="false">
<div style="max-width: 960px; margin: 0 auto">
<a-result
status="error"
title="无查看权限"
sub-title="请先添加为企业成员"
>
<template #extra>
<a-space size="middle">
<a-button type="primary" @click="openUrl('/oa/company/index')"
>返回</a-button
>
</a-space>
</template>
</a-result>
</div>
</a-card>
</a-spin>
</a-page-header>
</template>
<script lang="ts" setup>
import { ref, unref, watch } from 'vue';
import { useRouter } from 'vue-router';
import { useThemeStore } from '@/store/modules/theme';
import { storeToRefs } from 'pinia';
import CompanyInfo from './components/company-info.vue';
import CompanyUsers from './components/company-users.vue';
import CompanyAnnex from './components/company-annex.vue';
import CompanyFieldForm from './components/company-field.vue';
import { pageCompany } from '@/api/oa/company';
import useFormData from '@/utils/use-form-data';
import { Company } from '@/api/oa/company/model';
import { ItemType } from 'ele-admin-pro/es/ele-image-upload/types';
import { hasRole } from '@/utils/permission';
import { setPageTabTitle } from '@/utils/page-tab-util';
import { openUrl } from '@/utils/common';
import { pageCompanyUser } from '@/api/oa/company/user';
import { pageCompanyField } from '@/api/oa/company/field';
import { CompanyField } from '@/api/oa/company/field/model';
const { currentRoute } = useRouter();
// 当前选项卡
const active = ref('base');
// 是否开启响应式布局
const themeStore = useThemeStore();
const { screenWidth } = storeToRefs(themeStore);
const title = ref('企业名称');
const spinning = ref(true);
const isShow = ref(true);
const logo = ref<any[]>([]);
const companyId = ref<number>(0);
const companyQrcode = ref<any[]>([]);
const images = ref<ItemType[]>([]);
const companyField = ref<CompanyField[]>();
// 应用信息
const { form, assignFields, resetFields } = useFormData<Company>({
companyId: undefined,
companyName: '',
shortName: '',
companyCode: '',
companyLogo: '',
companyType: undefined,
industryParent: '',
industryChild: '',
businessEntity: '',
province: '',
city: '',
region: '',
address: '',
phone: '',
tel: '',
email: '',
domain: '',
serverUrl: undefined,
clicks: undefined,
version: undefined,
sortNumber: undefined,
comments: '',
tenantName: '',
tenantCode: '',
tenantId: undefined,
createTime: '',
status: undefined,
nickname: '',
fields: [],
userList: []
});
const onChange = () => {
reload();
};
/**
* 加载数据
*/
const reload = () => {
resetFields();
logo.value = [];
companyQrcode.value = [];
images.value = [];
// companyField.value = [];
// 加载企业详情
pageCompany({ companyId: companyId.value })
.then((data) => {
if (data?.list) {
const company = data.list[0];
assignFields(company);
if (company.companyName) {
title.value = company.companyName;
// 修改页签标题
setPageTabTitle(company.companyName);
}
if (company.companyLogo) {
logo.value.push({
uid: company.companyId,
url: company.companyLogo,
status: 'done'
});
}
}
isShow.value = true;
spinning.value = false;
// 加载企业资料
pageCompanyField({ companyId: companyId.value, limit: 50 }).then(
(res) => {
companyField.value = res?.list;
form.fields = res?.list;
}
);
// 加载项目成员
pageCompanyUser({ companyId: companyId.value }).then((res) => {
if (res?.list) {
form.userList = res.list;
}
});
})
.catch((err) => {
isShow.value = false;
spinning.value = false;
});
};
watch(
currentRoute,
(route) => {
const { params } = unref(route);
const { id } = params;
if (id) {
companyId.value = Number(id);
}
reload();
},
{ immediate: true }
);
</script>
<script lang="ts">
export default {
name: 'CompanyDetail'
};
</script>