<template>
<view class="container">
<!-- 资产清单列表页面 -->
<u-navbar id="navber" title="资产清单" :autoBack="true" :fixed="true" :placeholder="true">
<!-- @leftClick="back" -->
<template #right>
<view class="navberFilters" @click="toScanModal">
<up-icon name="scan" color="#46C880" size="26"></up-icon>
</view>
<view class="navberFilters" @click="openFilter">
<text class="text">筛选</text>
<up-icon name="arrow-down-fill" color="#666666" size="10"></up-icon>
</view>
</template>
</u-navbar>
<view class="search">
<common-search-input v-model="keyword" @search="handleSearch" placeholder="搜索资产名称"></common-search-input>
</view>
<view>
<view class="list" v-for="(item,index) in list" :key="index" @click="goDetail(item)">
<view class="conten-box">
<view class="title-box">
<view class="status">
<span class="isIdle" v-if="item.assetStatus == 1">空闲</span>
<span class="isUser" v-if="item.assetStatus == 2">在用</span>
<span class="isDis" v-if="item.assetStatus == 3">已处置</span>
</view>
<view class="title">{{item.assetName}}</view>
</view>
<view class="info-box">
<view class="box-margin">
资产编码:{{item.assetCode}}
</view>
<view >
资产分类:{{item.assetCategoryName}}
</view>
</view>
</view>
<view class="image-box">
<image
:src="item.imageUrl || 'https://dfs.hndyls.com:1443/hndy-static-resource/2025/2025-07/2025-07-31/5bceaf24-3305-4479-906b-ef868056f27c.png'"
class="image">
</image>
</view>
</view>
<u-loadmore v-if="list.length>0" :status="status" style="padding-bottom:10px"/>
<u-loading-page :loading="loading" fontSize="32rpx" style="position: absolute"></u-loading-page>
</view>
<view style="margin-top: 20%;" v-if="!list.length">
<u-empty mode="list" text="暂无数据"
icon="https://dfs.hndyls.com:1443/hndy-static-resource/2025/2025-03/2025-03-12/20250312105719_empty.png">
</u-empty>
</view>
<!-- 查询条件 -->
<filterPopup ref="filterPopup" :isMy="true" @change="changeQuery" />
<!-- 扫描组件 -->
<scanModal ref="scanModalRef" :continuousScan="true" :callBack="scanCallBack" @confirm="scanConfirm">
</scanModal>
</view>
</template>
<script>
import scanModal from "@/pages/modulePage/asset/components/scan/scanModal.vue";
import filterPopup from './components/filterPopup.vue'
import {
assetPrefixApi
} from '@/api/index.js';
export default {
components: {
scanModal,
filterPopup
},
data() {
return {
pageSize:10,
pageNum:1,
status: 'loadmore',
total: 0,
list: [],
keyword: '',
loading: true,
queryForm:{
assetStatus:null,
markStatus:null,
assetCodeList:[],
assetCategoryId:null,
storageLocationId:null,
useUserNameList:[],
useOrgId:null,
useSubjectId:null,
useDepartmentId:null,
affiliatedInstitutionId:null,
affiliatedSubjectId:null,
adminName:null,
assetSourceType:null,
brand:null,
supplierName:null,
specificationModel:null,
serialNumber:null,
remarks:null,
type:null,
purchaseDateStart:null,
purchaseDateEnd:null,
maintenanceExpirationDateStart:null,
maintenanceExpirationDateEnd:null,
},
assetList:{
assetCategoryList:[],
assetCategoryData:[],
positionList:[],
sourceList:[],
unitList:[],
assinstitutional:[],
assentityList:[]
}
}
},
onShow() {
this.pageNum = 1
this.getList();
this.getAssetCategory()
this.getPosition()
this.getSource()
this.getUnit()
this.getInstitution()
this.getMainBody()
// 获取机构主体关联关系
this.getOrgSubjectList();
},
onReachBottom() {
if (this.status != "loadmore") return;
this.status = 'loading';
this.pageNum++;
this.getList();
},
methods: {
// 列表
async getList(){
let params = {
userId: parseInt(uni.getStorageSync("userinfo").id),
pageSize: this.pageSize,
pageNum: this.pageNum,
assetName: this.keyword, //资产名称
...this.queryForm
}
if(params.purchaseDateStart){
params.purchaseDateStart = params.purchaseDateStart + ' 00:00:00'
}
if(params.purchaseDateEnd){
params.purchaseDateEnd = params.purchaseDateEnd + ' 23:59:59'
}
if(params.maintenanceExpirationDateStart){
params.maintenanceExpirationDateStart = params.maintenanceExpirationDateStart + ' 00:00:00'
}
if(params.maintenanceExpirationDateEnd){
params.maintenanceExpirationDateEnd = params.maintenanceExpirationDateEnd + ' 23:59:59'
}
let data = {
path: `/api/inventory/page`,
params: JSON.stringify(params),
method: 'POST'
}
if(this.pageNum == 1){
this.list = [];
this.loading = true;
}
const res = await assetPrefixApi.assetPrefixUrl(data);
if (res.code == 0) {
// uni.$u.toast(res.msg);
this.total = res.data.totalCount
if (res && res.data && Array.isArray(res.data.dataList)) {
let list = [];
res.data.dataList.forEach(item => {
if(item.imageUrl) {
item.imageUrlList = item.imageUrl.split(',')
}
const json = {
assetCategoryName:item.assetCategoryName,
assetCode:item.assetCode,
assetStatus:item.assetStatus,
assetStatusName:item.assetStatusName,
id:item.id,
imageUrl:item.imageUrl ? item.imageUrlList[0] : '',
assetName:item.assetName
}
list.push(json)
})
this.list.push(...list);
}
if(this.list.length < this.total){
this.status = "loadmore"
} else {
this.status = "nomore";
}
this.loading = false;
} else {
uni.$u.toast(res.msg);
}
},
goDetail(item) {
uni.navigateTo({
url: `/pages/modulePage/asset/assetInventory/model/infoView?id=${item.id}`,
})
},
// 获取资产分类
async getAssetCategory(){
let params = {
userId: parseInt(uni.getStorageSync("userinfo").id),
}
let data = {
path: `/api/category/list`,
params: JSON.stringify(params),
method: 'GET'
}
const res = await assetPrefixApi.assetPrefixUrl(data);
if(res.code == 0) {
this.assetList.assetCategoryList = this.formatToTree(res.data)
this.assetList.assetCategoryData = res.data
uni.setStorageSync("asset_list", this.assetList)
}
},
formatToTree(ary, pid) {
return ary.filter((item) =>
pid == null ? item.parentId == 0 : item.parentId == pid
).map((item) => {
item.name = item.categoryName
item.children = this.formatToTree(ary, item.id);
return item;
});
},
// 存放地点
async getPosition(){
let params = {
userId: parseInt(uni.getStorageSync("userinfo").id),
pageSize: 999,
pageNum: 1,
}
let data = {
path: `/api/position/list/page`,
params: JSON.stringify(params),
method: 'POST'
}
const res = await assetPrefixApi.assetPrefixUrl(data);
if(res.code == 0) {
if(res.data.dataList && res.data.dataList.length > 0) {
res.data.dataList.forEach( item => {
item.name = item.position
item.id = Number(item.id)
})
this.assetList.positionList = res.data.dataList
uni.setStorageSync("asset_list", this.assetList)
}
}
},
// 资产来源
async getSource(){
let params = {
userId: parseInt(uni.getStorageSync("userinfo").id),
}
let data = {
path: `/api/dictInfo/queryDetailList/?dictCode=SOURCE_ASSETS`,
params: JSON.stringify(params),
method: 'GET'
}
const res = await assetPrefixApi.assetPrefixUrl(data);
if(res.code == 0) {
if(res.data && res.data.length > 0) {
res.data.forEach( item => {
item.name = item.itemLabel
item.id = Number(item.id)
})
this.assetList.sourceList = res.data
uni.setStorageSync("asset_list", this.assetList)
}
}
},
// 计量单位
async getUnit(){
let params = {
userId: parseInt(uni.getStorageSync("userinfo").id),
}
let data = {
path: `/api/dictInfo/queryDetailList/?dictCode=UNIT_MEASUREMENT`,
params: JSON.stringify(params),
method: 'GET'
}
const res = await assetPrefixApi.assetPrefixUrl(data);
if(res.code == 0) {
if(res.data && res.data.length > 0) {
res.data.forEach( item => {
item.name = item.itemLabel
item.id = Number(item.id)
})
this.assetList.unitList = res.data
uni.setStorageSync("asset_list", this.assetList)
}
}
},
// 单个查询机构 dictInfo/queryDetailList/ASS_INSTITUTIONAL
async getInstitution(){
let params = {
userId: parseInt(uni.getStorageSync("userinfo").id),
}
let data = {
path: `/api/userCenter/dictInfo/queryDetailList/ASS_INSTITUTIONAL`,
params: JSON.stringify(params),
method: 'GET'
}
const res = await assetPrefixApi.assetPrefixUrl(data);
if(res.code == 0) {
this.assetList.assinstitutional = res.data
uni.setStorageSync("asset_list", this.assetList)
}
},
// 单个查询主体 dictInfo/queryDetailList/OFFICIAL_SEAL_ORG
async getMainBody(){
let params = {
userId: parseInt(uni.getStorageSync("userinfo").id),
}
let data1 = {
path: `/api/userCenter/dictInfo/queryDetailList/OFFICIAL_SEAL_ORG`,
params: JSON.stringify(params),
method: 'GET'
}
const res = await assetPrefixApi.assetPrefixUrl(data1);
if(res.code == 0) {
if(res.data &&res.data.length > 0) {
res.data.forEach( item => {
item.name = item.remarks
})
}
this.assetList.assentityList = res.data
uni.setStorageSync("asset_list", this.assetList)
}
},
// 打开扫描组件
toScanModal() {
this.$refs.scanModalRef.show(true);
},
// 手机二维码扫描后的回调
scanCallBack(res) {
this.showScanModal = false;
if (!res.result) return true;
// 从二维码中获取资产编码
let assetCode = res.result.split('@')[1];
console.log('assetCode',assetCode)
uni.navigateTo({
url: `/pages/modulePage/asset/assetInventory/model/infoView?id=${assetCode}`,
})
// 返回true,扫描组件会继续后续操作,返回false,扫描组件会终止操作
return false;
},
// 手持设备扫描后的操作
scanConfirm(list) {
console.log('资产清单不需要这个功能,只需要手机扫码功能就OK:', list);
},
// 筛选
openFilter(){
this.$refs.filterPopup.open(this.queryForm)
},
// 返回的查询条件
changeQuery(queryForm) {
if(queryForm?.assetCodeList && queryForm.assetCodeList.length > 0) {
queryForm.assetCodeList = [queryForm.assetCodeList]
}
this.queryForm = {...queryForm}
this.handleSearch()
},
handleReceivedParams(params){
this.$refs.filterPopup.getOrganization(params)
},
handleSearch() {
this.list = [];
this.pageNum = 1;
this.getList();
},
// 获取机构主体关联关系
async getOrgSubjectList() {
let params = {
userId: parseInt(uni.getStorageSync("userinfo").id),
}
let data1 = {
path: `/api/org/getOrgSubjectList`,
params: JSON.stringify(params),
method: 'GET'
}
const res = await assetPrefixApi.assetPrefixUrl(data1);
if(res.code == 0) {
this.assetList.OrgSubjectList = res.data
uni.setStorageSync("asset_list", this.assetList);
}
}
}
}
</script>
<style scoped lang="scss">
.search{
border-top: 0.03125rem solid #efefef;
}
.isIdle{
background: #dcf7ee;
color: #139d6f;
}
.isUser{
background: #d3dafd;
color: #2A4EFF;
}
.isDis{
background: #e1e1e1;
color: #857F7F;
}
.search {
width: 750rpx;
justify-content: center;
position: sticky;
z-index: 970;
top: 44px;
background: #fff;
}
.list{
background-color: #ffff;
margin: 0.625rem;
border-radius: 0.375rem;
padding: 0.9375rem;
display:flex;
.title-box{
display:flex;
.status{
span{
padding: 0.2rem 0.7rem;
border-radius: 0.5rem;
font-size: 0.7rem;
}
}
.title{
flex:1;
padding: 0 0.4rem;
font-size: 0.9rem;
}
}
.image-box{
flex: 1;
text-align: right;
.image{
width: 3.75rem;
height: 3.75rem;
border-radius: 0.375rem
}
}
.info-box{
color:#999999;
.box-margin{
margin:0.5rem 0 0.2rem 0
}
}
}
</style>
<!-- 固定class="search",在class="list"数据滚动时,class="search"不要滚动到头部,遮住了id="navber" -->
最新发布