Commit 10d41618a894bd849dd8f7dd91c930dac635f507

Authored by wuxw
1 parent baee4721

v1.9 测试采购功能,部分页面功能优化

src/components/resource/chooseResourceStore4.vue
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 <el-dialog :title="$t('chooseResourceStore4.title')" :visible.sync="visible" width="80%" @close="handleClose"> 2 <el-dialog :title="$t('chooseResourceStore4.title')" :visible.sync="visible" width="80%" @close="handleClose">
3 <div class="filter-container"> 3 <div class="filter-container">
4 <el-row :gutter="20"> 4 <el-row :gutter="20">
5 - <el-col :span="8"> 5 + <el-col :span="4">
6 <el-select v-model="chooseResourceStoreInfo4.shId" disabled style="width:100%"> 6 <el-select v-model="chooseResourceStoreInfo4.shId" disabled style="width:100%">
7 <el-option value="" :label="$t('chooseResourceStore4.selectWarehouse')" /> 7 <el-option value="" :label="$t('chooseResourceStore4.selectWarehouse')" />
8 <el-option v-for="(item, index) in chooseResourceStoreInfo4.storehouses" :key="index" :label="item.shName" 8 <el-option v-for="(item, index) in chooseResourceStoreInfo4.storehouses" :key="index" :label="item.shName"
@@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
10 </el-select> 10 </el-select>
11 </el-col> 11 </el-col>
12 12
13 - <el-col :span="8"> 13 + <el-col :span="4">
14 <el-select v-model="chooseResourceStoreInfo4.parentRstId" @change="_listResourceStoreSonTypes" 14 <el-select v-model="chooseResourceStoreInfo4.parentRstId" @change="_listResourceStoreSonTypes"
15 style="width:100%"> 15 style="width:100%">
16 <el-option value="" :label="$t('chooseResourceStore4.selectItemType')" /> 16 <el-option value="" :label="$t('chooseResourceStore4.selectItemType')" />
@@ -19,21 +19,19 @@ @@ -19,21 +19,19 @@
19 </el-select> 19 </el-select>
20 </el-col> 20 </el-col>
21 21
22 - <el-col :span="8"> 22 + <el-col :span="4">
23 <el-select v-model="chooseResourceStoreInfo4.rstId" style="width:100%;margin-right:10px"> 23 <el-select v-model="chooseResourceStoreInfo4.rstId" style="width:100%;margin-right:10px">
24 <el-option value="" :label="$t('chooseResourceStore4.selectSubType')" /> 24 <el-option value="" :label="$t('chooseResourceStore4.selectSubType')" />
25 <el-option v-for="(item, index) in chooseResourceStoreInfo4.resourceStoreSonTypes" :key="index" 25 <el-option v-for="(item, index) in chooseResourceStoreInfo4.resourceStoreSonTypes" :key="index"
26 :label="item.name" :value="item.rstId" /> 26 :label="item.name" :value="item.rstId" />
27 </el-select> 27 </el-select>
28 </el-col> 28 </el-col>
29 - </el-row>  
30 -  
31 - <el-row :gutter="20" style="margin-top:10px">  
32 - <el-col :span="8"> 29 +4
  30 + <el-col :span="4">
33 <el-input v-model.trim="chooseResourceStoreInfo4._currentResourceStoreName" 31 <el-input v-model.trim="chooseResourceStoreInfo4._currentResourceStoreName"
34 :placeholder="$t('chooseResourceStore4.inputItemName')" /> 32 :placeholder="$t('chooseResourceStore4.inputItemName')" />
35 </el-col> 33 </el-col>
36 - <el-col :span="16" style="text-align:right"> 34 + <el-col :span="4" style="text-align:right">
37 <el-button type="primary" @click="queryResourceStores"> 35 <el-button type="primary" @click="queryResourceStores">
38 <i class="el-icon-search"></i> 36 <i class="el-icon-search"></i>
39 {{ $t('common.search') }} 37 {{ $t('common.search') }}
src/components/system/viewImage.vue
@@ -2,20 +2,21 @@ @@ -2,20 +2,21 @@
2 <div class="view-image-container"> 2 <div class="view-image-container">
3 <el-dialog 3 <el-dialog
4 :visible.sync="visible" 4 :visible.sync="visible"
5 - :fullscreen="true" 5 + :width="dialogWidth"
6 :show-close="true" 6 :show-close="true"
7 custom-class="image-viewer-dialog" 7 custom-class="image-viewer-dialog"
  8 + @close="close"
  9 + center
