186 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <!--
 | |
|  * @Author: zwq
 | |
|  * @Date: 2020-12-29 15:41:11
 | |
|  * @LastEditors: fzq
 | |
|  * @LastEditTime: 2022-03-10 19:20:22
 | |
|  * @Description:
 | |
| -->
 | |
| <template>
 | |
|   <div class="app-container">
 | |
|     <div style="margin:10px 50px">
 | |
|       <el-button type="success" @click="goback()">{{ 'btn.back' | i18nFilter }}</el-button>
 | |
|       <el-button type="primary" @click="addNew()">{{ 'btn.add' | i18nFilter }}</el-button>
 | |
|     </div>
 | |
|     <base-table
 | |
|       :page="listQuery.current"
 | |
|       :limit="listQuery.size"
 | |
|       :table-config="tableProps"
 | |
|       :table-data="list"
 | |
|       :is-loading="listLoading"
 | |
|     >
 | |
|       <method-btn
 | |
|         slot="handleBtn"
 | |
|         :width="trueWidth"
 | |
|         :method-list="tableBtn"
 | |
|         @clickBtn="handleClick"
 | |
|       />
 | |
|     </base-table>
 | |
|     <shelfAttr-add v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getList" />
 | |
|   </div>
 | |
| </template>
 | |
| 
 | |
| <script>import i18n from '@/lang'
 | |
| import { shelfList, shelfDelete } from '@/api/basicData/Cache/shelf'
 | |
| import shelfAttrAdd from './shelfAttr-add.vue'
 | |
| import locationBtn from './locationBtn.vue'
 | |
| import BaseTable from '@/components/BaseTable'
 | |
| import MethodBtn from '@/components/BaseTable/subcomponents/MethodBtn'
 | |
| import { timeFormatter } from '@/filters'
 | |
| /**
 | |
|  * 表格表头配置项 TypeScript接口注释
 | |
|  * tableConfig<ConfigItem> = []
 | |
|  *
 | |
|  * Interface ConfigItem = {
 | |
|  *  prop: string,
 | |
|  *  label: string,
 | |
|  *  width: string,
 | |
|  *  align: string,
 | |
|  *  subcomponent: function,
 | |
|  *  filter: function
 | |
|  * }
 | |
|  *
 | |
|  *
 | |
|  */
 | |
| 
 | |
| const tableBtn = [
 | |
|   {
 | |
|     type: 'edit',
 | |
|     btnName: 'btn.edit'
 | |
|   },
 | |
|   {
 | |
|     type: 'delete',
 | |
|     btnName: 'btn.delete'
 | |
|   }
 | |
| ]
 | |
| const tableProps = [
 | |
|   {
 | |
|     prop: 'createTime',
 | |
|     label: i18n.t('module.basicData.factory.createTime'),
 | |
|     filter: timeFormatter,
 | |
|     align: 'center'
 | |
|   },
 | |
|   {
 | |
|     prop: 'code',
 | |
|     label: i18n.t('module.basicData.cache.ShelfCode'),
 | |
|     align: 'center'
 | |
|   },
 | |
|   {
 | |
|     prop: 'shelfName',
 | |
|     label: i18n.t('module.basicData.cache.ShelfName'),
 | |
|     align: 'center'
 | |
|   },
 | |
|   {
 | |
|     prop: 'shelfNumber',
 | |
|     label: i18n.t('module.basicData.cache.StorageQuantity'),
 | |
|     align: 'center'
 | |
|   },
 | |
|   {
 | |
|     prop: 'location',
 | |
|     label: i18n.t('module.basicData.cache.Location'),
 | |
|     subcomponent: locationBtn,
 | |
|     align: 'center'
 | |
|   }
 | |
| ]
 | |
| 
 | |
| export default {
 | |
|   name: 'Shelf',
 | |
|   components: { BaseTable, MethodBtn, shelfAttrAdd },
 | |
|   filters: {
 | |
|     statusFilter(status) {
 | |
|       const statusMap = {
 | |
|         published: 'success',
 | |
|         draft: 'info',
 | |
|         deleted: 'danger'
 | |
|       }
 | |
|       return statusMap[status]
 | |
|     }
 | |
|   },
 | |
|   data() {
 | |
|     return {
 | |
|       addOrUpdateVisible: false,
 | |
|       tableBtn,
 | |
|       trueWidth: 200,
 | |
|       tableProps,
 | |
|       list: [],
 | |
|       listLoading: true,
 | |
|       listQuery: {
 | |
|         current: 1,
 | |
|         size: 990,
 | |
|         areaId: ''
 | |
|       }
 | |
|     }
 | |
|   },
 | |
|   created() {
 | |
|     this.listQuery.areaId = this.$route.query.id
 | |
|     this.getList()
 | |
|   },
 | |
|   methods: {
 | |
|     handleClick(raw) {
 | |
|       if (raw.type === 'delete') {
 | |
|         this.$confirm(`${this.$t('module.basicData.visual.TipsBefore')}[${raw.data.name}]?`, this.$t('module.basicData.visual.Tips'), {
 | |
|           confirmButtonText: this.$t('module.basicData.visual.confirmButtonText'),
 | |
|           cancelButtonText: this.$t('module.basicData.visual.cancelButtonText'),
 | |
|           type: 'warning'
 | |
|         }).then(() => {
 | |
|           shelfDelete(raw.data.id).then(response => {
 | |
|             this.$message({
 | |
|               message: this.$t('module.basicData.visual.success'),
 | |
|               type: 'success',
 | |
|               duration: 1500,
 | |
|               onClose: () => {
 | |
|                 this.getList()
 | |
|               }
 | |
|             })
 | |
|           })
 | |
|         }).catch(() => {})
 | |
|       } else {
 | |
|         this.addNew(raw.data.id)
 | |
|       }
 | |
|     },
 | |
|     getList(key) {
 | |
|       this.listLoading = true
 | |
|       this.listQuery.name = key
 | |
|       shelfList(this.listQuery).then(response => {
 | |
|         if (response.data.records) {
 | |
|           this.list = response.data.records
 | |
|         } else {
 | |
|           this.list.splice(0, this.list.length)
 | |
|         }
 | |
|         this.listLoading = false
 | |
|       })
 | |
|     },
 | |
|     // 新增 / 修改
 | |
|     addNew(id) {
 | |
|       this.addOrUpdateVisible = true
 | |
|       this.$nextTick(() => {
 | |
|         this.$refs.addOrUpdate.init(id, true)
 | |
|       })
 | |
|     },
 | |
|     goback() {
 | |
|       this.$router.go(-1)
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| 
 | |
| <style scoped>
 | |
| .edit-input {
 | |
|   padding-right: 100px;
 | |
| }
 | |
| .cancel-btn {
 | |
|   position: absolute;
 | |
|   right: 15px;
 | |
|   top: 10px;
 | |
| }
 | |
| </style>
 |