c535af3b by xukangle

Merge branch 'develop' of http://117.78.60.236:8000/csbr-daop/fe-data-asset-management into develop

2 parents 3b3f7a83 f4cc314d
......@@ -12,6 +12,7 @@ declare module '@vue/runtime-core' {
ApprovalProcess: typeof import('./src/components/ApprovalProcess/src/ApprovalProcess.vue')['default']
Auth: typeof import('./src/components/Auth/index.vue')['default']
AuthAll: typeof import('./src/components/AuthAll/index.vue')['default']
CarouselPanel: typeof import('./src/components/CarouselPanel/src/CarouselPanel.vue')['default']
ContentWrap: typeof import('./src/components/ContentWrap/src/ContentWrap.vue')['default']
Copyright: typeof import('./src/components/Copyright/index.vue')['default']
Day: typeof import('./src/components/Schedule/component/day.vue')['default']
......
import CarouselPanel from './src/CarouselPanel.vue'
export { CarouselPanel }
<script setup lang="ts">
import { ElCarousel, ElCarouselItem } from "element-plus";
import { CaretBottom, CaretRight } from "@element-plus/icons-vue";
const props = defineProps({
carouselInfo: {
type: Object,
default: () => { },
},
});
const emits = defineEmits(["carouselChange"]);
const carouselChange = (current: number, prev: number) => {
emits("carouselChange", current);
};
</script>
<template>
<el-carousel :height="carouselInfo.height ?? '150px'" :indicator-position="carouselInfo.indicatorPosition ?? 'none'"
:arrow="carouselInfo.arrow ?? 'hover'" :trigger="carouselInfo.trigger ?? 'hover'" :loop="carouselInfo.loop ?? true"
:autoplay="carouselInfo.autoplay ?? true" :initial-index="carouselInfo.initialIndex ?? 0" @change="carouselChange">
<el-carousel-item class="carousel-item" :class="[carouselInfo.itemClass]" v-for="(item, i) in carouselInfo.list" :key="'carousel' + i">
<slot :carousel="item"></slot>
</el-carousel-item>
</el-carousel>
</template>
<style lang="scss" scoped></style>
......@@ -1041,7 +1041,8 @@ const panelChange = (scope, row) => {
:placeholder="group.placeholder" :clearable="group.clearable"
:disabled="group.disabled || readonly" :filterable="group.filterable"
:multiple="group.multiple ?? false" :collapse-tags="group.collapse ?? false"
:collapse-tags-tooltip="group.tagsTooltip ?? false"
:collapse-tags-tooltip="group.tagsTooltip ?? false" :allow-create="group.allowCreate ?? false"
:default-first-option="group.allowCreate ?? false"
@change="(val) => selectChange(val, group)">
<el-option v-for="opts in group.options"
:label="group.props?.label ? opts[group.props.label] : opts.label"
......
......@@ -12,6 +12,7 @@ declare module '@vue/runtime-core' {
ApprovalProcess: typeof import('./../components/ApprovalProcess/src/ApprovalProcess.vue')['default']
Auth: typeof import('./../components/Auth/index.vue')['default']
AuthAll: typeof import('./../components/AuthAll/index.vue')['default']
CarouselPanel: typeof import('./../components/CarouselPanel/src/CarouselPanel.vue')['default']
ContentWrap: typeof import('./../components/ContentWrap/src/ContentWrap.vue')['default']
Copyright: typeof import('./../components/Copyright/index.vue')['default']
Day: typeof import('./../components/Schedule/component/day.vue')['default']
......
......@@ -1249,15 +1249,15 @@ const formattedDate = (dateVal) => {
(assetDetailInfo.updateFrequency?.includes(7) ? ((assetDetailInfo.updateFrequencyName > 1 ? ',' : '')
+ assetDetailInfo.updateFrequencyOther) : '')) ?? '--' }}</span>
</div>
<div class="list_item">
<span class="item_label">是否完成质量评估:</span>
<span class="item_value">{{ assetDetailInfo.isQualityAssessment == 'Y' ? '是' : '否' }}</span>
</div>
<div class="list_item" v-if="(detailType == 'asset' && assetDetailInfo.isQualityAssessment == 'Y')">
<span class="item_label">质量评估机构:</span>
<span class="item_value">{{ assetDetailInfo.registerAttachment.qualityEvaluationInstitution || '--'
}}</span>
</div>
<div class="list_item" v-else-if="assetDetailInfo.isQualityAssessment != 'Y'">
<span class="item_label">是否完成质量评估:</span>
<span class="item_value">{{ assetDetailInfo.isQualityAssessment == 'Y' ? '是' : '否' }}</span>
</div>
<div class="list_item">
<span class="item_label">病例总数():</span>
<span class="item_value">{{ assetDetailInfo.caseNumber ? changeNum(assetDetailInfo.caseNumber, 0) : '--'
......@@ -1289,15 +1289,15 @@ const formattedDate = (dateVal) => {
<span class="item_value">{{ assetDetailInfo.isRegistered == 'N' ? '无' :
(assetDetailInfo.registeredExchangeName?.join(',') ?? '--') }}</span>
</div>
<div class="list_item">
<span class="item_label">是否完成价值评估:</span>
<span class="item_value">{{ assetDetailInfo.isCostAssessment == 'Y' ? '是' : '否' }}</span>
</div>
<div class="list_item" v-if="(detailType == 'asset' && assetDetailInfo.isCostAssessment == 'Y')">
<span class="item_label">价值评估机构:</span>
<span class="item_value">{{ assetDetailInfo.registerAttachment.costAssessmentInstitution || '--'
}}</span>
</div>
<div class="list_item" v-else-if="assetDetailInfo.isCostAssessment != 'Y'">
<span class="item_label">是否完成价值评估:</span>
<span class="item_value">{{ assetDetailInfo.isCostAssessment == 'Y' ? '是' : '否' }}</span>
</div>
<div class="list_item">
<span class="item_label">资产类型:</span>
<span class="item_value">{{ assetDetailInfo.damTypeName || '--' }}</span>
......@@ -1437,7 +1437,44 @@ const formattedDate = (dateVal) => {
</div>
</span>
</div>
<div class="list_item is_block isFile" :style="{ width: '40%', 'margin-right': '28px' }"
v-if="detailType == 'asset' && assetDetailInfo.registerAttachment?.commitmentLetter?.length">
<span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">承诺函附件</span>
<span v-for="(item) in (assetDetailInfo.registerAttachment?.commitmentLetter || [])" class="item_value"
:style="{ 'padding-left': '0px' }">
<div class="file-operate">
<template
v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'xls' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'xlsx' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'csv'">
<img class="file-img" src="../../assets/images/excel.png" />
</template>
<template
v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'doc' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'docx'">
<img class="file-img" src="../../assets/images/word.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'zip'">
<img class="file-img" src="../../assets/images/zip.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'rar'">
<img class="file-img" src="../../assets/images/RAR.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf'">
<img class="file-img" src="../../assets/images/PDF.png" />
</template>
<template v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'png'">
<img class="file-img" src="../../assets/images/png.png" />
</template>
<template
v-else-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'">
<img class="file-img" src="../../assets/images/jpg.png" />
</template>
<div class="file-name">{{ item.name }}</div>
<div :style="{ right: '36px' }"
v-if="item.name.substring(item.name.lastIndexOf('.') + 1) == 'pdf' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'png' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpg' || item.name.substring(item.name.lastIndexOf('.') + 1) == 'jpeg'"
class="file-preview" @click="onUploadFilePreview(item)">查看</div>
<div :style="{ right: '0px' }" class="file-preview" @click="onUploadFileDownload(item)">下载</div>
</div>
</span>
</div>
<div class="list_item is_block isFile" :style="{ width: '40%' }"
v-if="(detailType == 'asset' && assetDetailInfo.isQualityAssessment == 'Y') && assetDetailInfo.registerAttachment?.evaluationFile?.length">
<span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">质量评估报告</span>
......@@ -1594,7 +1631,7 @@ const formattedDate = (dateVal) => {
</span>
</div>
<div class="list_item is_block isFile" :style="{ width: '40%', 'margin-right': '28px' }"
v-if="assetDetailInfo.registerAttachment?.commitmentLetter?.length">
v-if="detailType !='asset' && assetDetailInfo.registerAttachment?.commitmentLetter?.length">
<span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">承诺函附件</span>
<span v-for="(item) in (assetDetailInfo.registerAttachment?.commitmentLetter || [])" class="item_value"
:style="{ 'padding-left': '0px' }">
......
......@@ -6,6 +6,7 @@
import { ref } from 'vue';
import TableTools from "@/components/Tools/table_tools.vue";
import { ElMessage, ElMessageBox } from 'element-plus';
import { CarouselPanel } from '@/components/CarouselPanel';
import { useRouter, useRoute } from "vue-router";
import { MoreFilled } from "@element-plus/icons-vue";
import { changeNum, tagMethod, tagType, } from "@/utils/common";
......@@ -26,6 +27,14 @@ const path = route.path;
const loading = ref(false);
const defaultItemLogo = new URL('@/assets/images/home-finance-product.png', import.meta.url).href
const carouselInfo: any = ref({
list: [],
height: '176px',
loop: false,
autoplay: false,
arrow: 'hover',
itemClass: 'list-content'
})
const exchangeList: any = ref([]);
const exchangGuid = ref('');
const searchItemList = ref([
......@@ -131,18 +140,8 @@ const tableFields = ref([{ label: "序号", type: "index", width: 56, align: "ce
{ label: "修改人", field: "updateUserName", width: 140 },
{ label: "修改时间", field: "updateTime", width: 180 }]);
/** 是否时企业端。不是企业端,则是服务端。 */
const isCompanyPlatform = ref(userData.tenantType == 1);
const listDataLoading = ref(false);
const activeListType = ref('list');
const listData: any = ref([]);
/** 记录点击省略号弹出菜单的visible */
const cardBtnVisible: any = ref(false);
const tableInfo = ref({
id: 'asset-data-table',
rowKey: 'guid',
......@@ -343,7 +342,12 @@ const getTableData = () => {
const getExchangeData = () => {
getExchangeList().then((res: any) => {
if (res.code == proxy.$passCode) {
exchangeList.value = res.data || [];
const data = res.data || [];
while (data.length) {
exchangeList.value.push(data.splice(0, 4));
}
carouselInfo.value.list = exchangeList.value;
carouselInfo.value.arrow = exchangeList.value.length > 1 ? 'hover' : 'never';
} else {
ElMessage.error(res.msg);
}
......@@ -530,9 +534,10 @@ const rejectDialogBtnClick = (btn, info) => {
<TableTools :searchItems="searchItemList" :searchId="'register-data-search'" @search="toSearch" />
</div>
<div class="content_main_wrap">
<div class="list-content">
<template v-for="(item, i) in exchangeList" :key="item.exchangeGuid">
<div class="card-content" :class="{ active: exchangGuid == item.exchangeGuid }">
<CarouselPanel :carousel-info="carouselInfo">
<template v-slot:default="{ carousel }">
<div class="card-content" v-for="(item, i) in carousel" :key="'item-' + i"
:class="{ active: exchangGuid == item.exchangeGuid, mr8: i < carousel.length - 1 && (i + 1) % 4 !== 0 }">
<div class="header">
<img class="left-img"
:src="(item.picUrl && typeof item.picUrl == 'string') ? item.picUrl : defaultItemLogo" alt="" />
......@@ -556,9 +561,8 @@ const rejectDialogBtnClick = (btn, info) => {
<div class="left-btn is_block" @click="btnClick({ value: 'create', ...item })">资产登记</div>
</div>
</div>
<div v-if="i < exchangeList.length - 1" class="space_partition"></div>
</template>
</div>
</CarouselPanel>
<div class="table_panel_wrap">
<Table :tableInfo="tableInfo" @tableBtnClick="tableBtnClick" />
<PageNav :class="[pageInfo.type]" :pageInfo="pageInfo" @pageChange="pageChange" />
......@@ -572,7 +576,6 @@ const rejectDialogBtnClick = (btn, info) => {
<style scoped lang="scss">
.container_wrap {
padding: 0 16px;
overflow: hidden auto;
.table_tool_wrap {
height: 44px;
......@@ -586,8 +589,7 @@ const rejectDialogBtnClick = (btn, info) => {
}
.table_panel_wrap {
flex: 1;
height: auto;
height: calc(100% - 176px);
}
}
......@@ -724,21 +726,32 @@ const rejectDialogBtnClick = (btn, info) => {
}
}
.list-content-wrap {
position: relative;
}
.list-content {
display: flex;
flex-wrap: wrap;
width: 100%;
height: 176px;
overflow: hidden;
.card-content {
width: calc(25% - 6px);
padding: 16px;
box-shadow: 0 0 0 1px #d9d9d9;
margin-bottom: 8px;
min-width: 325px;
max-width: 400px;
border: 1px solid var(--el-border-color-regular);
float: left;
&.active {
box-shadow: 0 0 0 1px var(--el-color-primary);
}
&.mr8 {
margin-right: 8px;
}
.header {
display: flex;
margin-bottom: 16px;
......@@ -817,9 +830,5 @@ const rejectDialogBtnClick = (btn, info) => {
}
}
}
.space_partition {
width: 8px;
}
}
</style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!