8 > 10 >
9 <div class="image-wrapper"> 11 <div class="image-wrapper">
10 <img 12 <img
11 :src="imageInfo.url" 13 :src="imageInfo.url"
12 :style="{ 14 :style="{
13 - width: imageInfo.width + 'px',  
14 - height: imageInfo.height + 'px' 15 + maxWidth: '100%',
  16 + maxHeight: imageInfo.maxHeight + 'px'
15 }" 17 }"
16 @error="handleImageError" 18 @error="handleImageError"
17 /> 19 />
18 - <i class="el-icon-close close-icon" @click="close"></i>  
19 </div> 20 </div>
20 </el-dialog> 21 </el-dialog>
21 </div> 22 </div>
@@ -27,10 +28,10 @@ export default { @@ -27,10 +28,10 @@ export default {
27 data() { 28 data() {
28 return { 29 return {
29 visible: false, 30 visible: false,
  31 + dialogWidth: '50%',
30 imageInfo: { 32 imageInfo: {
31 url: '', 33 url: '',
32 - width: 800,  
33 - height: 800 34 + maxHeight: 600
34 } 35 }
35 } 36 }
36 }, 37 },
@@ -39,21 +40,24 @@ export default { @@ -39,21 +40,24 @@ export default {
39 this.imageInfo.url = params.url 40 this.imageInfo.url = params.url
40 this.visible = true 41 this.visible = true
41 42
42 - // 动态计算图片尺寸  
43 - const img = new Image()  
44 - img.src = params.url  
45 - img.onload = () => {  
46 - const imgScale = img.width / img.height  
47 - this.imageInfo.width = 800  
48 - this.imageInfo.height = 800 / imgScale 43 + // 根据屏幕尺寸动态调整对话框大小
  44 + const screenWidth = window.innerWidth
  45 + if (screenWidth < 768) {
  46 + this.dialogWidth = '90%'
  47 + this.imageInfo.maxHeight = 400
  48 + } else if (screenWidth < 1200) {
  49 + this.dialogWidth = '70%'
  50 + this.imageInfo.maxHeight = 500
  51 + } else {
  52 + this.dialogWidth = '50%'
  53 + this.imageInfo.maxHeight = 600
49 } 54 }
50 }, 55 },
51 close() { 56 close() {
52 this.visible = false 57 this.visible = false
53 this.imageInfo = { 58 this.imageInfo = {
54 url: '', 59 url: '',
55 - width: 800,  
56 - height: 800 60 + maxHeight: 600
57 } 61 }
58 }, 62 },
59 handleImageError(e) { 63 handleImageError(e) {
@@ -65,34 +69,28 @@ export default { @@ -65,34 +69,28 @@ export default {
65 69
66 <style lang="scss" scoped> 70 <style lang="scss" scoped>
67 .view-image-container { 71 .view-image-container {
68 - .image-viewer-dialog {  
69 - background-color: rgba(0, 0, 0, 0.8); 72 + ::v-deep .image-viewer-dialog {
  73 + .el-dialog__header {
  74 + padding: 10px;
  75 + }
  76 +
  77 + .el-dialog__body {
  78 + padding: 20px;
  79 + text-align: center;
  80 + }
70 81
71 .image-wrapper { 82 .image-wrapper {
72 - position: relative;  
73 display: flex; 83 display: flex;
74 justify-content: center; 84 justify-content: center;
75 align-items: center; 85 align-items: center;
76 - height: 100%; 86 + min-height: 200px;
77 87
78 img { 88 img {
79 - max-width: 90%;  
80 - max-height: 90%; 89 + display: block;
  90 + width: auto;
  91 + height: auto;
81 object-fit: contain; 92 object-fit: contain;
82 - }  
83 -  
84 - .close-icon {  
85 - position: absolute;  
86 - top: 20px;  
87 - right: 20px;  
88 - font-size: 24px;  
89 - color: #fff;  
90 - cursor: pointer;  
91 - z-index: 2001;  
92 -  
93 - &:hover {  
94 - color: #f56c6c;  
95 - } 93 + border-radius: 4px;
96 } 94 }
97 } 95 }
98 } 96 }
src/router/index.js
@@ -753,6 +753,11 @@ const routes = [ @@ -753,6 +753,11 @@ const routes = [
753 name: '/views/resource/printPurchaseApply', 753 name: '/views/resource/printPurchaseApply',
754 component: () => import('@/views/resource/printPurchaseApply.vue') 754 component: () => import('@/views/resource/printPurchaseApply.vue')
755 }, 755 },
  756 + {
  757 + path: '/pages/property/printPurchaseOutApply',
  758 + name: '/views/resource/printPurchaseOutApply',
  759 + component: () => import('@/views/resource/printPurchaseOutApply.vue')
  760 +},
756 ] 761 ]
757 762
758 const router = new VueRouter({ 763 const router = new VueRouter({
src/router/resourceRouter.js
@@ -210,5 +210,10 @@ export default [ @@ -210,5 +210,10 @@ export default [
210 name: '/views/resource/printPurchaseApply', 210 name: '/views/resource/printPurchaseApply',
211 component: () => import('@/views/resource/printPurchaseApply.vue') 211 component: () => import('@/views/resource/printPurchaseApply.vue')
212 }, 212 },
  213 + {
  214 + path: '/views/resource/printPurchaseOutApply',
  215 + name: '/views/resource/printPurchaseOutApply',
  216 + component: () => import('@/views/resource/printPurchaseOutApply.vue')
  217 + },
213 218
214 ] 219 ]
215 \ No newline at end of file 220 \ No newline at end of file
src/views/report/reportNoFeeRoomList.vue
1 <template> 1 <template>
2 <div class="report-no-fee-room-container animated fadeInRight"> 2 <div class="report-no-fee-room-container animated fadeInRight">
3 - <el-row :gutter="20">  
4 - <el-col :span="24"> 3 +
5 <el-card class="search-card"> 4 <el-card class="search-card">
6 <div slot="header" class="flex justify-between"> 5 <div slot="header" class="flex justify-between">
7 <span>{{ $t('reportNoFeeRoom.search.title') }}</span> 6 <span>{{ $t('reportNoFeeRoom.search.title') }}</span>
@@ -44,10 +43,9 @@ @@ -44,10 +43,9 @@
44 </el-col> 43 </el-col>
45 </el-row> 44 </el-row>
46 </el-card> 45 </el-card>
47 - </el-col>  
48 - </el-row>  
49 46
50 - <el-row :gutter="20" style="margin-top:20px;"> 47 +
  48 + <el-row :gutter="20" >
51 <el-col :span="24"> 49 <el-col :span="24">
52 <el-card> 50 <el-card>
53 <div slot="header" class="flex justify-between "> 51 <div slot="header" class="flex justify-between ">
src/views/resource/allocationStorehouseDetailedList.vue
@@ -72,7 +72,7 @@ @@ -72,7 +72,7 @@
72 </el-col> 72 </el-col>
73 </el-row> 73 </el-row>
74 74
75 - <el-row v-show="allocationStorehousesInfo.moreCondition == true" :gutter="20"> 75 + <el-row v-show="allocationStorehousesInfo.moreCondition == true" :gutter="20" class="margin-top margin-bottom">
76 <el-col :span="4"> 76 <el-col :span="4">
77 <el-input v-model.trim="allocationStorehousesInfo.conditions.applyId" 77 <el-input v-model.trim="allocationStorehousesInfo.conditions.applyId"
78 :placeholder="$t('allocationStorehouseDetailed.applyIdPlaceholder')" clearable /> 78 :placeholder="$t('allocationStorehouseDetailed.applyIdPlaceholder')" clearable />
src/views/resource/assetInventoryInList.vue
@@ -99,13 +99,13 @@ @@ -99,13 +99,13 @@
99 <el-table-column :label="$t('assetInventory.afterQuantity')" align="center"> 99 <el-table-column :label="$t('assetInventory.afterQuantity')" align="center">
100 <template slot-scope="scope"> 100 <template slot-scope="scope">
101 <el-input-number v-model="scope.row.quantity" 101 <el-input-number v-model="scope.row.quantity"
102 - :placeholder="$t('assetInventory.afterQuantityPlaceholder')" style="width:70%" :min="1" /> 102 + :placeholder="$t('assetInventory.afterQuantityPlaceholder')" style="width:70%" :min="1" :controls="false" />
103 <span style="margin-left:5px">{{ scope.row.unitCodeName }}</span> 103 <span style="margin-left:5px">{{ scope.row.unitCodeName }}</span>
104 </template> 104 </template>
105 </el-table-column> 105 </el-table-column>
106 <el-table-column :label="$t('assetInventory.remark')" align="center"> 106 <el-table-column :label="$t('assetInventory.remark')" align="center">
107 <template slot-scope="scope"> 107 <template slot-scope="scope">
108 - <el-input v-model="scope.row.remark" :placeholder="$t('assetInventory.itemRemarkPlaceholder')" /> 108 + <el-input v-model="scope.row.remark" :placeholder="$t('assetInventory.remark')" />
109 </template> 109 </template>
110 </el-table-column> 110 </el-table-column>
111 <el-table-column :label="$t('assetInventory.operation')" align="center" width="120"> 111 <el-table-column :label="$t('assetInventory.operation')" align="center" width="120">
src/views/resource/assetInventoryInStockList.vue
1 <template> 1 <template>
2 <div class="asset-inventory-in-stock-container"> 2 <div class="asset-inventory-in-stock-container">
3 - <el-row>  
4 - <el-col :span="24">  
5 - <el-card>  
6 - <div slot="header" class="flex justify-between">  
7 - <span>{{ $t('assetInventoryInStock.title') }}</span>  
8 - <div class="card-header-actions">  
9 - <el-button type="primary" size="small" @click="_printAssetInventoryInStock">  
10 - <i class="el-icon-printer"></i> {{ $t('assetInventoryInStock.print') }}  
11 - </el-button>  
12 - <el-button type="primary" size="small" @click="_goBack">  
13 - <i class="el-icon-close"></i> {{ $t('assetInventoryInStock.back') }}  
14 - </el-button>  
15 - </div>  
16 - </div>  
17 3
18 - <el-row>  
19 - <el-col :span="24">  
20 - <el-form label-width="120px">  
21 - <el-row>  
22 - <el-col :span="12">  
23 - <el-form-item :label="$t('assetInventoryInStock.inventoryName')">  
24 - <el-input v-model="assetInventoryInStockInfo.name" readonly></el-input>  
25 - </el-form-item>  
26 - </el-col>  
27 - <el-col :span="12">  
28 - <el-form-item :label="$t('assetInventoryInStock.inventoryPerson')">  
29 - <el-input v-model="assetInventoryInStockInfo.staffName" readonly></el-input>  
30 - </el-form-item>  
31 - </el-col>  
32 - </el-row>  
33 -  
34 - <el-row>  
35 - <el-col :span="12">  
36 - <el-form-item :label="$t('assetInventoryInStock.warehouse')">  
37 - <el-input v-model="assetInventoryInStockInfo.shName" readonly></el-input>  
38 - </el-form-item>  
39 - </el-col>  
40 - <el-col :span="12">  
41 - <el-form-item :label="$t('assetInventoryInStock.inventoryDate')">  
42 - <el-input v-model="assetInventoryInStockInfo.invTime" readonly></el-input>  
43 - </el-form-item>  
44 - </el-col>  
45 - </el-row>  
46 -  
47 - <el-row>  
48 - <el-col :span="24">  
49 - <el-form-item :label="$t('assetInventoryInStock.remark')">  
50 - <el-input type="textarea" v-model="assetInventoryInStockInfo.remark" readonly></el-input>  
51 - </el-form-item>  
52 - </el-col>  
53 - </el-row>  
54 -  
55 - <el-row>  
56 - <el-col :span="24">  
57 - <el-form-item :label="$t('assetInventoryInStock.status')">  
58 - <el-input v-model="assetInventoryInStockInfo.stateName" readonly></el-input>  
59 - </el-form-item>  
60 - </el-col>  
61 - </el-row>  
62 - </el-form>  
63 - </el-col>  
64 - </el-row>  
65 - </el-card>  
66 - </el-col>  
67 - </el-row> 4 + <el-card>
  5 + <div slot="header" class="flex justify-between">
  6 + <span>{{ $t('assetInventoryInStock.title') }}</span>
  7 + <div class="card-header-actions">
  8 + <el-button type="primary" size="small" @click="_printAssetInventoryInStock">
  9 + <i class="el-icon-printer"></i> {{ $t('assetInventoryInStock.print') }}
  10 + </el-button>
  11 + <el-button type="primary" size="small" @click="_goBack">
  12 + <i class="el-icon-close"></i> {{ $t('assetInventoryInStock.back') }}
  13 + </el-button>
  14 + </div>
  15 + </div>
  16 +
  17 + <el-row>
  18 + <el-col :span="24">
  19 + <el-form label-width="120px">
  20 + <el-row :gutter="20" class="margin-bottom">
  21 + <el-col :span="12">
  22 + <el-form-item :label="$t('assetInventoryInStock.inventoryName')">
  23 + <el-input v-model="assetInventoryInStockInfo.name" readonly></el-input>
  24 + </el-form-item>
  25 + </el-col>
  26 + <el-col :span="12">
  27 + <el-form-item :label="$t('assetInventoryInStock.inventoryPerson')">
  28 + <el-input v-model="assetInventoryInStockInfo.staffName" readonly></el-input>
  29 + </el-form-item>
  30 + </el-col>
  31 + </el-row>
  32 +
  33 + <el-row class="margin-bottom">
  34 + <el-col :span="12">
  35 + <el-form-item :label="$t('assetInventoryInStock.warehouse')">
  36 + <el-input v-model="assetInventoryInStockInfo.shName" readonly></el-input>
  37 + </el-form-item>
  38 + </el-col>
  39 + <el-col :span="12">
  40 + <el-form-item :label="$t('assetInventoryInStock.inventoryDate')">
  41 + <el-input v-model="assetInventoryInStockInfo.invTime" readonly></el-input>
  42 + </el-form-item>
  43 + </el-col>
  44 + </el-row>
  45 +
  46 + <el-row class="margin-bottom">
  47 + <el-col :span="24">
  48 + <el-form-item :label="$t('assetInventoryInStock.remark')">
  49 + <el-input type="textarea" v-model="assetInventoryInStockInfo.remark" readonly></el-input>
  50 + </el-form-item>
  51 + </el-col>
  52 + </el-row>
  53 +
  54 + <el-row>
  55 + <el-col :span="24">
  56 + <el-form-item :label="$t('assetInventoryInStock.status')">
  57 + <el-input v-model="assetInventoryInStockInfo.stateName" readonly></el-input>
  58 + </el-form-item>
  59 + </el-col>
  60 + </el-row>
  61 + </el-form>
  62 + </el-col>
  63 + </el-row>
  64 + </el-card>
68 65
69 <el-row class="mt-20"> 66 <el-row class="mt-20">
70 <el-col :span="24"> 67 <el-col :span="24">
@@ -74,21 +71,26 @@ @@ -74,21 +71,26 @@
74 </div> 71 </div>
75 72
76 <el-table :data="assetInventoryInStockInfo.storehouses" border style="width: 100%"> 73 <el-table :data="assetInventoryInStockInfo.storehouses" border style="width: 100%">
77 - <el-table-column prop="shName" :label="$t('assetInventoryInStock.warehouseName')" align="center"></el-table-column> 74 + <el-table-column prop="shName" :label="$t('assetInventoryInStock.warehouseName')"
  75 + align="center"></el-table-column>
78 <el-table-column :label="$t('assetInventoryInStock.itemType')" align="center"> 76 <el-table-column :label="$t('assetInventoryInStock.itemType')" align="center">
79 <template slot-scope="scope"> 77 <template slot-scope="scope">
80 {{ scope.row.parentRstName || '-' }} > {{ scope.row.rstName || '-' }} 78 {{ scope.row.parentRstName || '-' }} > {{ scope.row.rstName || '-' }}
81 </template> 79 </template>
82 </el-table-column> 80 </el-table-column>
83 - <el-table-column prop="resName" :label="$t('assetInventoryInStock.itemName')" align="center"></el-table-column> 81 + <el-table-column prop="resName" :label="$t('assetInventoryInStock.itemName')"
  82 + align="center"></el-table-column>
84 <el-table-column prop="specName" :label="$t('assetInventoryInStock.specification')" align="center"> 83 <el-table-column prop="specName" :label="$t('assetInventoryInStock.specification')" align="center">
85 <template slot-scope="scope"> 84 <template slot-scope="scope">
86 {{ scope.row.specName || '-' }} 85 {{ scope.row.specName || '-' }}
87 </template> 86 </template>
88 </el-table-column> 87 </el-table-column>
89 - <el-table-column prop="resCode" :label="$t('assetInventoryInStock.itemCode')" align="center"></el-table-column>  
90 - <el-table-column prop="isFixedName" :label="$t('assetInventoryInStock.isFixedItem')" align="center"></el-table-column>  
91 - <el-table-column prop="timesPrice" :label="$t('assetInventoryInStock.batchPrice')" align="center"></el-table-column> 88 + <el-table-column prop="resCode" :label="$t('assetInventoryInStock.itemCode')"
  89 + align="center"></el-table-column>
  90 + <el-table-column prop="isFixedName" :label="$t('assetInventoryInStock.isFixedItem')"
  91 + align="center"></el-table-column>
  92 + <el-table-column prop="timesPrice" :label="$t('assetInventoryInStock.batchPrice')"
  93 + align="center"></el-table-column>
92 <el-table-column :label="$t('assetInventoryInStock.originalStock')" align="center"> 94 <el-table-column :label="$t('assetInventoryInStock.originalStock')" align="center">
93 <template slot-scope="scope"> 95 <template slot-scope="scope">
94 {{ scope.row.originalStock }}{{ scope.row.unitCodeName }} 96 {{ scope.row.originalStock }}{{ scope.row.unitCodeName }}
@@ -105,15 +107,16 @@ @@ -105,15 +107,16 @@
105 </el-col> 107 </el-col>
106 </el-row> 108 </el-row>
107 109
108 - <el-row v-if="assetInventoryInStockInfo.state === '3000' || assetInventoryInStockInfo.state === '4000'" class="mt-20"> 110 + <el-row v-if="assetInventoryInStockInfo.state === '3000' || assetInventoryInStockInfo.state === '4000'"
  111 + class="mt-20">
109 <el-col :span="24"> 112 <el-col :span="24">
110 <el-card> 113 <el-card>
111 - <div slot="header" class="clearfix"> 114 + <div slot="header" class="flex justify-between">
112 <span>{{ $t('assetInventoryInStock.auditInfo') }}</span> 115 <span>{{ $t('assetInventoryInStock.auditInfo') }}</span>
113 </div> 116 </div>
114 117
115 <el-form label-width="120px"> 118 <el-form label-width="120px">
116 - <el-row> 119 + <el-row class="margin-bottom">
117 <el-col :span="12"> 120 <el-col :span="12">
118 <el-form-item :label="$t('assetInventoryInStock.auditor')"> 121 <el-form-item :label="$t('assetInventoryInStock.auditor')">
119 <el-input v-model="assetInventoryInStockInfo.auditName" readonly></el-input> 122 <el-input v-model="assetInventoryInStockInfo.auditName" readonly></el-input>
@@ -126,7 +129,7 @@ @@ -126,7 +129,7 @@
126 </el-col> 129 </el-col>
127 </el-row> 130 </el-row>
128 131
129 - <el-row> 132 + <el-row class="margin-bottom">
130 <el-col :span="12"> 133 <el-col :span="12">
131 <el-form-item :label="$t('assetInventoryInStock.auditTime')"> 134 <el-form-item :label="$t('assetInventoryInStock.auditTime')">
132 <el-input v-model="assetInventoryInStockInfo.auditTime" readonly></el-input> 135 <el-input v-model="assetInventoryInStockInfo.auditTime" readonly></el-input>
@@ -217,10 +220,10 @@ export default { @@ -217,10 +220,10 @@ export default {
217 _computeData(item) { 220 _computeData(item) {
218 item.invProfit = parseInt(item.invQuantity) - parseInt(item.quantity) 221 item.invProfit = parseInt(item.invQuantity) - parseInt(item.quantity)
219 if (item.invProfit < 0) item.invProfit = 0 222 if (item.invProfit < 0) item.invProfit = 0
220 - 223 +
221 item.invLoss = parseInt(item.quantity) - parseInt(item.invQuantity) 224 item.invLoss = parseInt(item.quantity) - parseInt(item.invQuantity)
222 if (item.invLoss < 0) item.invLoss = 0 225 if (item.invLoss < 0) item.invLoss = 0
223 - 226 +
224 item.invProfitMoney = item.invProfit * parseFloat(item.price) 227 item.invProfitMoney = item.invProfit * parseFloat(item.price)
225 item.invLossMoney = item.invLoss * parseFloat(item.price) 228 item.invLossMoney = item.invLoss * parseFloat(item.price)
226 }, 229 },
src/views/resource/printPurchaseOutApply.vue 0 → 100644
  1 +<template>
  2 + <div class="print-purchase-out-apply">
  3 + <div class="content-wrapper">
  4 + <!-- 申请单信息 -->
  5 + <div class="row info-row">
  6 + <div class="col-sm-3">
  7 + <span>{{ $t('purchaseApplyDetail.applyNo') }}{{ printPurchaseOutApplyInfo.applyOrderId }}</span>
  8 + </div>
  9 + <div class="col-sm-3">
  10 + <span>{{ $t('purchaseApplyDetail.applicant') }}{{ printPurchaseOutApplyInfo.userName }}</span>
  11 + </div>
  12 + <div class="col-sm-3">
  13 + <span>{{ $t('purchaseApplyDetail.contactPhone') }}{{ printPurchaseOutApplyInfo.endUserTel }}</span>
  14 + </div>
  15 + <div class="col-sm-3">
  16 + <span>{{ $t('purchaseApplyDetail.applyTime') }}{{ printPurchaseOutApplyInfo.createTime }}</span>
  17 + </div>
  18 + </div>
  19 +
  20 + <!-- 领用明细表格 -->
  21 + <table class="table table-bordered margin-top">
  22 + <thead>
  23 + <tr>
  24 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.serialNumber') }}</th>
  25 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.itemType') }}</th>
  26 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.itemName') }}</th>
  27 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.itemCode') }}</th>
  28 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.warehouse') }}</th>
  29 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.itemSpec') }}</th>
  30 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.supplier') }}</th>
  31 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.fixedItem') }}</th>
  32 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.referencePrice') }}</th>
  33 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.originalStock') }}</th>
  34 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.currentStock') }}</th>
  35 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.applyQuantity') }}</th>
  36 + <th scope="col" class="text-center">{{ $t('purchaseApplyDetail.receiveQuantity') }}</th>
  37 + </tr>
  38 + </thead>
  39 + <tbody>
  40 + <template v-for="(item, index) in printPurchaseOutApplyInfo.purchaseApplyDetailVo">
  41 + <tr :key="'detail-' + index">
  42 + <th scope="row" class="text-center">{{ index + 1 }}</th>
  43 + <td class="text-center">{{ item.parentRstName }} > {{ item.rstName }}</td>
  44 + <td class="text-center">{{ item.resName }}</td>
  45 + <td class="text-center">{{ item.resCode }}</td>
  46 + <td class="text-center">{{ item.shName }}</td>
  47 + <td class="text-center">{{ item.specName ? item.specName : '-' }}</td>
  48 + <td class="text-center">{{ item.supplierName ? item.supplierName : '-' }}</td>
  49 + <td class="text-center">{{ item.isFixedName }}</td>
  50 + <td class="text-center">{{ item.consultPrice ? '¥' + item.consultPrice : '-' }}</td>
  51 + <td class="text-center">{{ item.originalStock }}{{ item.unitCodeName }}</td>
  52 + <td class="text-center">{{ item.stock ? item.stock : '0' }}{{ item.unitCodeName }}</td>
  53 + <td class="text-center">{{ item.quantity }}{{ item.unitCodeName }}</td>
  54 + <td class="text-center">
  55 + {{ item.purchaseQuantity ? item.purchaseQuantity + item.unitCodeName : '-' }}
  56 + </td>
  57 + </tr>
  58 + <tr :key="'remark-' + index">
  59 + <th scope="row" class="text-center">{{ $t('purchaseApplyDetail.applyRemark') }}</th>
  60 + <td colspan="4" class="text-center">{{ item.remark }}</td>
  61 + <th class="text-center">{{ $t('purchaseApplyDetail.receiveRemark') }}</th>
  62 + <td colspan="7" class="text-center">{{ item.purchaseRemark ? item.purchaseRemark : '-' }}</td>
  63 + </tr>
  64 + </template>
  65 + <tr height="60px">
  66 + <td colspan="2" class="text-center" style="vertical-align:middle;">
  67 + {{ $t('purchaseApplyDetail.reviewerSignature') }}
  68 + </td>
  69 + <td colspan="4"></td>
  70 + <td class="text-center" style="vertical-align:middle;">
  71 + {{ $t('purchaseApplyDetail.time') }}
  72 + </td>
  73 + <td colspan="6"></td>
  74 + </tr>
  75 + <tr height="60px">
  76 + <td colspan="2" class="text-center" style="vertical-align:middle;">
  77 + {{ $t('purchaseApplyDetail.applicantSignature') }}
  78 + </td>
  79 + <td colspan="4"></td>
  80 + <td class="text-center" style="vertical-align:middle;">
  81 + {{ $t('purchaseApplyDetail.time') }}
  82 + </td>
  83 + <td colspan="6"></td>
  84 + </tr>
  85 + </tbody>
  86 + </table>
  87 +
  88 + <!-- 操作按钮 -->
  89 + <div id="print-btn" class="button-wrapper">
  90 + <el-button type="warning" @click="closePage" style="margin-right:20px;">
  91 + {{ $t('purchaseApplyDetail.cancel') }}
  92 + </el-button>
  93 + <el-button type="primary" @click="printPurchaseOutApplyDiv">
  94 + <i class="el-icon-printer"></i> {{ $t('purchaseApplyDetail.print') }}
  95 + </el-button>
  96 + </div>
  97 + </div>
  98 + </div>
  99 +</template>
  100 +
  101 +<script>
  102 +import { listPurchaseApplys } from '@/api/resource/purchaseApplyManageApi'
  103 +import { messages } from './purchaseApplyDetailLang'
  104 +
  105 +export default {
  106 + name: 'PrintPurchaseOutApply',
  107 + i18n: {
  108 + messages
  109 + },
  110 + data() {
  111 + return {
  112 + printPurchaseOutApplyInfo: {
  113 + applyOrderId: '',
  114 + userName: '',
  115 + endUserTel: '',
  116 + createTime: '',
  117 + purchaseApplyDetailVo: []
  118 + },
  119 + printFlag: '0'
  120 + }
  121 + },
  122 + created() {
  123 + this.initPrintPurchaseOutApplyDateInfo()
  124 + },
  125 + methods: {
  126 + // 初始化采购领用申请数据
  127 + initPrintPurchaseOutApplyDateInfo() {
  128 + const applyOrderId = this.$route.query.applyOrderId
  129 + const resOrderType = this.$route.query.resOrderType
  130 +
  131 + if (!applyOrderId) {
  132 + this.$message.error('缺少申请单号参数')
  133 + return
  134 + }
  135 +
  136 + const params = {
  137 + page: 1,
  138 + row: 1,
  139 + applyOrderId: applyOrderId,
  140 + resOrderType: resOrderType
  141 + }
  142 +
  143 + listPurchaseApplys(params).then(res => {
  144 + if (res.purchaseApplys && res.purchaseApplys.length > 0) {
  145 + this.printPurchaseOutApplyInfo = res.purchaseApplys[0]
  146 + } else {
  147 + this.$message.error('未找到领用申请信息')
  148 + }
  149 + }).catch(error => {
  150 + console.error('获取领用申请信息失败:', error)
  151 + this.$message.error('获取领用申请信息失败')
  152 + })
  153 + },
  154 +
  155 + // 打印
  156 + printPurchaseOutApplyDiv() {
  157 + this.printFlag = '1'
  158 + const printBtn = document.getElementById('print-btn')
  159 + if (printBtn) {
  160 + printBtn.style.display = 'none'
  161 + }
  162 +
  163 + window.print()
  164 +
  165 + // 打印后关闭窗口
  166 + setTimeout(() => {
  167 + window.opener = null
  168 + window.close()
  169 + }, 100)
  170 + },
  171 +
  172 + // 关闭页面
  173 + closePage() {
  174 + window.opener = null
  175 + window.close()
  176 + }
  177 + }
  178 +}
  179 +</script>
  180 +
  181 +<style scoped>
  182 +.print-purchase-out-apply {
  183 + padding: 20px;
  184 + background: #fff;
  185 +}
  186 +
  187 +.content-wrapper {
  188 + margin: 0 auto;
  189 +}
  190 +
  191 +.info-row {
  192 + margin-bottom: 20px;
  193 + display: flex;
  194 + justify-content: space-between;
  195 +}
  196 +
  197 +.col-sm-3 {
  198 + flex: 1;
  199 + padding: 0 10px;
  200 +}
  201 +
  202 +.col-sm-3 span {
  203 + font-size: 14px;
  204 + color: #333;
  205 +}
  206 +
  207 +.margin-top {
  208 + margin-top: 20px;
  209 +}
  210 +
  211 +/* 原生表格样式 */
  212 +.table {
  213 + width: 100%;
  214 + border-collapse: collapse;
  215 + margin-bottom: 20px;
  216 +}
  217 +
  218 +.table-bordered {
  219 + border: 1px solid #ddd;
  220 +}
  221 +
  222 +.table-bordered th,
  223 +.table-bordered td {
  224 + border: 1px solid #ddd;
  225 + padding: 8px;
  226 + font-size: 12px;
  227 +}
  228 +
  229 +.table thead th {
  230 + background-color: #f5f7fa;
  231 + font-weight: bold;
  232 + color: #333;
  233 +}
  234 +
  235 +.text-center {
  236 + text-align: center;
  237 +}
  238 +
  239 +.button-wrapper {
  240 + text-align: right;
  241 + margin-top: 30px;
  242 + padding: 20px 0;
  243 +}
  244 +
  245 +/* 打印样式 */
  246 +@media print {
  247 + .print-purchase-out-apply {
  248 + padding: 0;
  249 + }
  250 +
  251 + #print-btn {
  252 + display: none !important;
  253 + }
  254 +
  255 + .table-bordered th,
  256 + .table-bordered td {
  257 + page-break-inside: avoid;
  258 + font-size: 10px;
  259 + }
  260 +}
  261 +</style>
  262 +
src/views/resource/purchaseApplyDetailLang.js
@@ -50,7 +50,9 @@ export const messages = { @@ -50,7 +50,9 @@ export const messages = {
50 time: 'Time', 50 time: 'Time',
51 manufacturerSignature: 'Manufacturer Signature', 51 manufacturerSignature: 'Manufacturer Signature',
52 purchaserSignature: 'Purchaser Signature', 52 purchaserSignature: 'Purchaser Signature',
53 - remark: 'Remark' 53 + remark: 'Remark',
  54 + reviewerSignature: 'Reviewer Signature',
  55 + applicantSignature: 'Applicant Signature'
54 }, 56 },
55 auditDiv: { 57 auditDiv: {
56 workOrderProcessing: 'Work Order Processing', 58 workOrderProcessing: 'Work Order Processing',
@@ -123,7 +125,9 @@ export const messages = { @@ -123,7 +125,9 @@ export const messages = {
123 time: '时间', 125 time: '时间',
124 manufacturerSignature: '厂家签字', 126 manufacturerSignature: '厂家签字',
125 purchaserSignature: '采购人员签字', 127 purchaserSignature: '采购人员签字',
126 - remark: '备注' 128 + remark: '备注',
  129 + reviewerSignature: '审核人签字',
  130 + applicantSignature: '申请人签字'
127 }, 131 },
128 auditDiv: { 132 auditDiv: {
129 workOrderProcessing: '工单办理', 133 workOrderProcessing: '工单办理',
src/views/resource/purchaseApplyDetailManageList.vue
@@ -59,7 +59,7 @@ @@ -59,7 +59,7 @@
59 </el-button> 59 </el-button>
60 </el-col> 60 </el-col>
61 </el-row> 61 </el-row>
62 - <el-row v-show="moreCondition" :gutter="20"> 62 + <el-row v-show="moreCondition" :gutter="20" class="margin-bottom margin-top">
63 <el-col :span="4"> 63 <el-col :span="4">
64 <el-select v-model="conditions.warehousingWay" 64 <el-select v-model="conditions.warehousingWay"
65 :placeholder="$t('purchaseApplyDetailManage.search.warehousingWay')" style="width:100%" clearable> 65 :placeholder="$t('purchaseApplyDetailManage.search.warehousingWay')" style="width:100%" clearable>
@@ -262,6 +262,7 @@ export default { @@ -262,6 +262,7 @@ export default {
262 await this.getDictData() 262 await this.getDictData()
263 await this._listResourceStoreTypes() 263 await this._listResourceStoreTypes()
264 await this._listResourceStoreSpecifications() 264 await this._listResourceStoreSpecifications()
  265 + await this._listResourceSupplier()
265 }, 266 },
266 async getDictData() { 267 async getDictData() {
267 try { 268 try {