Commit 9bb8cd939f30213d7f23c53226ad3065d1f92dcf
1 parent
fe758814
优化采购模块
Showing
19 changed files
with
1619 additions
and
28 deletions
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 '../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
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() { | ... | ... |