| <template> | 
|   <!-- <TableLayout v-permissions="['ext:appliancesext:query']"> --> | 
|   <TableLayout> | 
|     <!-- 搜索表单 --> | 
|     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-suffix=":" label-width="100px" inline> | 
|       <el-form-item label="工装编码" prop="code"> | 
|         <el-input | 
|           v-model="searchForm.code" | 
|           placeholder="请输入工装编码" | 
|           @keypress.enter.native="search" | 
|         ></el-input> | 
|       </el-form-item> | 
|       <el-form-item label="工装类型" prop="categoryId"> | 
|         <el-select v-model="searchForm.categoryId" clearable filterable placeholder="全部"> | 
|           <el-option | 
|             v-for="item in appTypes" | 
|             :key="item.id" | 
|             :label="item.name" | 
|             :value="item.id" | 
|           > | 
|           </el-option> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item label="仓库" prop="warehouseId"> | 
|         <el-select v-model="searchForm.warehouseId" clearable filterable placeholder="全部" @change="selectWarehouse"> | 
|           <el-option | 
|             v-for="item in warehouse" | 
|             :key="item.id" | 
|             :label="item.name" | 
|             :value="item.id" | 
|           > | 
|           </el-option> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item label="货位" prop="locationId"> | 
|         <el-select v-model="searchForm.locationId" :disabled="searchForm.warehouseId == ''" clearable filterable placeholder="全部"> | 
|           <el-option | 
|             v-for="item in warehouseLocation" | 
|             :key="item.id" | 
|             :label="item.unionName" | 
|             :value="item.id" | 
|           > | 
|           </el-option> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item label="工装属性" prop="smodelLabel"> | 
|         <el-select v-model="searchForm.smodelLabel" placeholder="请选择工装属性" clearable filterable> | 
|           <el-option | 
|             v-for="item in properties" | 
|             :key="item.id" | 
|             :label="item.code" | 
|             :value="item.label"> | 
|           </el-option> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item label="质量属性" prop="qualityType"> | 
|         <el-select v-model="searchForm.qualityType" placeholder="请选择质量属性" clearable filterable> | 
|           <el-option | 
|             v-for="item in qualityTypes" | 
|             :key="item.id" | 
|             :label="item.name" | 
|             :value="item.id"> | 
|           </el-option> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item label="工装状态" prop="status"> | 
|         <el-select v-model="searchForm.status" clearable filterable placeholder="全部"> | 
|           <el-option | 
|             v-for="item in status" | 
|             :key="item.value" | 
|             :label="item.name" | 
|             :value="item.id" | 
|           > | 
|           </el-option> | 
|         </el-select> | 
|       </el-form-item> | 
|       <el-form-item label="单据编号" prop="wmodelCode"> | 
|         <el-input | 
|           v-model="searchForm.wmodelCode" | 
|           placeholder="请输入单据编号" | 
|           @keypress.enter.native="search" | 
|         ></el-input> | 
|       </el-form-item> | 
|       <el-form-item label="物料信息" prop="mmodelName"> | 
|         <el-input | 
|           v-model="searchForm.mmodelName" | 
|           placeholder="请输入物料名称或者编码" | 
|           @keypress.enter.native="search" | 
|         ></el-input> | 
|       </el-form-item> | 
|       <el-form-item label="批次号" prop="batch"> | 
|         <el-input | 
|           v-model="searchForm.batch" | 
|           placeholder="请输入批次号" | 
|           @keypress.enter.native="search" | 
|         ></el-input> | 
|       </el-form-item> | 
|       <el-form-item label="生产工序" prop="procedureId"> | 
|         <el-select v-model="searchForm.procedureId" filterable clearable placeholder="请选择生产工序"> | 
|           <el-option | 
|             v-for="(item, index) in procedures" | 
|             :key="index" | 
|             :label="item.name" | 
|             :value="item.id"> | 
|           </el-option> | 
|         </el-select> | 
|       </el-form-item> | 
|       <!-- <el-form-item label="位置类型" prop="positionType"> | 
|         <el-select v-model="searchForm.positionType" clearable filterable placeholder="全部"> | 
|           <el-option | 
|             v-for="item in positionType" | 
|             :key="item.value" | 
|             :label="item.name" | 
|             :value="item.id" | 
|           > | 
|           </el-option> | 
|         </el-select> | 
|       </el-form-item> --> | 
|       <section> | 
|         <el-button type="primary" @click="search">搜索</el-button> | 
|         <el-button @click="reset">重置</el-button> | 
|       </section> | 
|     </el-form> | 
|     <!-- 表格和分页 --> | 
|     <template v-slot:table-wrap> | 
|       <!-- <ul class="toolbar" v-permissions="['ext:appliancesext:create', 'ext:appliancesext:delete']"> | 
|         <li><el-button type="primary" @click="$refs.operaAppliancesExtWindow.open('新建工装器具信息')" icon="el-icon-plus" v-permissions="['ext:appliancesext:create']">新建</el-button></li> | 
|         <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['ext:appliancesext:delete']">删除</el-button></li> | 
|       </ul> --> | 
|       <ul class="toolbar"> | 
|         <li> | 
|           <el-button type="primary"  @click="scrap">报废</el-button> | 
|         </li> | 
|         <li> | 
|           <el-button | 
|             type="primary" | 
|             @click="$refs.operaAppliancesExtWindow.open('新建工装器具信息')" | 
|             >新建</el-button | 
|           > | 
|         </li> | 
|         <li> | 
|           <ImportButton | 
|             text="导入" | 
|             :type="appTypes" | 
|             template-name="appliances_import_template.xlsx" | 
|             template-path="template/appliances_import_template.xlsx" | 
|             action="/ext/appliancesExt/importExcel" | 
|             @success="search" | 
|           /> | 
|         </li> | 
|         <li><el-button type="primary" :loading="isWorking.export" @click="exportExcel">导出</el-button></li> | 
|         <li> | 
|           <el-button | 
|             type="primary" | 
|             @click="printLabelWithArray" | 
|              v-if="containPermissions(['ext:barcodeparamext:query'])" | 
|             plain>打印标签</el-button> | 
|         </li> | 
|       </ul> | 
|       <el-table | 
|         v-loading="isWorking.search" | 
|         :data="tableData.list" | 
|         stripe | 
|         border | 
|         :summary-method="getSummaries" | 
|         show-summary | 
|         @selection-change="handleSelectionChange" | 
|       > | 
|         <el-table-column type="selection" fixed="left" width="55"></el-table-column> | 
|         <el-table-column | 
|           prop="type" | 
|           label="工装类型" | 
|           min-width="100px" | 
|           fixed="left" | 
|         > | 
|           <template slot-scope="{ row }"> | 
|             {{ typeToStr(row) }} | 
|           </template> | 
|         </el-table-column> | 
|         <el-table-column | 
|           prop="smodelCode" | 
|           label="工装属性" | 
|           min-width="80px" | 
|         ></el-table-column> | 
|         <el-table-column | 
|           prop="code" | 
|           label="工装编码" | 
|           min-width="100px" | 
|         ></el-table-column> | 
|         <el-table-column | 
|           prop="serialNum" | 
|           label="序列号" | 
|           min-width="60px" | 
|         ></el-table-column> | 
|         <el-table-column label="状态" min-width="60px"> | 
|           <template slot-scope="{row}"> | 
|             {{ statusToStr(row.status) }} | 
|           </template> | 
|         </el-table-column> | 
|         <el-table-column prop="wmodelCode" label="单据编号" show-overflow-tooltip min-width="140px"> | 
|           <template slot-scope="{row}"> | 
|             <span class="long-title-style">{{ row.zjcode || '-' }}</span> | 
|           </template> | 
|         </el-table-column> | 
|         <el-table-column prop="mmodelCode" label="物料编码"  min-width="160px"></el-table-column> | 
|         <el-table-column prop="mmodelName" label="物料信息" show-overflow-tooltip min-width="100px"> | 
|           <template slot-scope="{row}"> | 
|             <span class="long-title-style"> | 
|               {{ row.mmodelName }} | 
|             </span> | 
|           </template> | 
|         </el-table-column> | 
|         <el-table-column prop="batch" label="批次号" show-overflow-tooltip min-width="100px"> | 
|           <template slot-scope="{row}"> | 
|             {{ row.batch || '-' }} | 
|           </template> | 
|         </el-table-column> | 
|         <el-table-column prop="num" label="数量" min-width="100px"> | 
|           <template slot-scope="{row}"> | 
|             {{ row.num ? (row.num + (row.umodelName || '')) : '0' }} | 
|           </template> | 
|         </el-table-column> | 
|         <el-table-column label="质量属性" min-width="80px"> | 
|           <template slot-scope="{row}"> | 
|             <span v-if="row.qualityType==0" class="valid-style">合格</span> | 
|             <span v-else-if="row.qualityType==1" class="unvalid-style">不良</span> | 
|             <span v-else-if="row.qualityType==2" class="scrap-style">报废</span> | 
|             <span v-else>-</span> | 
|           </template> | 
|         </el-table-column> | 
|         <el-table-column prop="pmodelName" show-overflow-tooltip label="生产工序" min-width="100px"> | 
|           <template slot-scope="{row}"> | 
|             <span class="long-title-style">{{ row.pmodelName || '-' }}</span> | 
|           </template> | 
|         </el-table-column> | 
|         <!-- <el-table-column prop="positionType" label="位置类型" min-width="80px"> | 
|           <template slot-scope="{row}"> | 
|             {{ positionToStr(row.positionType) }} | 
|           </template> | 
|         </el-table-column> --> | 
|         <!-- <el-table-column prop="vmodelStationCode" label="工位" show-overflow-tooltip min-width="100px"> | 
|           <template slot-scope="{row}"> | 
|             <span class="long-title-style">{{ row.vmodelStationCode || '-' }}</span> | 
|           </template> | 
|         </el-table-column> --> | 
|         <el-table-column prop="whmodelName" label="仓库" show-overflow-tooltip min-width="140px"> | 
|           <template slot-scope="{row}"> | 
|             <span class="long-title-style">{{ row.whmodelName || '-' }}</span> | 
|           </template> | 
|         </el-table-column> | 
|         <el-table-column prop="lmodelUnionName" label="货位" show-overflow-tooltip min-width="140px"> | 
|           <template slot-scope="{row}"> | 
|             <span class="long-title-style">{{ row.lmodelUnionName || '-' }}</span> | 
|           </template> | 
|         </el-table-column> | 
|         <el-table-column | 
|           prop="createTime" | 
|           label="创建时间" | 
|           min-width="140px" | 
|         ></el-table-column> | 
|         <el-table-column | 
|           prop="remark" | 
|           label="报废原因" | 
|           min-width="140px" | 
|           show-overflow-tooltip | 
|         > | 
|           <template slot-scope="{row}"> | 
|             <span class="long-title-style"> | 
|               {{ row.remark || '-' }} | 
|             </span> | 
|           </template> | 
|         </el-table-column> | 
|         <el-table-column | 
|           label="操作" | 
|           min-width="120" | 
|           fixed="right" | 
|         > | 
|           <template slot-scope="{ row }"> | 
|             <el-button v-if="containPermissions(['ext:barcodeparamext:query'])" type="text" @click="printLabel(row)">打印标签</el-button> | 
|             <span v-else>-</span> | 
|           </template> | 
|         </el-table-column> | 
|       </el-table> | 
|       <pagination | 
|         @size-change="handleSizeChange" | 
|         @current-change="handlePageChange" | 
|         :pagination="tableData.pagination" | 
|       > | 
|       </pagination> | 
|     </template> | 
|     <!-- 新建/修改 --> | 
|     <OperaAppliancesExtWindow | 
|       ref="operaAppliancesExtWindow" | 
|       @success="handlePageChange" | 
|     /> | 
|     <OperaAppliancesFromExtWindow | 
|       ref="operaAppliancesFromExtWindow" | 
|       @success="handlePageChange" | 
|     /> | 
|     <QrCodeLabel ref="qrCodeLabel"></QrCodeLabel> | 
|   </TableLayout> | 
| </template> | 
|   | 
| <script> | 
| import BaseTable from '@/components/base/BaseTable' | 
| import TableLayout from '@/layouts/TableLayout' | 
| import ImportButton from '@/components/common/ImportButton' | 
| // import SearchFormCollapse from '@/components/common/SearchFormCollapse' | 
| import Pagination from '@/components/common/Pagination' | 
| import OperaMaterialDistributionWindow from '@/components/ext/OperaMaterialDistributionWindow' | 
| import OperaAppliancesExtWindow from '@/components/ext/OperaAppliancesExtWindow' | 
| import OperaAppliancesFromExtWindow from '@/components/ext/OperaAppliancesFromExtWindow' | 
| import QrCodeLabel from '@/components/common/QrCodeLabel' | 
| import { checkAllList } from '@/api/ext/categoryUnionExt' | 
| import { fetchList as getPrefix } from '@/api/ext/barcodeParamExt' | 
| import { queryListByCode } from '@/api/system/dictData' | 
| import { productesGroup } from '@/api/ext/proceduresExt' | 
| import { queryWarehouseAllData } from '@/api/ext/warehouseExt' | 
| import { getListByWarehouseId } from '@/api/ext/warehouseLocationExt' | 
| import { addPrecision } from '@/utils/util' | 
| export default { | 
|   name: 'AppliancesExt', | 
|   extends: BaseTable, | 
|   components: { | 
|     TableLayout, | 
|     Pagination, | 
|     OperaAppliancesExtWindow, | 
|     OperaMaterialDistributionWindow, | 
|     OperaAppliancesFromExtWindow, | 
|     ImportButton, | 
|     QrCodeLabel | 
|   }, | 
|   data () { | 
|     return { | 
|       properties: [], | 
|       appTypes: [], | 
|       procedures: [], | 
|       status: [ | 
|         // 0.报废、1.空、2.部分、3.满, | 
|         { name: '报废', id: 0 }, | 
|         { name: '空', id: 1 }, | 
|         // { name: '部分', id: 2 }, | 
|         { name: '满', id: 3 } | 
|       ], | 
|       positionType: [ | 
|         // 0仓库1.车间 | 
|         { name: '仓库', id: 0 }, | 
|         { name: '车间', id: 1 } | 
|       ], | 
|       direction: 'rtl', | 
|       drawer: false, | 
|       scarpForm: { | 
|         scarP: '' | 
|       }, | 
|       // 搜索 | 
|       searchForm: { | 
|         code: '', | 
|         batch: null, | 
|         smodelLabel: '', | 
|         procedureId: '', | 
|         qualityType: '', | 
|         categoryId: '', | 
|         wmodelCode: '', | 
|         status: '', | 
|         positionType: '', | 
|         warehouseId: '', // 仓库id | 
|         locationId: '', // 货位id | 
|         mmodelName: '' | 
|       }, | 
|       printList: [], | 
|       warehouse: [], | 
|       warehouseLocation: [], | 
|       qualityTypes: [ | 
|         // 0合格 1不良 2报废 | 
|         { name: '合格', id: 0 }, | 
|         { name: '不良', id: 1 }, | 
|         { name: '报废', id: 2 }, | 
|       ], | 
|       prefix: '', | 
|     } | 
|   }, | 
|   provide() { | 
|     return { | 
|       properties:() => this.properties, | 
|       appTypes:() => this.appTypes | 
|     } | 
|   }, | 
|   created () { | 
|     this.config({ | 
|       module: '工装器具信息', | 
|       api: '/ext/appliancesExt', | 
|       'field.id': 'id', | 
|       'field.main': 'name' | 
|     }) | 
|     this.search() | 
|     checkAllList({ cateType: 2 }) | 
|       .then(res => { | 
|         this.appTypes = res | 
|       }) | 
|       .catch(err => { | 
|         console.log(err) | 
|       }) | 
|     productesGroup({}) | 
|       .then(res => { | 
|         this.procedures = res | 
|       }) | 
|       .catch(err => { | 
|         console.log(err) | 
|       }) | 
|     queryListByCode('?dicCode=SYSTEM_APPLIANCE_TYPE') | 
|       .then(res => { | 
|         // console.log(res) | 
|         this.properties = res | 
|       }) | 
|       .catch(err => { | 
|         console.log(err) | 
|       }) | 
|     getPrefix({ | 
|       page: 1, | 
|       capacity: 1, | 
|       model: { type: 4, status: 1 } | 
|     }) | 
|       .then(res => { | 
|         this.prefix = res.records[0].prefix | 
|       }) | 
|     queryWarehouseAllData({ status: 1, rootDepartId: this.$store.state.userInfo.curComDepartment.id }) | 
|       .then(res => { | 
|         this.warehouse = res | 
|       }) | 
|   | 
|   }, | 
|   methods: { | 
|     typeToStr (row) { | 
|       return row.cmodel1BigName ? (row.cmodel1BigName + ( row.cmodel1MiddleName ? (' - ' + row.cmodel1MiddleName + (row.cmodel1SmallName ? ' - ' +  row.cmodel1SmallName : '')) : '' )) : '-' | 
|     }, | 
|     statusToStr (status) { | 
|       for (const item of this.status) { | 
|         if (item.id === status) return item.name | 
|       } | 
|     }, | 
|     materailName (row) { | 
|       return row.mmodelName ? (row.mmodelName + ' | ' + row.mmodelCode) : '-' | 
|     }, | 
|     positionToStr (position) { | 
|       for (const item of this.positionType) { | 
|         if (item.id === position) return item.name | 
|       } | 
|       return '-' | 
|     }, | 
|     scrap () { | 
|       if (this.tableData.selectedRows.length === 0) { | 
|         this.$tip.warning('请至少选择一条数据') | 
|         return | 
|       } | 
|       const ids = [] | 
|       for (const item of this.tableData.selectedRows) { | 
|         ids.push(item.id) | 
|       } | 
|       this.$refs.operaAppliancesFromExtWindow.open('报废', { ids }) | 
|     }, | 
|     printLabel (row) { | 
|       this.printList = [{ | 
|         code: row.code, | 
|         title: '', | 
|         content: row.cmodel1BigName, | 
|         department: this.$store.state.userInfo.curComDepartment.name | 
|       }] | 
|       this.$refs.qrCodeLabel.open('打印标签', this.printList, this.prefix, true) | 
|     }, | 
|     printLabelWithArray () { | 
|       if (this.tableData.selectedRows.length === 0) { | 
|         this.$tip.warning('请至少选择一条数据') | 
|         return | 
|       } | 
|       this.printList = this.tableData.selectedRows.map((item) => { | 
|         return { | 
|           code: item.code, | 
|           title: '', | 
|           content: item.cmodel1BigName, | 
|           department: this.$store.state.userInfo.curComDepartment.name | 
|         } | 
|       }) | 
|       this.$refs.qrCodeLabel.open('打印标签', this.printList, this.prefix, true) | 
|     }, | 
|     selectWarehouse(value) { | 
|       this.warehouseLocation = [] | 
|       this.searchForm.locationId = '' | 
|       if (!value) { | 
|         return | 
|       } | 
|       getListByWarehouseId(value, 1) | 
|         .then(res => { | 
|           this.warehouseLocation = res | 
|         }) | 
|         .catch(err => { | 
|           console.log(err) | 
|         }) | 
|     }, | 
|     getSummaries (param) { | 
|       const { columns, data } = param; | 
|       const sums = []; | 
|       columns.forEach((column, index) => { | 
|         if (index === 0) { | 
|           sums[index] = '合计'; | 
|           return; | 
|         } else if (index === 1 || index === 2 || index === 4 || index === 5 || index === 6 || index === 7|| index === 8 || index === 9 || index === 11 || index === 12 || index === 13|| index === 14 || index === 16) { | 
|           sums[index] = '-'; | 
|           return; | 
|         } | 
|         const values = data.map(item => Number(item[column.property])); | 
|         // console.log(values) | 
|         if (!values.every(value => isNaN(value))) { | 
|           sums[index] = 0 | 
|           values.forEach(item => { | 
|             sums[index] = addPrecision(item, sums[index]) | 
|           }) | 
|         } else { | 
|           sums[index] = '-'; | 
|         } | 
|       }); | 
|       return sums | 
|     } | 
|   } | 
| } | 
| </script> |