Commit 9bb8cd939f30213d7f23c53226ad3065d1f92dcf

Authored by wuxw
1 parent fe758814

优化采购模块

src/api/community/communityApi.js
... ... @@ -13,8 +13,14 @@ export function _loadCommunityInfo(_param) {
13 13 const res = response.data
14 14 let _communityInfos = res.communitys;
15 15 if (_communityInfos && _communityInfos.length > 0) {
16   - setCurrentCommunity(_communityInfos[0]);
17 16 setCommunitys(_communityInfos);
  17 + let _currentCommunity = getCurrentCommunity()
  18 + if(_currentCommunity){
  19 + resolve(res)
  20 + return ;
  21 + }
  22 +
  23 + setCurrentCommunity(_communityInfos[0]);
18 24 if (_param && _param.communityId) {
19 25 let _communityId = _param.communityId;
20 26 _communityInfos.forEach(_c => {
... ...
src/api/resource/resourceDetailApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +import { getCommunityId } from '@/api/community/communityApi'
  3 +
  4 +// 获取物品详情
  5 +export function getResourceStoreList(params) {
  6 + return new Promise((resolve, reject) => {
  7 + request({
  8 + url: '/resourceStore.listResourceStores',
  9 + method: 'get',
  10 + params: {
  11 + ...params,
  12 + communityId: getCommunityId()
  13 + }
  14 + }).then(response => {
  15 + const res = response.data
  16 + resolve(res)
  17 + }).catch(error => {
  18 + reject(error)
  19 + })
  20 + })
  21 +}
  22 +
  23 +// 获取采购记录
  24 +export function getPurchaseApplyDetailList(params) {
  25 + return new Promise((resolve, reject) => {
  26 + request({
  27 + url: '/purchaseApplyDetail.listPurchaseApplyDetails',
  28 + method: 'get',
  29 + params: {
  30 + ...params,
  31 + communityId: getCommunityId()
  32 + }
  33 + }).then(response => {
  34 + const res = response.data
  35 + resolve(res)
  36 + }).catch(error => {
  37 + reject(error)
  38 + })
  39 + })
  40 +}
  41 +
  42 +// 获取盘点记录
  43 +export function getAssetInventoryList(params) {
  44 + return new Promise((resolve, reject) => {
  45 + request({
  46 + url: '/assetInventory.listAssetInventory',
  47 + method: 'get',
  48 + params: {
  49 + ...params,
  50 + communityId: getCommunityId()
  51 + }
  52 + }).then(response => {
  53 + const res = response.data
  54 + resolve(res)
  55 + }).catch(error => {
  56 + reject(error)
  57 + })
  58 + })
  59 +}
  60 +
  61 +// 获取调拨记录
  62 +export function getAllocationStorehouseList(params) {
  63 + return new Promise((resolve, reject) => {
  64 + request({
  65 + url: '/resourceStore.listAllocationStorehouses',
  66 + method: 'get',
  67 + params: {
  68 + ...params,
  69 + communityId: getCommunityId()
  70 + }
  71 + }).then(response => {
  72 + const res = response.data
  73 + resolve(res)
  74 + }).catch(error => {
  75 + reject(error)
  76 + })
  77 + })
  78 +}
  79 +
  80 +// 获取转赠记录
  81 +export function getAllocationUserStorehouseList(params) {
  82 + return new Promise((resolve, reject) => {
  83 + request({
  84 + url: '/resourceStore.listAllocationUserStorehouses',
  85 + method: 'get',
  86 + params: {
  87 + ...params,
  88 + communityId: getCommunityId()
  89 + }
  90 + }).then(response => {
  91 + const res = response.data
  92 + resolve(res)
  93 + }).catch(error => {
  94 + reject(error)
  95 + })
  96 + })
  97 +}
  98 +
  99 +// 获取使用记录
  100 +export function getResourceStoreUseRecordList(params) {
  101 + return new Promise((resolve, reject) => {
  102 + request({
  103 + url: '/resourceStore.listResourceStoreUseRecords',
  104 + method: 'get',
  105 + params: {
  106 + ...params,
  107 + communityId: getCommunityId()
  108 + }
  109 + }).then(response => {
  110 + const res = response.data
  111 + resolve(res)
  112 + }).catch(error => {
  113 + reject(error)
  114 + })
  115 + })
  116 +}
0 117 \ No newline at end of file
... ...
src/api/resource/resourceStoreManageApi.js
... ... @@ -161,7 +161,7 @@ export function exportData(params) {
161 161 export function importData(data) {
162 162 return new Promise((resolve, reject) => {
163 163 request({
164   - url: '/importResourceStore.importData',
  164 + url: '/callComponent/upload/importResourceStore/importData',
165 165 method: 'post',
166 166 data,
167 167 headers: {
... ... @@ -175,7 +175,7 @@ export function importData(data) {
175 175 reject(new Error(res.msg || '导入数据失败'))
176 176 }
177 177 }).catch(error => {
178   - reject(error)
  178 + reject(error.response.data)
179 179 })
180 180 })
181 181 }
... ...
src/components/resource/addResourceStore.vue
... ... @@ -144,7 +144,7 @@
144 144 <el-col :span="12">
145 145 <el-form-item :label="$t('resourceStoreManage.uploadImage')">
146 146 <upload-image-url ref="uploadImage" :image-count="5"
147   - @notify-upload-image="handleImageUpload"></upload-image-url>
  147 + @notifyUploadCoverImage="handleImageUpload"></upload-image-url>
148 148 </el-form-item>
149 149 </el-col>
150 150 </el-row>
... ... @@ -362,7 +362,7 @@ export default {
362 362 },
363 363  
364 364 handleImageUpload(images) {
365   - this.formData.photos = images.map(img => img.fileId)
  365 + this.formData.photos = images
366 366 },
367 367  
368 368 saveResourceStore() {
... ...
src/components/resource/editResourceStore.vue
... ... @@ -30,7 +30,8 @@
30 30 <el-select v-model="formData.rstId" style="width:100%" :disabled="formData.shType === '2807'"
31 31 @change="handleSonResourceTypeChange">
32 32 <el-option :label="$t('resourceStoreManage.selectSecondCategory')" value="" disabled></el-option>
33   - <el-option v-for="(item, index) in rstIds" :key="index" :label="item.name" :value="item.rstId"></el-option>
  33 + <el-option v-for="(item, index) in rstIds" :key="index" :label="item.name"
  34 + :value="item.rstId"></el-option>
34 35 </el-select>
35 36 </el-form-item>
36 37 </el-col>
... ... @@ -127,9 +128,9 @@
127 128 </el-form-item>
128 129 </el-col>
129 130 <el-col :span="12">
130   - <el-form-item :label="$t('resourceStoreManage.images')">
  131 + <el-form-item :label="$t('resourceStoreManage.uploadImage')">
131 132 <upload-image-url ref="uploadImage" :image-count="5"
132   - @notify-upload-image="handleImageUpload"></upload-image-url>
  133 + @notifyUploadCoverImage="handleImageUpload"></upload-image-url>
133 134 </el-form-item>
134 135 </el-col>
135 136 </el-row>
... ... @@ -143,7 +144,7 @@
143 144 </template>
144 145  
145 146 <script>
146   -import { updateResourceStore ,listStorehouses,listResourceStoreTypes, getResourceStoreType,listResourceStoreSpecifications} from '@/api/resource/resourceStoreManageApi'
  147 +import { updateResourceStore, listStorehouses, listResourceStoreTypes, getResourceStoreType, listResourceStoreSpecifications } from '@/api/resource/resourceStoreManageApi'
147 148 import { getDict, getCommunityId } from '@/api/community/communityApi'
148 149 import UploadImageUrl from '@/components/upload/UploadImageUrl'
149 150  
... ... @@ -233,7 +234,7 @@ export default {
233 234 this.formData = { ...row }
234 235 this.$nextTick(() => {
235 236 if (this.$refs.uploadImage) {
236   - this.$refs.uploadImage.setPhotos(row.fileUrls || [])
  237 + this.$refs.uploadImage.setImages(row.fileUrls || [])
237 238 }
238 239 })
239 240 this.loadData()
... ... @@ -271,7 +272,7 @@ export default {
271 272 parentId: '0'
272 273 }
273 274 const response = await listResourceStoreTypes(params)
274   - this.parentRstIds = response || []
  275 + this.parentRstIds = response.data || []
275 276 } catch (error) {
276 277 console.error('加载物品类型失败:', error)
277 278 }
... ... @@ -301,7 +302,7 @@ export default {
301 302 flag: "0"
302 303 }
303 304 const response = await listResourceStoreTypes(params)
304   - this.rstIds = response || []
  305 + this.rstIds = response.data || []
305 306 } catch (error) {
306 307 console.error('加载二级分类失败:', error)
307 308 }
... ... @@ -344,7 +345,7 @@ export default {
344 345 rstId: rstId
345 346 }
346 347 const response = await listResourceStoreSpecifications(params)
347   - this.resourceStoreSpecifications = response || []
  348 + this.resourceStoreSpecifications = response.data || []
348 349 } catch (error) {
349 350 console.error('加载物品规格失败:', error)
350 351 }
... ... @@ -361,7 +362,7 @@ export default {
361 362 },
362 363  
363 364 handleImageUpload(images) {
364   - this.formData.fileUrls = images.map(img => ({ fileId: img.fileId, url: img.url }))
  365 + this.formData.fileUrls = images
365 366 },
366 367  
367 368 updateResourceStore() {
... ...
src/components/resource/importResourceStore.vue
1 1 <template>
2 2 <el-dialog :title="$t('resourceStoreManage.importResource')" :visible.sync="dialogVisible" width="40%"
3 3 :close-on-click-modal="false" @closed="handleClosed">
4   - <el-form ref="importForm" :model="formData" :rules="rules" label-width="120px" label-position="right">
  4 + <el-form ref="importForm" :model="formData" :rules="rules" label-width="120px" label-position="right" class="text-left">
5 5 <el-form-item :label="$t('resourceStoreManage.storehouse')" prop="shId">
6 6 <el-select v-model="formData.shId" style="width:100%">
7 7 <el-option :label="$t('resourceStoreManage.selectStorehouse')" value="" disabled></el-option>
... ... @@ -10,7 +10,7 @@
10 10 </el-select>
11 11 </el-form-item>
12 12  
13   - <el-form-item :label="$t('resourceStoreManage.selectFile')" prop="file">
  13 + <el-form-item :label="$t('common.select')" prop="file">
14 14 <el-upload class="upload-demo" action="" :auto-upload="false" :on-change="handleFileChange"
15 15 :show-file-list="false">
16 16 <el-button size="small" type="primary">
... ... @@ -43,7 +43,7 @@
43 43 </template>
44 44  
45 45 <script>
46   -import { importResourceStoreData,listStorehouses } from '@/api/resource/resourceStoreManageApi'
  46 +import { importData, listStorehouses } from '@/api/resource/resourceStoreManageApi'
47 47 import { getCommunityId } from '@/api/community/communityApi'
48 48  
49 49 export default {
... ... @@ -120,10 +120,14 @@ export default {
120 120 formData.append('shId', this.formData.shId)
121 121 formData.append('communityId', this.formData.communityId)
122 122  
123   - await importResourceStoreData(formData)
124   - this.$message.success(this.$t('resourceStoreManage.importSuccess'))
125   - this.dialogVisible = false
126   - this.$emit('success')
  123 + const res = await importData(formData).catch(error => {
  124 + this.$message.error(error)
  125 + })
  126 + if (res && res.code === 0) {
  127 + this.$message.success(this.$t('resourceStoreManage.importSuccess'))
  128 + this.dialogVisible = false
  129 + this.$emit('success')
  130 + }
127 131 } catch (error) {
128 132 console.error('导入物品失败:', error)
129 133 this.$message.error(error.message || this.$t('resourceStoreManage.importFailed'))
... ...
src/components/resource/resourceDetailAllocation.vue 0 → 100644
  1 +<template>
  2 + <div class="resource-detail-allocation">
  3 + <el-table
  4 + v-loading="loading"
  5 + :data="resourceStores"
  6 + border
  7 + style="width: 100%"
  8 + >
  9 + <el-table-column
  10 + prop="applyId"
  11 + :label="$t('resourceDetail.allocation.allocationId')"
  12 + align="center"
  13 + />
  14 + <el-table-column
  15 + :label="$t('resourceDetail.allocation.itemType')"
  16 + align="center"
  17 + >
  18 + <template slot-scope="scope">
  19 + {{ scope.row.parentRstName }} > {{ scope.row.rstName }}
  20 + </template>
  21 + </el-table-column>
  22 + <el-table-column
  23 + prop="resName"
  24 + :label="$t('resourceDetail.allocation.itemName')"
  25 + align="center"
  26 + />
  27 + <el-table-column
  28 + :label="$t('resourceDetail.allocation.itemSpec')"
  29 + align="center"
  30 + >
  31 + <template slot-scope="scope">
  32 + {{ scope.row.specName || '-' }}
  33 + </template>
  34 + </el-table-column>
  35 + <el-table-column
  36 + prop="isFixedName"
  37 + :label="$t('resourceDetail.allocation.fixedItem')"
  38 + align="center"
  39 + />
  40 + <el-table-column
  41 + :label="$t('resourceDetail.allocation.originalStock')"
  42 + align="center"
  43 + >
  44 + <template slot-scope="scope">
  45 + {{ scope.row.originalStock }}{{ scope.row.unitCodeName }}
  46 + </template>
  47 + </el-table-column>
  48 + <el-table-column
  49 + :label="$t('resourceDetail.allocation.allocationQuantity')"
  50 + align="center"
  51 + >
  52 + <template slot-scope="scope">
  53 + {{ scope.row.stock }}{{ scope.row.applyType == 20000 ? scope.row.miniUnitCodeName : scope.row.unitCodeName }}
  54 + </template>
  55 + </el-table-column>
  56 + <el-table-column
  57 + :label="$t('resourceDetail.allocation.sourceWarehouse')"
  58 + align="center"
  59 + >
  60 + <template slot-scope="scope">
  61 + {{ scope.row.applyType == '20000' ? scope.row.startUserName : scope.row.shaName }}
  62 + </template>
  63 + </el-table-column>
  64 + <el-table-column
  65 + prop="shzName"
  66 + :label="$t('resourceDetail.allocation.targetWarehouse')"
  67 + align="center"
  68 + />
  69 + <el-table-column
  70 + prop="startUserName"
  71 + :label="$t('resourceDetail.allocation.applicant')"
  72 + align="center"
  73 + />
  74 + <el-table-column
  75 + prop="remark"
  76 + :label="$t('resourceDetail.allocation.remark')"
  77 + align="center"
  78 + />
  79 + <el-table-column
  80 + prop="applyTypeName"
  81 + :label="$t('resourceDetail.allocation.allocationType')"
  82 + align="center"
  83 + />
  84 + <el-table-column
  85 + prop="stateName"
  86 + :label="$t('resourceDetail.allocation.status')"
  87 + align="center"
  88 + />
  89 + <el-table-column
  90 + prop="createTime"
  91 + :label="$t('resourceDetail.allocation.createTime')"
  92 + align="center"
  93 + />
  94 + </el-table>
  95 +
  96 + <el-pagination
  97 + :current-page.sync="page.current"
  98 + :page-sizes="[10, 20, 30, 50]"
  99 + :page-size="page.size"
  100 + :total="page.total"
  101 + layout="total, sizes, prev, pager, next, jumper"
  102 + @size-change="handleSizeChange"
  103 + @current-change="handleCurrentChange"
  104 + />
  105 + </div>
  106 +</template>
  107 +
  108 +<script>
  109 +import { getAllocationStorehouseList } from '@/api/resource/resourceDetailApi'
  110 +import { getCommunityId } from '@/api/community/communityApi'
  111 +
  112 +export default {
  113 + name: 'ResourceDetailAllocation',
  114 + data() {
  115 + return {
  116 + loading: false,
  117 + resourceStores: [],
  118 + page: {
  119 + current: 1,
  120 + size: 10,
  121 + total: 0
  122 + },
  123 + resId: '',
  124 + communityId: ''
  125 + }
  126 + },
  127 + created() {
  128 + this.communityId = getCommunityId()
  129 + },
  130 + methods: {
  131 + async loadData(params) {
  132 + this.resId = params.resId
  133 + await this.getList()
  134 + },
  135 + async getList() {
  136 + try {
  137 + this.loading = true
  138 + const { data, total } = await getAllocationStorehouseList({
  139 + resId: this.resId,
  140 + page: this.page.current,
  141 + row: this.page.size,
  142 + communityId: this.communityId
  143 + })
  144 + this.resourceStores = data
  145 + this.page.total = total
  146 + } catch (error) {
  147 + console.error('Failed to load allocation details:', error)
  148 + } finally {
  149 + this.loading = false
  150 + }
  151 + },
  152 + handleSizeChange(val) {
  153 + this.page.size = val
  154 + this.getList()
  155 + },
  156 + handleCurrentChange(val) {
  157 + this.page.current = val
  158 + this.getList()
  159 + }
  160 + }
  161 +}
  162 +</script>
  163 +
  164 +<style lang="scss" scoped>
  165 +.resource-detail-allocation {
  166 + padding: 20px;
  167 +
  168 + .el-pagination {
  169 + margin-top: 20px;
  170 + text-align: right;
  171 + }
  172 +}
  173 +</style>
0 174 \ No newline at end of file
... ...
src/components/resource/resourceDetailAllocationUser.vue 0 → 100644
  1 +<template>
  2 + <div class="resource-detail-allocation-user">
  3 + <el-table
  4 + v-loading="loading"
  5 + :data="allocationUserStorehouses"
  6 + border
  7 + style="width: 100%"
  8 + >
  9 + <el-table-column
  10 + prop="ausId"
  11 + :label="$t('resourceDetail.allocationUser.id')"
  12 + align="center"
  13 + />
  14 + <el-table-column
  15 + :label="$t('resourceDetail.allocationUser.itemType')"
  16 + align="center"
  17 + >
  18 + <template slot-scope="scope">
  19 + {{ scope.row.parentRstName }} > {{ scope.row.rstName }}
  20 + </template>
  21 + </el-table-column>
  22 + <el-table-column
  23 + prop="resName"
  24 + :label="$t('resourceDetail.allocationUser.itemName')"
  25 + align="center"
  26 + />
  27 + <el-table-column
  28 + :label="$t('resourceDetail.allocationUser.itemSpec')"
  29 + align="center"
  30 + >
  31 + <template slot-scope="scope">
  32 + {{ scope.row.specName || '-' }}
  33 + </template>
  34 + </el-table-column>
  35 + <el-table-column
  36 + prop="isFixedName"
  37 + :label="$t('resourceDetail.allocationUser.fixedItem')"
  38 + align="center"
  39 + />
  40 + <el-table-column
  41 + prop="startUserName"
  42 + :label="$t('resourceDetail.allocationUser.transferUser')"
  43 + align="center"
  44 + />
  45 + <el-table-column
  46 + prop="acceptUserName"
  47 + :label="$t('resourceDetail.allocationUser.transferTarget')"
  48 + align="center"
  49 + />
  50 + <el-table-column
  51 + :label="$t('resourceDetail.allocationUser.originalStock')"
  52 + align="center"
  53 + >
  54 + <template slot-scope="scope">
  55 + {{ scope.row.stock }}{{ scope.row.unitCodeName }}
  56 + </template>
  57 + </el-table-column>
  58 + <el-table-column
  59 + :label="$t('resourceDetail.allocationUser.transferQuantity')"
  60 + align="center"
  61 + >
  62 + <template slot-scope="scope">
  63 + {{ scope.row.giveQuantity }}{{ scope.row.miniUnitCodeName }}
  64 + </template>
  65 + </el-table-column>
  66 + <el-table-column
  67 + prop="createTime"
  68 + :label="$t('resourceDetail.allocationUser.createTime')"
  69 + align="center"
  70 + />
  71 + <el-table-column
  72 + prop="remark"
  73 + :label="$t('resourceDetail.allocationUser.remark')"
  74 + align="center"
  75 + />
  76 + </el-table>
  77 +
  78 + <el-pagination
  79 + :current-page.sync="page.current"
  80 + :page-sizes="[10, 20, 30, 50]"
  81 + :page-size="page.size"
  82 + :total="page.total"
  83 + layout="total, sizes, prev, pager, next, jumper"
  84 + @size-change="handleSizeChange"
  85 + @current-change="handleCurrentChange"
  86 + />
  87 + </div>
  88 +</template>
  89 +
  90 +<script>
  91 +import { getAllocationUserStorehouseList } from '@/api/resource/resourceDetailApi'
  92 +import { getCommunityId } from '@/api/community/communityApi'
  93 +
  94 +export default {
  95 + name: 'ResourceDetailAllocationUser',
  96 + data() {
  97 + return {
  98 + loading: false,
  99 + allocationUserStorehouses: [],
  100 + page: {
  101 + current: 1,
  102 + size: 10,
  103 + total: 0
  104 + },
  105 + resId: '',
  106 + communityId: ''
  107 + }
  108 + },
  109 + created() {
  110 + this.communityId = getCommunityId()
  111 + },
  112 + methods: {
  113 + async loadData(params) {
  114 + this.resId = params.resId
  115 + await this.getList()
  116 + },
  117 + async getList() {
  118 + try {
  119 + this.loading = true
  120 + const { data, total } = await getAllocationUserStorehouseList({
  121 + resId: this.resId,
  122 + page: this.page.current,
  123 + row: this.page.size,
  124 + communityId: this.communityId
  125 + })
  126 + this.allocationUserStorehouses = data
  127 + this.page.total = total
  128 + } catch (error) {
  129 + console.error('Failed to load allocation user details:', error)
  130 + } finally {
  131 + this.loading = false
  132 + }
  133 + },
  134 + handleSizeChange(val) {
  135 + this.page.size = val
  136 + this.getList()
  137 + },
  138 + handleCurrentChange(val) {
  139 + this.page.current = val
  140 + this.getList()
  141 + }
  142 + }
  143 +}
  144 +</script>
  145 +
  146 +<style lang="scss" scoped>
  147 +.resource-detail-allocation-user {
  148 + padding: 20px;
  149 +
  150 + .el-pagination {
  151 + margin-top: 20px;
  152 + text-align: right;
  153 + }
  154 +}
  155 +</style>
0 156 \ No newline at end of file
... ...
src/components/resource/resourceDetailInventory.vue 0 → 100644
  1 +<template>
  2 + <div class="resource-detail-inventory">
  3 + <el-table
  4 + v-loading="loading"
  5 + :data="assetInventorys"
  6 + border
  7 + style="width: 100%"
  8 + >
  9 + <el-table-column
  10 + prop="aiId"
  11 + :label="$t('resourceDetail.inventory.inventoryId')"
  12 + align="center"
  13 + />
  14 + <el-table-column
  15 + prop="name"
  16 + :label="$t('resourceDetail.inventory.inventoryName')"
  17 + align="center"
  18 + />
  19 + <el-table-column
  20 + prop="invTime"
  21 + :label="$t('resourceDetail.inventory.inventoryTime')"
  22 + align="center"
  23 + />
  24 + <el-table-column
  25 + prop="shName"
  26 + :label="$t('resourceDetail.inventory.warehouse')"
  27 + align="center"
  28 + />
  29 + <el-table-column
  30 + prop="staffName"
  31 + :label="$t('resourceDetail.inventory.inventoryPerson')"
  32 + align="center"
  33 + />
  34 + <el-table-column
  35 + prop="stateName"
  36 + :label="$t('resourceDetail.inventory.status')"
  37 + align="center"
  38 + />
  39 + <el-table-column
  40 + prop="createTime"
  41 + :label="$t('resourceDetail.inventory.createTime')"
  42 + align="center"
  43 + />
  44 + <el-table-column
  45 + :label="$t('common.operation')"
  46 + align="center"
  47 + width="120"
  48 + >
  49 + <template slot-scope="scope">
  50 + <el-button
  51 + type="text"
  52 + size="small"
  53 + @click="openDetail(scope.row)"
  54 + >
  55 + {{ $t('common.detail') }}
  56 + </el-button>
  57 + </template>
  58 + </el-table-column>
  59 + </el-table>
  60 +
  61 + <el-pagination
  62 + :current-page.sync="page.current"
  63 + :page-sizes="[10, 20, 30, 50]"
  64 + :page-size="page.size"
  65 + :total="page.total"
  66 + layout="total, sizes, prev, pager, next, jumper"
  67 + @size-change="handleSizeChange"
  68 + @current-change="handleCurrentChange"
  69 + />
  70 + </div>
  71 +</template>
  72 +
  73 +<script>
  74 +import { getAssetInventoryList } from '@/api/resource/resourceDetailApi'
  75 +import { getCommunityId } from '@/api/community/communityApi'
  76 +
  77 +export default {
  78 + name: 'ResourceDetailInventory',
  79 + data() {
  80 + return {
  81 + loading: false,
  82 + assetInventorys: [],
  83 + page: {
  84 + current: 1,
  85 + size: 10,
  86 + total: 0
  87 + },
  88 + resId: '',
  89 + communityId: ''
  90 + }
  91 + },
  92 + created() {
  93 + this.communityId = getCommunityId()
  94 + },
  95 + methods: {
  96 + async loadData(params) {
  97 + this.resId = params.resId
  98 + await this.getList()
  99 + },
  100 + async getList() {
  101 + try {
  102 + this.loading = true
  103 + const { data, total } = await getAssetInventoryList({
  104 + resId: this.resId,
  105 + page: this.page.current,
  106 + row: this.page.size,
  107 + communityId: this.communityId
  108 + })
  109 + this.assetInventorys = data
  110 + this.page.total = total
  111 + } catch (error) {
  112 + console.error('Failed to load inventory details:', error)
  113 + } finally {
  114 + this.loading = false
  115 + }
  116 + },
  117 + openDetail(row) {
  118 + this.$router.push({
  119 + path: '/pages/property/assetInventoryInStock',
  120 + query: { aiId: row.aiId }
  121 + })
  122 + },
  123 + handleSizeChange(val) {
  124 + this.page.size = val
  125 + this.getList()
  126 + },
  127 + handleCurrentChange(val) {
  128 + this.page.current = val
  129 + this.getList()
  130 + }
  131 + }
  132 +}
  133 +</script>
  134 +
  135 +<style lang="scss" scoped>
  136 +.resource-detail-inventory {
  137 + padding: 20px;
  138 +
  139 + .el-pagination {
  140 + margin-top: 20px;
  141 + text-align: right;
  142 + }
  143 +}
  144 +</style>
0 145 \ No newline at end of file
... ...
src/components/resource/resourceDetailItemOut.vue 0 → 100644
  1 +<template>
  2 + <div class="resource-detail-item-out">
  3 + <el-table v-loading="loading" :data="purchaseApplyDetails" border style="width: 100%">
  4 + <el-table-column prop="applyOrderId" :label="$t('resourceDetail.itemOut.applyOrderId')" align="center" />
  5 + <el-table-column prop="userName" :label="$t('resourceDetail.itemOut.applicant')" align="center" />
  6 + <el-table-column prop="endUserName" :label="$t('resourceDetail.itemOut.endUser')" align="center" />
  7 + <el-table-column :label="$t('resourceDetail.itemOut.itemType')" align="center">
  8 + <template slot-scope="scope">
  9 + {{ scope.row.parentRstName }} > {{ scope.row.rstName }}
  10 + </template>
  11 + </el-table-column>
  12 + <el-table-column prop="resName" :label="$t('resourceDetail.itemOut.itemName')" align="center" />
  13 + <el-table-column :label="$t('resourceDetail.itemOut.itemSpec')" align="center">
  14 + <template slot-scope="scope">
  15 + {{ scope.row.specName || '-' }}
  16 + </template>
  17 + </el-table-column>
  18 + <el-table-column prop="isFixedName" :label="$t('resourceDetail.itemOut.fixedItem')" align="center" />
  19 + <el-table-column :label="$t('resourceDetail.itemOut.supplier')" align="center">
  20 + <template slot-scope="scope">
  21 + {{ scope.row.supplierName || '-' }}
  22 + </template>
  23 + </el-table-column>
  24 + <el-table-column prop="shName" :label="$t('resourceDetail.itemOut.warehouse')" align="center" />
  25 + <el-table-column :label="$t('resourceDetail.itemOut.applyQuantity')" align="center">
  26 + <template slot-scope="scope">
  27 + {{ scope.row.quantity }}{{ scope.row.unitCodeName || '' }}
  28 + </template>
  29 + </el-table-column>
  30 + <el-table-column :label="$t('resourceDetail.itemOut.quantity')" align="center">
  31 + <template slot-scope="scope">
  32 + {{ scope.row.purchaseQuantity ? scope.row.purchaseQuantity + scope.row.unitCodeName : '-' }}
  33 + </template>
  34 + </el-table-column>
  35 + <el-table-column :label="$t('resourceDetail.itemOut.purchasePrice')" align="center">
  36 + <template slot-scope="scope">
  37 + ¥{{ scope.row.price ? scope.row.price : '0.00' }}
  38 + </template>
  39 + </el-table-column>
  40 + <el-table-column :label="$t('resourceDetail.itemOut.totalPrice')" align="center">
  41 + <template slot-scope="scope">
  42 + {{ scope.row.totalApplyPrice }}
  43 + </template>
  44 + </el-table-column>
  45 + <el-table-column :label="$t('resourceDetail.itemOut.remark')" align="center">
  46 + <template slot-scope="scope">
  47 + {{ scope.row.remark }}
  48 + <el-button v-if="scope.row.purchaseRemark" type="text" icon="el-icon-info"
  49 + @click="viewPurchaseRemark(scope.row)" />
  50 + </template>
  51 + </el-table-column>
  52 + <el-table-column prop="stateName" :label="$t('resourceDetail.itemOut.status')" align="center" />
  53 + <el-table-column prop="createTime" :label="$t('resourceDetail.itemOut.createTime')" align="center" />
  54 + </el-table>
  55 +
  56 + <el-pagination :current-page.sync="page.current" :page-sizes="[10, 20, 30, 50]" :page-size="page.size"
  57 + :total="page.total" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
  58 + @current-change="handleCurrentChange" />
  59 + </div>
  60 +</template>
  61 +
  62 +<script>
  63 +import { getPurchaseApplyDetailList } from '@/api/resource/resourceDetailApi'
  64 +import { getCommunityId } from '@/api/community/communityApi'
  65 +
  66 +export default {
  67 + name: 'ResourceDetailItemOut',
  68 + data() {
  69 + return {
  70 + loading: false,
  71 + purchaseApplyDetails: [],
  72 + page: {
  73 + current: 1,
  74 + size: 10,
  75 + total: 0
  76 + },
  77 + resId: '',
  78 + communityId: ''
  79 + }
  80 + },
  81 + created() {
  82 + this.communityId = getCommunityId()
  83 + },
  84 + methods: {
  85 + async loadData(params) {
  86 + this.resId = params.resId
  87 + await this.getList()
  88 + },
  89 + async getList() {
  90 + try {
  91 + this.loading = true
  92 + const { purchaseApplyDetails, total } = await getPurchaseApplyDetailList({
  93 + resId: this.resId,
  94 + resOrderType: 20000,
  95 + page: this.page.current,
  96 + row: this.page.size,
  97 + communityId: this.communityId
  98 + })
  99 + this.purchaseApplyDetails = purchaseApplyDetails.map(item => {
  100 + item.purchaseQuantity = item.purchaseQuantity || 0
  101 + item.price = item.price || 0
  102 + item.totalApplyPrice = (item.purchaseQuantity * item.price).toFixed(2)
  103 + return item
  104 + })
  105 + this.page.total = total
  106 + } catch (error) {
  107 + console.error('Failed to load item out details:', error)
  108 + } finally {
  109 + this.loading = false
  110 + }
  111 + },
  112 + viewPurchaseRemark(row) {
  113 + this.$alert(row.purchaseRemark, this.$t('resourceDetail.itemOut.remark'), {
  114 + confirmButtonText: this.$t('common.confirm')
  115 + })
  116 + },
  117 + handleSizeChange(val) {
  118 + this.page.size = val
  119 + this.getList()
  120 + },
  121 + handleCurrentChange(val) {
  122 + this.page.current = val
  123 + this.getList()
  124 + }
  125 + }
  126 +}
  127 +</script>
  128 +
  129 +<style lang="scss" scoped>
  130 +.resource-detail-item-out {
  131 + padding: 20px;
  132 +
  133 + .el-pagination {
  134 + margin-top: 20px;
  135 + text-align: right;
  136 + }
  137 +}
  138 +</style>
0 139 \ No newline at end of file
... ...
src/components/resource/resourceDetailPurchase.vue 0 → 100644
  1 +<template>
  2 + <div class="resource-detail-purchase">
  3 + <el-table v-loading="loading" :data="purchaseApplyDetails" border style="width: 100%">
  4 + <el-table-column prop="applyOrderId" :label="$t('resourceDetail.purchase.applyOrderId')" align="center" />
  5 + <el-table-column prop="userName" :label="$t('resourceDetail.purchase.applicant')" align="center" />
  6 + <el-table-column prop="endUserName" :label="$t('resourceDetail.purchase.endUser')" align="center" />
  7 + <el-table-column :label="$t('resourceDetail.purchase.itemType')" align="center">
  8 + <template slot-scope="scope">
  9 + {{ scope.row.parentRstName }} > {{ scope.row.rstName }}
  10 + </template>
  11 + </el-table-column>
  12 + <el-table-column prop="resName" :label="$t('resourceDetail.purchase.itemName')" align="center" />
  13 + <el-table-column :label="$t('resourceDetail.purchase.itemSpec')" align="center">
  14 + <template slot-scope="scope">
  15 + {{ scope.row.specName || '-' }}
  16 + </template>
  17 + </el-table-column>
  18 + <el-table-column prop="isFixedName" :label="$t('resourceDetail.purchase.fixedItem')" align="center" />
  19 + <el-table-column :label="$t('resourceDetail.purchase.supplier')" align="center">
  20 + <template slot-scope="scope">
  21 + {{ scope.row.supplierName || '-' }}
  22 + </template>
  23 + </el-table-column>
  24 + <el-table-column prop="shName" :label="$t('resourceDetail.purchase.warehouse')" align="center" />
  25 + <el-table-column :label="$t('resourceDetail.purchase.applyQuantity')" align="center">
  26 + <template slot-scope="scope">
  27 + {{ scope.row.quantity }}{{ scope.row.unitCodeName || '' }}
  28 + </template>
  29 + </el-table-column>
  30 + <el-table-column :label="$t('resourceDetail.purchase.actualQuantity')" align="center">
  31 + <template slot-scope="scope">
  32 + {{ scope.row.purchaseQuantity ? scope.row.purchaseQuantity + scope.row.unitCodeName : '-' }}
  33 + </template>
  34 + </el-table-column>
  35 + <el-table-column :label="$t('resourceDetail.purchase.purchasePrice')" align="center">
  36 + <template slot-scope="scope">
  37 + ¥{{ scope.row.price ? scope.row.price : '0.00' }}
  38 + </template>
  39 + </el-table-column>
  40 + <el-table-column :label="$t('resourceDetail.purchase.totalPrice')" align="center">
  41 + <template slot-scope="scope">
  42 + {{ scope.row.totalPrice }}
  43 + </template>
  44 + </el-table-column>
  45 + <el-table-column :label="$t('resourceDetail.purchase.remark')" align="center">
  46 + <template slot-scope="scope">
  47 + {{ scope.row.remark }}
  48 + <el-button v-if="scope.row.purchaseRemark" type="text" icon="el-icon-info"
  49 + @click="viewPurchaseRemark(scope.row)" />
  50 + </template>
  51 + </el-table-column>
  52 + <el-table-column prop="stateName" :label="$t('resourceDetail.purchase.status')" align="center" />
  53 + <el-table-column prop="createTime" :label="$t('resourceDetail.purchase.createTime')" align="center" />
  54 + </el-table>
  55 +
  56 + <el-pagination :current-page.sync="page.current" :page-sizes="[10, 20, 30, 50]" :page-size="page.size"
  57 + :total="page.total" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
  58 + @current-change="handleCurrentChange" />
  59 + </div>
  60 +</template>
  61 +
  62 +<script>
  63 +import { getPurchaseApplyDetailList } from '@/api/resource/resourceDetailApi'
  64 +import { getCommunityId } from '@/api/community/communityApi'
  65 +
  66 +export default {
  67 + name: 'ResourceDetailPurchase',
  68 + data() {
  69 + return {
  70 + loading: false,
  71 + purchaseApplyDetails: [],
  72 + page: {
  73 + current: 1,
  74 + size: 10,
  75 + total: 0
  76 + },
  77 + resId: '',
  78 + communityId: ''
  79 + }
  80 + },
  81 + created() {
  82 + this.communityId = getCommunityId()
  83 + },
  84 + methods: {
  85 + async loadData(params) {
  86 + this.resId = params.resId
  87 + await this.getList()
  88 + },
  89 + async getList() {
  90 + try {
  91 + this.loading = true
  92 + const { purchaseApplyDetails, total } = await getPurchaseApplyDetailList({
  93 + resId: this.resId,
  94 + resOrderType: 10000,
  95 + page: this.page.current,
  96 + row: this.page.size,
  97 + communityId: this.communityId
  98 + })
  99 + this.purchaseApplyDetails = purchaseApplyDetails
  100 + this.page.total = total
  101 + } catch (error) {
  102 + console.error('Failed to load purchase details:', error)
  103 + } finally {
  104 + this.loading = false
  105 + }
  106 + },
  107 + viewPurchaseRemark(row) {
  108 + this.$alert(row.purchaseRemark, this.$t('resourceDetail.purchase.remark'), {
  109 + confirmButtonText: this.$t('common.confirm')
  110 + })
  111 + },
  112 + handleSizeChange(val) {
  113 + this.page.size = val
  114 + this.getList()
  115 + },
  116 + handleCurrentChange(val) {
  117 + this.page.current = val
  118 + this.getList()
  119 + }
  120 + }
  121 +}
  122 +</script>
  123 +
  124 +<style lang="scss" scoped>
  125 +.resource-detail-purchase {
  126 + padding: 20px;
  127 +
  128 + .el-pagination {
  129 + margin-top: 20px;
  130 + text-align: right;
  131 + }
  132 +}
  133 +</style>
0 134 \ No newline at end of file
... ...
src/components/resource/resourceDetailUseRecord.vue 0 → 100644
  1 +<template>
  2 + <div class="resource-detail-use-record">
  3 + <el-table
  4 + v-loading="loading"
  5 + :data="resourceStoreUseRecords"
  6 + border
  7 + style="width: 100%"
  8 + >
  9 + <el-table-column
  10 + prop="rsurId"
  11 + :label="$t('resourceDetail.useRecord.id')"
  12 + align="center"
  13 + />
  14 + <el-table-column
  15 + prop="repairId"
  16 + :label="$t('resourceDetail.useRecord.repairId')"
  17 + align="center"
  18 + />
  19 + <el-table-column
  20 + prop="resId"
  21 + :label="$t('resourceDetail.useRecord.itemId')"
  22 + align="center"
  23 + />
  24 + <el-table-column
  25 + :label="$t('resourceDetail.useRecord.itemType')"
  26 + align="center"
  27 + >
  28 + <template slot-scope="scope">
  29 + {{ scope.row.parentRstName }} > {{ scope.row.rstName }}
  30 + </template>
  31 + </el-table-column>
  32 + <el-table-column
  33 + :label="$t('resourceDetail.useRecord.itemName')"
  34 + align="center"
  35 + >
  36 + <template slot-scope="scope">
  37 + {{ scope.row.resourceStoreName || '-' }}
  38 + </template>
  39 + </el-table-column>
  40 + <el-table-column
  41 + :label="$t('resourceDetail.useRecord.itemSpec')"
  42 + align="center"
  43 + >
  44 + <template slot-scope="scope">
  45 + {{ scope.row.specName || '-' }}
  46 + </template>
  47 + </el-table-column>
  48 + <el-table-column
  49 + prop="isFixedName"
  50 + :label="$t('resourceDetail.useRecord.fixedItem')"
  51 + align="center"
  52 + />
  53 + <el-table-column
  54 + prop="stateName"
  55 + :label="$t('resourceDetail.useRecord.useType')"
  56 + align="center"
  57 + />
  58 + <el-table-column
  59 + :label="$t('resourceDetail.useRecord.useQuantity')"
  60 + align="center"
  61 + >
  62 + <template slot-scope="scope">
  63 + {{ scope.row.quantity }}{{ scope.row.miniUnitCodeName }}
  64 + </template>
  65 + </el-table-column>
  66 + <el-table-column
  67 + :label="$t('resourceDetail.useRecord.itemPrice')"
  68 + align="center"
  69 + >
  70 + <template slot-scope="scope">
  71 + {{ scope.row.unitPrice || '-' }}
  72 + </template>
  73 + </el-table-column>
  74 + <el-table-column
  75 + prop="createUserId"
  76 + :label="$t('resourceDetail.useRecord.userId')"
  77 + align="center"
  78 + />
  79 + <el-table-column
  80 + prop="createUserName"
  81 + :label="$t('resourceDetail.useRecord.userName')"
  82 + align="center"
  83 + />
  84 + <el-table-column
  85 + prop="createTime"
  86 + :label="$t('resourceDetail.useRecord.createTime')"
  87 + align="center"
  88 + />
  89 + <el-table-column
  90 + prop="remark"
  91 + :label="$t('resourceDetail.useRecord.remark')"
  92 + align="center"
  93 + />
  94 + </el-table>
  95 +
  96 + <el-pagination
  97 + :current-page.sync="page.current"
  98 + :page-sizes="[10, 20, 30, 50]"
  99 + :page-size="page.size"
  100 + :total="page.total"
  101 + layout="total, sizes, prev, pager, next, jumper"
  102 + @size-change="handleSizeChange"
  103 + @current-change="handleCurrentChange"
  104 + />
  105 + </div>
  106 +</template>
  107 +
  108 +<script>
  109 +import { getResourceStoreUseRecordList } from '@/api/resource/resourceDetailApi'
  110 +import { getCommunityId } from '@/api/community/communityApi'
  111 +
  112 +export default {
  113 + name: 'ResourceDetailUseRecord',
  114 + data() {
  115 + return {
  116 + loading: false,
  117 + resourceStoreUseRecords: [],
  118 + page: {
  119 + current: 1,
  120 + size: 10,
  121 + total: 0
  122 + },
  123 + resId: '',
  124 + communityId: ''
  125 + }
  126 + },
  127 + created() {
  128 + this.communityId = getCommunityId()
  129 + },
  130 + methods: {
  131 + async loadData(params) {
  132 + this.resId = params.resId
  133 + await this.getList()
  134 + },
  135 + async getList() {
  136 + try {
  137 + this.loading = true
  138 + const { data, total } = await getResourceStoreUseRecordList({
  139 + resId: this.resId,
  140 + page: this.page.current,
  141 + row: this.page.size,
  142 + communityId: this.communityId
  143 + })
  144 + this.resourceStoreUseRecords = data
  145 + this.page.total = total
  146 + } catch (error) {
  147 + console.error('Failed to load use record details:', error)
  148 + } finally {
  149 + this.loading = false
  150 + }
  151 + },
  152 + handleSizeChange(val) {
  153 + this.page.size = val
  154 + this.getList()
  155 + },
  156 + handleCurrentChange(val) {
  157 + this.page.current = val
  158 + this.getList()
  159 + }
  160 + }
  161 +}
  162 +</script>
  163 +
  164 +<style lang="scss" scoped>
  165 +.resource-detail-use-record {
  166 + padding: 20px;
  167 +
  168 + .el-pagination {
  169 + margin-top: 20px;
  170 + text-align: right;
  171 + }
  172 +}
  173 +</style>
0 174 \ No newline at end of file
... ...
src/i18n/resourceI18n.js
... ... @@ -19,6 +19,7 @@ import { messages as myResourceStoreManageMessages } from &#39;../views/resource/myR
19 19 import { messages as allocationUserStorehouseManageMessages } from '../views/resource/allocationUserStorehouseManageLang'
20 20 import { messages as resourceStoreUseRecordManageMessages } from '../views/resource/resourceStoreUseRecordManageLang'
21 21 import { messages as printEquipmentAccountLabelMessages } from '../views/resource/printEquipmentAccountLabelLang'
  22 +import { messages as resourceDetailMessages } from '../views/resource/resourceDetailLang'
22 23  
23 24  
24 25 export const messages = {
... ... @@ -43,6 +44,7 @@ export const messages = {
43 44 ...allocationUserStorehouseManageMessages.en,
44 45 ...resourceStoreUseRecordManageMessages.en,
45 46 ...printEquipmentAccountLabelMessages.en,
  47 + ...resourceDetailMessages.en,
46 48 },
47 49 zh: {
48 50 ...resourceAuditFlowMessages.zh,
... ... @@ -65,5 +67,6 @@ export const messages = {
65 67 ...allocationUserStorehouseManageMessages.zh,
66 68 ...resourceStoreUseRecordManageMessages.zh,
67 69 ...printEquipmentAccountLabelMessages.zh,
  70 + ...resourceDetailMessages.zh,
68 71 }
69 72 }
70 73 \ No newline at end of file
... ...
src/router/resourceRouter.js
... ... @@ -100,5 +100,10 @@ export default [
100 100 name: '/pages/common/resourceStoreUseRecordManage',
101 101 component: () => import('@/views/resource/resourceStoreUseRecordManageList.vue')
102 102 },
  103 + {
  104 + path:'/views/resource/resourceDetail',
  105 + name:'/views/resource/resourceDetail',
  106 + component: () => import('@/views/resource/resourceDetailList.vue')
  107 + },
103 108  
104 109 ]
105 110 \ No newline at end of file
... ...
src/views/layout/layout.vue
... ... @@ -201,6 +201,7 @@ export default {
201 201 }
202 202 setCurrentCommunity(community);
203 203 this.curCommunityName = getCommunityName()
  204 + window.location.href="/"
204 205 },
205 206 handleMenuSelect(index) {
206 207 // 处理菜单选择
... ...
src/views/resource/resourceDetailLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + resourceDetail: {
  4 + itemInfo: 'Item Information',
  5 + itemNameWithCode: 'Item Name(Code):',
  6 + warehouseName: 'Warehouse Name:',
  7 + itemType: 'Item Type:',
  8 + itemSpec: 'Item Specification:',
  9 + fixedItem: 'Fixed Item:',
  10 + referencePrice: 'Reference Price:',
  11 + chargeStandard: 'Charge Standard:',
  12 + itemStock: 'Item Stock:',
  13 + minMeasurement: 'Minimum Measurement:',
  14 + minMeasurementTotal: 'Minimum Measurement Total:',
  15 + itemAvgPrice: 'Item Average Price:',
  16 + purchaseRecord: 'Purchase Record',
  17 + useRecordText: 'Use Record',
  18 + inventoryRecord: 'Inventory Record',
  19 + allocationRecord: 'Allocation Record',
  20 + transferRecord: 'Transfer Record',
  21 + usageRecord: 'Usage Record',
  22 + purchase: {
  23 + applyOrderId: 'Application No.',
  24 + applicant: 'Applicant',
  25 + endUser: 'End User',
  26 + itemType: 'Item Type',
  27 + itemName: 'Item Name',
  28 + itemSpec: 'Item Specification',
  29 + fixedItem: 'Fixed Item',
  30 + supplier: 'Supplier',
  31 + warehouse: 'Warehouse',
  32 + applyQuantity: 'Application Quantity',
  33 + actualQuantity: 'Actual Quantity',
  34 + purchasePrice: 'Purchase Price',
  35 + totalPrice: 'Total Price',
  36 + remark: 'Remark',
  37 + status: 'Status',
  38 + createTime: 'Create Time'
  39 + },
  40 + itemOut: {
  41 + applyOrderId: 'Application No.',
  42 + applicant: 'Applicant',
  43 + endUser: 'End User',
  44 + itemType: 'Item Type',
  45 + itemName: 'Item Name',
  46 + itemSpec: 'Item Specification',
  47 + fixedItem: 'Fixed Item',
  48 + supplier: 'Supplier',
  49 + warehouse: 'Warehouse',
  50 + applyQuantity: 'Application Quantity',
  51 + quantity: 'Quantity',
  52 + purchasePrice: 'Purchase Price',
  53 + totalPrice: 'Total Price',
  54 + remark: 'Remark',
  55 + status: 'Status',
  56 + createTime: 'Create Time'
  57 + },
  58 + inventory: {
  59 + inventoryId: 'Inventory No.',
  60 + inventoryName: 'Inventory Name',
  61 + inventoryTime: 'Inventory Time',
  62 + warehouse: 'Warehouse',
  63 + inventoryPerson: 'Inventory Person',
  64 + status: 'Status',
  65 + createTime: 'Create Time'
  66 + },
  67 + allocation: {
  68 + allocationId: 'Allocation No.',
  69 + itemType: 'Item Type',
  70 + itemName: 'Item Name',
  71 + itemSpec: 'Item Specification',
  72 + fixedItem: 'Fixed Item',
  73 + originalStock: 'Original Stock',
  74 + allocationQuantity: 'Allocation Quantity',
  75 + sourceWarehouse: 'Source Warehouse',
  76 + targetWarehouse: 'Target Warehouse',
  77 + applicant: 'Applicant',
  78 + remark: 'Remark',
  79 + allocationType: 'Allocation Type',
  80 + status: 'Status',
  81 + createTime: 'Create Time'
  82 + },
  83 + allocationUser: {
  84 + id: 'ID',
  85 + itemType: 'Item Type',
  86 + itemName: 'Item Name',
  87 + itemSpec: 'Item Specification',
  88 + fixedItem: 'Fixed Item',
  89 + transferUser: 'Transfer User',
  90 + transferTarget: 'Transfer Target',
  91 + originalStock: 'Original Stock',
  92 + transferQuantity: 'Transfer Quantity',
  93 + createTime: 'Create Time',
  94 + remark: 'Remark'
  95 + },
  96 + useRecord: {
  97 + id: 'ID',
  98 + repairId: 'Repair ID',
  99 + itemId: 'Item ID',
  100 + itemType: 'Item Type',
  101 + itemName: 'Item Name',
  102 + itemSpec: 'Item Specification',
  103 + fixedItem: 'Fixed Item',
  104 + useType: 'Use Type',
  105 + useQuantity: 'Use Quantity',
  106 + itemPrice: 'Item Price',
  107 + userId: 'User ID',
  108 + userName: 'User Name',
  109 + createTime: 'Create Time',
  110 + remark: 'Remark'
  111 + }
  112 + }
  113 + },
  114 + zh: {
  115 + resourceDetail: {
  116 + itemInfo: '物品信息',
  117 + itemNameWithCode: '物品名称(编号):',
  118 + warehouseName: '仓库名称:',
  119 + itemType: '物品类型:',
  120 + itemSpec: '物品规格:',
  121 + fixedItem: '固定物品:',
  122 + referencePrice: '参考价格:',
  123 + chargeStandard: '收费标准:',
  124 + itemStock: '物品库存:',
  125 + minMeasurement: '最小计量:',
  126 + minMeasurementTotal: '最小计量总数:',
  127 + itemAvgPrice: '物品均价:',
  128 + purchaseRecord: '采购记录',
  129 + useRecordText: '领用记录',
  130 + inventoryRecord: '盘点记录',
  131 + allocationRecord: '调拨记录',
  132 + transferRecord: '转赠记录',
  133 + usageRecord: '使用记录',
  134 + purchase: {
  135 + applyOrderId: '申请单号',
  136 + applicant: '申请人',
  137 + endUser: '使用人',
  138 + itemType: '物品类型',
  139 + itemName: '物品名称',
  140 + itemSpec: '物品规格',
  141 + fixedItem: '固定物品',
  142 + supplier: '供应商',
  143 + warehouse: '物品仓库',
  144 + applyQuantity: '申请数量',
  145 + actualQuantity: '实际采购数量',
  146 + purchasePrice: '采购价格',
  147 + totalPrice: '总价',
  148 + remark: '申请备注',
  149 + status: '状态',
  150 + createTime: '创建时间'
  151 + },
  152 + itemOut: {
  153 + applyOrderId: '申请单号',
  154 + applicant: '申请人',
  155 + endUser: '使用人',
  156 + itemType: '物品类型',
  157 + itemName: '物品名称',
  158 + itemSpec: '物品规格',
  159 + fixedItem: '固定物品',
  160 + supplier: '供应商',
  161 + warehouse: '物品仓库',
  162 + applyQuantity: '申请数量',
  163 + quantity: '数量',
  164 + purchasePrice: '采购价格',
  165 + totalPrice: '总价',
  166 + remark: '申请备注',
  167 + status: '状态',
  168 + createTime: '创建时间'
  169 + },
  170 + inventory: {
  171 + inventoryId: '盘点单号',
  172 + inventoryName: '盘点名称',
  173 + inventoryTime: '盘点时间',
  174 + warehouse: '盘点仓库',
  175 + inventoryPerson: '盘点人',
  176 + status: '状态',
  177 + createTime: '创建时间'
  178 + },
  179 + allocation: {
  180 + allocationId: '调拨单号',
  181 + itemType: '物品类型',
  182 + itemName: '物品名称',
  183 + itemSpec: '物品规格',
  184 + fixedItem: '固定物品',
  185 + originalStock: '被调仓库原库存',
  186 + allocationQuantity: '调拨数量',
  187 + sourceWarehouse: '被调仓库',
  188 + targetWarehouse: '目标仓库',
  189 + applicant: '申请人',
  190 + remark: '调拨备注',
  191 + allocationType: '调拨类型',
  192 + status: '状态',
  193 + createTime: '时间'
  194 + },
  195 + allocationUser: {
  196 + id: '编号',
  197 + itemType: '物品类型',
  198 + itemName: '物品名称',
  199 + itemSpec: '物品规格',
  200 + fixedItem: '固定物品',
  201 + transferUser: '转赠人',
  202 + transferTarget: '转赠对象',
  203 + originalStock: '原有库存',
  204 + transferQuantity: '转赠数量',
  205 + createTime: '创建时间',
  206 + remark: '备注'
  207 + },
  208 + useRecord: {
  209 + id: '编号',
  210 + repairId: '维修编号',
  211 + itemId: '物品编号',
  212 + itemType: '物品类型',
  213 + itemName: '物品名称',
  214 + itemSpec: '物品规格',
  215 + fixedItem: '固定物品',
  216 + useType: '使用类型',
  217 + useQuantity: '使用数量',
  218 + itemPrice: '物品价格',
  219 + userId: '使用人ID',
  220 + userName: '使用人',
  221 + createTime: '创建时间',
  222 + remark: '备注'
  223 + }
  224 + }
  225 + }
  226 +}
0 227 \ No newline at end of file
... ...
src/views/resource/resourceDetailList.vue 0 → 100644
  1 +<template>
  2 + <div class="resource-detail-container">
  3 + <el-card class="box-card">
  4 + <div slot="header" class="flex justify-between">
  5 + <span>{{ $t('resourceDetail.itemInfo') }}</span>
  6 + </div>
  7 + <div class="white-bg border-radius-top">
  8 + <div class="margin-top text-left">
  9 + <el-row>
  10 + <el-col :span="24">
  11 + <el-row>
  12 + <el-col :span="6">
  13 + <div class="form-group">
  14 + <label class="col-form-label">
  15 + {{ $t('resourceDetail.itemNameWithCode') }}
  16 + </label>
  17 + <label class="">{{ resourceDetailInfo.resName }}({{ resourceDetailInfo.resCode }})</label>
  18 + </div>
  19 + </el-col>
  20 + <el-col :span="6">
  21 + <div class="form-group">
  22 + <label class="col-form-label">
  23 + {{ $t('resourceDetail.warehouseName') }}
  24 + </label>
  25 + <label class="">{{ resourceDetailInfo.shName }}</label>
  26 + </div>
  27 + </el-col>
  28 + <el-col :span="6">
  29 + <div class="form-group">
  30 + <label class="col-form-label">
  31 + {{ $t('resourceDetail.itemType') }}
  32 + </label>
  33 + <label class="">{{ resourceDetailInfo.parentRstName }}
  34 + {{ resourceDetailInfo.rstName ? ' > ' + resourceDetailInfo.rstName : '' }}</label>
  35 + </div>
  36 + </el-col>
  37 + <el-col :span="6">
  38 + <div class="form-group">
  39 + <label class="col-form-label">
  40 + {{ $t('resourceDetail.itemSpec') }}
  41 + </label>
  42 + <label class="">
  43 + {{ resourceDetailInfo.rssName ? resourceDetailInfo.rssName : '-' }}
  44 + </label>
  45 + </div>
  46 + </el-col>
  47 + </el-row>
  48 +
  49 + <el-row>
  50 + <el-col :span="6">
  51 + <div class="form-group">
  52 + <label class="col-form-label">
  53 + {{ $t('resourceDetail.fixedItem') }}
  54 + </label>
  55 + <label class="">{{ resourceDetailInfo.isFixedName }}</label>
  56 + </div>
  57 + </el-col>
  58 + <el-col :span="6">
  59 + <div class="form-group">
  60 + <label class="col-form-label">
  61 + {{ $t('resourceDetail.referencePrice') }}
  62 + </label>
  63 + <label class="">{{ '¥' + resourceDetailInfo.price }}</label>
  64 + </div>
  65 + </el-col>
  66 + <el-col :span="6">
  67 + <div class="form-group">
  68 + <label class="col-form-label">
  69 + {{ $t('resourceDetail.chargeStandard') }}
  70 + </label>
  71 + <label class="">{{ resourceDetailInfo.outHighPrice ==
  72 + resourceDetailInfo.outLowPrice ? '¥' +
  73 + resourceDetailInfo.outLowPrice : '¥' + resourceDetailInfo.outLowPrice + '-¥' +
  74 + resourceDetailInfo.outHighPrice }}</label>
  75 + </div>
  76 + </el-col>
  77 + <el-col :span="6">
  78 + <div class="form-group">
  79 + <label class="col-form-label">
  80 + {{ $t('resourceDetail.itemStock') }}
  81 + </label>
  82 + <label class="">{{ resourceDetailInfo.stock }}{{ resourceDetailInfo.unitCodeName }}</label>
  83 + </div>
  84 + </el-col>
  85 + </el-row>
  86 +
  87 + <el-row>
  88 + <el-col :span="6">
  89 + <div class="form-group">
  90 + <label class="col-form-label">
  91 + {{ $t('resourceDetail.minMeasurement') }}
  92 + </label>
  93 + <label
  94 + class="">1{{ resourceDetailInfo.unitCodeName }}={{ resourceDetailInfo.miniUnitStock }}{{ resourceDetailInfo.miniUnitCodeName }}</label>
  95 + </div>
  96 + </el-col>
  97 + <el-col :span="6">
  98 + <div class="form-group">
  99 + <label class="col-form-label">
  100 + {{ $t('resourceDetail.minMeasurementTotal') }}
  101 + </label>
  102 + <label class="">{{ resourceDetailInfo.miniStock }}{{ resourceDetailInfo.miniUnitCodeName }}</label>
  103 + </div>
  104 + </el-col>
  105 + <el-col :span="6">
  106 + <div class="form-group">
  107 + <label class="col-form-label">
  108 + {{ $t('resourceDetail.itemAvgPrice') }}
  109 + </label>
  110 + <label class="">{{ resourceDetailInfo.averagePrice ? '¥' +
  111 + resourceDetailInfo.averagePrice : '¥0' }}</label>
  112 + </div>
  113 + </el-col>
  114 + </el-row>
  115 + </el-col>
  116 + </el-row>
  117 + </div>
  118 +
  119 + <divider />
  120 +
  121 + <div class="margin-top-sm">
  122 + <el-tabs v-model="resourceDetailInfo._currentTab" @tab-click="changeTab(resourceDetailInfo._currentTab)">
  123 + <el-tab-pane :label="$t('resourceDetail.purchaseRecord')" name="resourceDetailPurchase">
  124 + <resource-detail-purchase ref="resourceDetailPurchase"
  125 + v-if="resourceDetailInfo._currentTab === 'resourceDetailPurchase'" />
  126 + </el-tab-pane>
  127 + <el-tab-pane :label="$t('resourceDetail.useRecordText')" name="resourceDetailItemOut">
  128 + <resource-detail-item-out ref="resourceDetailItemOut"
  129 + v-if="resourceDetailInfo._currentTab === 'resourceDetailItemOut'" />
  130 + </el-tab-pane>
  131 + <el-tab-pane :label="$t('resourceDetail.inventoryRecord')" name="resourceDetailInventory">
  132 + <resource-detail-inventory ref="resourceDetailInventory"
  133 + v-if="resourceDetailInfo._currentTab === 'resourceDetailInventory'" />
  134 + </el-tab-pane>
  135 + <el-tab-pane :label="$t('resourceDetail.allocationRecord')" name="resourceDetailAllocation">
  136 + <resource-detail-allocation ref="resourceDetailAllocation"
  137 + v-if="resourceDetailInfo._currentTab === 'resourceDetailAllocation'" />
  138 + </el-tab-pane>
  139 + <el-tab-pane :label="$t('resourceDetail.transferRecord')" name="resourceDetailAllocationUser">
  140 + <resource-detail-allocation-user ref="resourceDetailAllocationUser"
  141 + v-if="resourceDetailInfo._currentTab === 'resourceDetailAllocationUser'" />
  142 + </el-tab-pane>
  143 + <el-tab-pane :label="$t('resourceDetail.usageRecord')" name="resourceDetailUseRecord">
  144 + <resource-detail-use-record ref="resourceDetailUseRecord"
  145 + v-if="resourceDetailInfo._currentTab === 'resourceDetailUseRecord'" />
  146 + </el-tab-pane>
  147 + </el-tabs>
  148 + </div>
  149 + </div>
  150 + </el-card>
  151 + </div>
  152 +</template>
  153 +
  154 +<script>
  155 +import { getCommunityId } from '@/api/community/communityApi'
  156 +import ResourceDetailPurchase from '@/components/resource/resourceDetailPurchase'
  157 +import ResourceDetailItemOut from '@/components/resource/resourceDetailItemOut'
  158 +import ResourceDetailInventory from '@/components/resource/resourceDetailInventory'
  159 +import ResourceDetailAllocation from '@/components/resource/resourceDetailAllocation'
  160 +import ResourceDetailAllocationUser from '@/components/resource/resourceDetailAllocationUser'
  161 +import ResourceDetailUseRecord from '@/components/resource/resourceDetailUseRecord'
  162 +import { getResourceStoreList } from '@/api/resource/resourceDetailApi'
  163 +import divider from '@/components/system/divider'
  164 +
  165 +export default {
  166 + name: 'ResourceDetailList',
  167 + components: {
  168 + ResourceDetailPurchase,
  169 + ResourceDetailItemOut,
  170 + ResourceDetailInventory,
  171 + ResourceDetailAllocation,
  172 + ResourceDetailAllocationUser,
  173 + ResourceDetailUseRecord,
  174 + divider
  175 + },
  176 + data() {
  177 + return {
  178 + resourceDetailInfo: {
  179 + resId: '',
  180 + shName: '',
  181 + parentRstName: '',
  182 + rstName: '',
  183 + resName: '',
  184 + resCode: '',
  185 + rssName: '',
  186 + isFixedName: '',
  187 + price: '',
  188 + outHighPrice: '',
  189 + outLowPrice: '',
  190 + stock: '',
  191 + unitCodeName: '',
  192 + miniUnitStock: '',
  193 + miniUnitCodeName: '',
  194 + miniStock: '',
  195 + averagePrice: '',
  196 + _currentTab: 'resourceDetailPurchase',
  197 + needBack: false
  198 + },
  199 + communityId: ''
  200 + }
  201 + },
  202 + created() {
  203 + this.communityId = getCommunityId()
  204 + this.resourceDetailInfo.resId = this.$route.query.resId
  205 + if (!this.resourceDetailInfo.resId) {
  206 + return
  207 + }
  208 + this.loadResourceDetailInfo()
  209 + },
  210 + methods: {
  211 + async loadResourceDetailInfo() {
  212 + try {
  213 + const params = {
  214 + page: 1,
  215 + row: 1,
  216 + resId: this.resourceDetailInfo.resId,
  217 + communityId: this.communityId
  218 + }
  219 +
  220 + const { resourceStores } = await getResourceStoreList(params)
  221 + if (resourceStores && resourceStores.length > 0) {
  222 + Object.assign(this.resourceDetailInfo, resourceStores[0])
  223 + this.changeTab(this.resourceDetailInfo._currentTab)
  224 + }
  225 + } catch (error) {
  226 + console.error('Failed to load resource detail:', error)
  227 + }
  228 + },
  229 + changeTab(tabName) {
  230 + this.resourceDetailInfo._currentTab = tabName
  231 + setTimeout(() => {
  232 + const tabRef = this.$refs[`${tabName}`]
  233 + if (tabRef && tabRef.loadData) {
  234 + tabRef.loadData({ resId: this.resourceDetailInfo.resId })
  235 + }
  236 + }, 500)
  237 + }
  238 + }
  239 +}
  240 +</script>
  241 +
  242 +<style lang="scss" scoped>
  243 +.resource-detail-container {
  244 + padding: 20px;
  245 +
  246 + .box-card {
  247 + margin-bottom: 20px;
  248 + }
  249 +
  250 + .white-bg {
  251 + background-color: #fff;
  252 + }
  253 +
  254 + .padding-left {
  255 + padding-left: 20px;
  256 + }
  257 +
  258 + .padding-right {
  259 + padding-right: 20px;
  260 + }
  261 +
  262 + .padding-top {
  263 + padding-top: 20px;
  264 + }
  265 +
  266 + .border-radius-top {
  267 + border-radius: 4px 4px 0 0;
  268 + }
  269 +
  270 + .border-radius-bottom {
  271 + border-radius: 0 0 4px 4px;
  272 + }
  273 +
  274 + .margin-top {
  275 + margin-top: 20px;
  276 + }
  277 +
  278 + .margin-top-sm {
  279 + margin-top: 10px;
  280 + }
  281 +
  282 + .text-title {
  283 + font-size: 16px;
  284 + font-weight: bold;
  285 + }
  286 +
  287 + .vc-line-primary {
  288 + height: 1px;
  289 + background-color: #ebeef5;
  290 + }
  291 +
  292 + .form-group {
  293 + margin-bottom: 15px;
  294 +
  295 + .col-form-label {
  296 + margin-bottom: 5px;
  297 + }
  298 + }
  299 +
  300 + .flex {
  301 + display: flex;
  302 + }
  303 +
  304 + .justify-between {
  305 + justify-content: space-between;
  306 + }
  307 +}
  308 +</style>
0 309 \ No newline at end of file
... ...
src/views/resource/resourceStoreManageLang.js
... ... @@ -115,7 +115,8 @@ export const messages = {
115 115 deleteTypeSuccess: 'Delete type success',
116 116 inboundTime: 'Inbound Time',
117 117 unitPrice: 'Unit Price',
118   - fetchTotalPriceError: 'Failed to get total price details'
  118 + fetchTotalPriceError: 'Failed to get total price details',
  119 + storehouse: 'Storehouse'
119 120 }
120 121 },
121 122 zh: {
... ... @@ -234,7 +235,8 @@ export const messages = {
234 235 deleteTypeSuccess: '删除类型成功',
235 236 inboundTime: '入库时间',
236 237 unitPrice: '单价',
237   - fetchTotalPriceError: '获取物品总价详情失败'
  238 + fetchTotalPriceError: '获取物品总价详情失败',
  239 + storehouse: '仓库'
238 240 }
239 241 }
240 242 }
241 243 \ No newline at end of file
... ...
src/views/resource/resourceStoreManageList.vue
... ... @@ -218,7 +218,7 @@
218 218  
219 219 <script>
220 220 import { getDict, getCommunityId } from '@/api/community/communityApi'
221   -import { listResourceStores, exportResourceStoreData, listResourceStoreSpecifications, listStorehouses, listResourceStoreTypes } from '@/api/resource/resourceStoreManageApi'
  221 +import { listResourceStores, exportData, listResourceStoreSpecifications, listStorehouses, listResourceStoreTypes } from '@/api/resource/resourceStoreManageApi'
222 222 //import { } from '@/api/resource/resourceStoreTypeApi'
223 223 import ResourceStoreTypeTree from '@/components/resource/resourceStoreTypeTree'
224 224 import AddResourceStore from '@/components/resource/addResourceStore'
... ... @@ -460,8 +460,11 @@ export default {
460 460 async exportExcel() {
461 461 try {
462 462 this.resourceStoreManageInfo.conditions.pagePath = 'resourceStoreManage'
463   - await exportResourceStoreData(this.resourceStoreManageInfo.conditions)
  463 + const res = await exportData(this.resourceStoreManageInfo.conditions)
464 464 this.$message.success(this.$t('resourceStoreManage.exportSuccess'))
  465 + if(res && res.code === 0){
  466 + window.open('/#/pages/property/downloadTempFile?tab=下载中心')
  467 + }
465 468 } catch (error) {
466 469 console.error('导出失败:', error)
467 470 this.$message.error(this.$t('resourceStoreManage.exportFailed'))
... ... @@ -470,7 +473,7 @@ export default {
470 473  
471 474 jump2InPage() {
472 475 this.$router.push({
473   - path: '/resource/addPurchaseApply',
  476 + path: '/views/resource/addPurchaseApply',
474 477 query: {
475 478 resOrderType: '10000',
476 479 purchaseSwitch: 'OFF'
... ... @@ -480,7 +483,7 @@ export default {
480 483  
481 484 jump2OutPage() {
482 485 this.$router.push({
483   - path: '/resource/addItemOut',
  486 + path: '/views/resource/addItemOut',
484 487 query: {
485 488 resOrderType: '20000',
486 489 from: 'resourceStore'
... ... @@ -489,7 +492,7 @@ export default {
489 492 },
490 493  
491 494 toResourceStoreDetail(resource) {
492   - window.open(`/#/resource/resourceDetail?resId=${resource.resId}`)
  495 + window.open(`/#/views/resource/resourceDetail?resId=${resource.resId}`)
493 496 },
494 497  
495 498 goBack() {
... ...