| | |
| | | responseType: 'blob' |
| | | }) |
| | | } |
| | | |
| | | export function QueryWorkPieceLogYield (parameter) { |
| | | return axios({ |
| | | url: '/WorkPieceProcess/queryWorkPieceLogYield', |
| | | method: 'get', |
| | | params: parameter |
| | | }) |
| | | } |
| | | export function exportWorkPieceLogYield (parameter) { |
| | | return axios({ |
| | | url: '/WorkPieceProcess/exportWorkPieceLogYield', |
| | | method: 'get', |
| | | params: parameter, |
| | | responseType: 'blob' |
| | | }) |
| | | } |
| | | /** |
| | | * æ¥è¯¢å¨å¶åçæ§ 产å维度æ¥è¯¢ |
| | | * |
| | |
| | | }, |
| | | advanced: false, // é«çº§æç´¢ å±å¼/å
³é |
| | | queryParam: { |
| | | dates:[] |
| | | dates:[], |
| | | qualityState:1,//åªæ¥è¯¢åæ ¼ç ï¼1åæ ¼ 2ä¸åæ ¼ 3 çä¼¼ï¼ãEditby shaocx,2024-08-26ã |
| | | }, |
| | | columns: [ |
| | | { |
| | |
| | | initData(){ |
| | | this.queryParam.dates = []; |
| | | this.queryParam.dates = getThisWeekRange(); |
| | | this.queryParam.qualityState = 1;//åªæ¥è¯¢åæ ¼ç ï¼1åæ ¼ 2ä¸åæ ¼ 3 çä¼¼ï¼ãEditby shaocx,2024-08-26ã |
| | | }, |
| | | //éç½® |
| | | resetQueryData(){ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- |
| | | * @Author: éç¥æ 15821704398@163.com |
| | | * @Date: 2023-03-17 10:33:58 |
| | | * @LastEditors: éç¥æ 15821704398@163.com |
| | | * @LastEditTime: 2023-03-17 14:33:36 |
| | | * @FilePath: \iwara-scada-web\src\views\main\WorkPieceInfo\editForm.vue |
| | | * @Description: è¿æ¯é»è®¤è®¾ç½®,请设置`customMade`, æå¼koroFileHeaderæ¥çé
ç½® è¿è¡è®¾ç½®: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| | | --> |
| | | <template> |
| | | <a-modal |
| | | title="è´¨éç¶æä¿®æ¹" |
| | | :width="450" |
| | | :visible="visible" |
| | | :confirmLoading="confirmLoading" |
| | | @ok="handleSubmit" |
| | | @cancel="handleCancel" |
| | | > |
| | | <a-form-model :model="form" ref="formRef" :label-col="labelCol" :wrapper-col="wrapperCol" :rules="rules"> |
| | | <a-form-model-item label="è´¨éç¶æ" > |
| | | <a-radio-group v-model="form.status"> |
| | | <a-radio v-for="item in statusArr" :key="item.value" :value="item.value">{{ item.title }}</a-radio> |
| | | </a-radio-group> |
| | | </a-form-model-item> |
| | | |
| | | <a-form-model-item label="å·¥åº" > |
| | | <a-select allow-clear v-model="form.workingProcedureCurrent" placeholder="è¯·éæ©å·¥åº"> |
| | | <a-select-option v-for="(item, index) in processSelectData" :key="index" :value="item.code"> |
| | | {{ item.name }} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-model-item> |
| | | |
| | | <a-form-model-item label="å¯ç " prop="pwd"> |
| | | <a-input v-model="form.pwd" type="password" placeholder="请è¾å
¥å¯ç "></a-input> |
| | | </a-form-model-item> |
| | | </a-form-model> |
| | | </a-modal> |
| | | </template> |
| | | |
| | | <script> |
| | | import { updatePieceStatus } from '@/api/modular/main/WorkPieceInfoManage' |
| | | export default { |
| | | props: { |
| | | selectedRows: { type: Array, default: () => [] }, |
| | | processSelectData: { type: Array, default: () => [] } |
| | | }, |
| | | emits: ['refresh'], |
| | | data() { |
| | | return { |
| | | labelCol: { |
| | | xs: { span: 24 }, |
| | | sm: { span: 5 } |
| | | }, |
| | | wrapperCol: { |
| | | xs: { span: 24 }, |
| | | sm: { span: 15 } |
| | | }, |
| | | visible: false, |
| | | confirmLoading: false, |
| | | form: { |
| | | status: '', |
| | | pwd: '' |
| | | }, |
| | | statusArr: [ |
| | | { value: '1', title: 'åæ ¼' }, |
| | | { value: '2', title: 'ä¸åæ ¼' }, |
| | | { value: '3', title: 'çä¼¼' } |
| | | ], |
| | | rules: { |
| | | status: [{ required: true, message: 'è´¨éç¶æä¸è½ä¸ºç©º', trigger: 'blur' }], |
| | | workingProcedureCurrent: [{ required: true, message: 'å·¥åºä¸è½ä¸ºç©º', trigger: 'blur' }], |
| | | pwd: [{ required: true, message: 'å¯ç ä¸è½ä¸ºç©º', trigger: 'blur' }] |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | handleSubmit() { |
| | | this.$refs.formRef.validate((vali) => { |
| | | if (vali) { |
| | | // 夿æ¯å¦éä¸åä¸ç§ |
| | | const status = this.selectedRows[0].qualityState |
| | | console.log(status, 'status') |
| | | const count = this.selectedRows.reduce((curr, item) => { |
| | | if (item.qualityState == status) { |
| | | curr++ |
| | | } |
| | | return curr |
| | | }, 0) |
| | | |
| | | if (count != this.selectedRows.length) { |
| | | return this.$message.error('éä¸çè´¨éç¶æå
å«å¤ç§') |
| | | } |
| | | |
| | | this.confirmLoading = true |
| | | const checkPiece = this.selectedRows.reduce((curr, item) => { |
| | | curr.push({ |
| | | workPieceID: item.workPieceID, |
| | | qualityHistoryState: item.qualityState, |
| | | workingProcedureCurrent: item.workingProcedureCurrent, |
| | | id: item.id |
| | | }) |
| | | return curr |
| | | }, []) |
| | | const param = { |
| | | workPieceInfoLst: checkPiece, |
| | | qualityState: this.form.status, |
| | | workingProcedureCurrent: this.form.workingProcedureCurrent, |
| | | password: this.form.pwd |
| | | } |
| | | updatePieceStatus(param) |
| | | .then((res) => { |
| | | this.confirmLoading = false |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.handleCancel() |
| | | this.visible = false |
| | | this.$emit('refresh') |
| | | }) |
| | | .catch((err) => { |
| | | console.log(err) |
| | | this.confirmLoading = false |
| | | }) |
| | | } else { |
| | | this.confirmLoading = false |
| | | this.$message.error('表åéªè¯å¤±è´¥') |
| | | } |
| | | }) |
| | | }, |
| | | handleCancel() { |
| | | this.form = { |
| | | status: '', |
| | | pwd: '' |
| | | } |
| | | this.visible = false |
| | | } |
| | | } |
| | | } |
| | | </script> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <x-card :bordered="false" v-if="hasPerm('WorkPieceInfo:page')"> |
| | | <div slot="content" class="table-page-search-wrapper"> |
| | | <a-form :label-col="labelCol" :wrapper-col="wrapperCol"> |
| | | <a-row :gutter="gutter"> |
| | | <!-- <a-col :md="colMd" :sm="colSm"> |
| | | <a-form-item label="设å¤åç§°"> |
| | | <a-select |
| | | show-search |
| | | option-filter-prop="children" |
| | | :filter-option="filterOption" |
| | | :allowClear="true" |
| | | style="width: 100%" |
| | | v-model="queryParam.EquipmentID" |
| | | placeholder="è¯·éæ©è®¾å¤åç§°" |
| | | > |
| | | <a-select-option v-for="item in equitypeData" :key="item.id" :value="item.equipmentId">{{ |
| | | item.equipmentName |
| | | }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-col> --> |
| | | <a-col :md="colMd" :sm="colSm"> |
| | | <a-form-item label="工件å·"> |
| | | <a-input v-model="queryParam.workPieceID" allow-clear placeholder="请è¾å
¥å·¥ä»¶å·" /> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="colMd" :sm="colSm"> |
| | | <a-form-item label="å建人"> |
| | | <a-input v-model="queryParam.createdUserName" allow-clear placeholder="请è¾å
¥å建人" /> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="colMd" :sm="colSm"> |
| | | <a-form-item label="å·¥åº"> |
| | | <a-select |
| | | allow-clear |
| | | style="width: 100%" |
| | | v-model="queryParam.workingProcedure" |
| | | placeholder="è¯·éæ©å·¥åº" |
| | | > |
| | | <a-select-option v-for="(item, index) in ProcessSelectData" :key="index" :value="item.code"> |
| | | {{ item.name }} |
| | | </a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="colMd2" :sm="colSm2"> |
| | | <a-form-item label="æ¶é´"> |
| | | <a-range-picker style="width:100%" :show-time="{format:'HH:mm'}" v-model="queryParam.dates" format="YYYY-MM-DD HH:mm" /> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <!-- <template v-if="advanced"> |
| | | </template> --> |
| | | <a-col :md="colMd" :sm="colSm"> |
| | | <span class="table-page-search-submitButtons"> |
| | | <a-button type="primary" @click="getData(1)">æ¥è¯¢</a-button> |
| | | <a-button style="margin-left: 8px" @click="resetQueryData">éç½®</a-button> |
| | | <a @click="toggleAdvanced" style="margin-left: 8px"> |
| | | {{ advanced ? 'æ¶èµ·' : 'å±å¼' }} |
| | | <a-icon :type="advanced ? 'up' : 'down'" /> |
| | | </a> |
| | | </span> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form> |
| | | </div> |
| | | </x-card> |
| | | <a-card :bordered="false"> |
| | | <div style="margin-bottom:10px"> |
| | | <a-button style="margin-left: 8px" type="info" icon="download" @click="ExportWorkPieceLogYield2()"> |
| | | 导åºExcel</a-button |
| | | > |
| | | </div> |
| | | <a-table |
| | | :columns="columns" |
| | | :dataSource="data" |
| | | :pagination="pages" |
| | | :rowClassName="getRowBackGround" |
| | | :rowKey="(record) => record.id" |
| | | :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" |
| | | > |
| | | <span slot="time" slot-scope="text"> |
| | | <span v-if="text">{{ moment(moment(text)).format('YYYY-MM-DD HH:mm') }}</span> |
| | | <span v-else>{{ text }}</span> |
| | | </span> |
| | | </a-table> |
| | | </a-card> |
| | | <edit-form |
| | | ref="editRef" |
| | | :selectedRows="selectedRows" |
| | | @refresh="getData" |
| | | :processSelectData="ProcessSelectData" |
| | | ></edit-form> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | // å¨å¶åçæ§ |
| | | import { STable, XCard } from '@/components' |
| | | import { downloadFile,getThisWeekRange } from '@/utils/util' |
| | | import moment from 'moment' |
| | | import { QueryWorkPieceLogYield, exportWorkPieceLogYield } from '@/api/modular/main/WorkPieceInfoManage' |
| | | import editForm from './editForm.vue' |
| | | // è·å设å¤ä¸ææ¡æ°æ® |
| | | import { getEquipmentName } from '@/api/modular/main/EquipmentBaseInfoManage' |
| | | export default { |
| | | components: { |
| | | STable, |
| | | XCard, |
| | | editForm |
| | | }, |
| | | data() { |
| | | return { |
| | | gutter: 36, |
| | | colMd: 6, |
| | | colSm: 18, |
| | | colMd2: 10, |
| | | colSm2: 24, |
| | | labelCol: { |
| | | xs: { span: 24 }, |
| | | sm: { span: 8 } |
| | | }, |
| | | wrapperCol: { |
| | | xs: { span: 24 }, |
| | | sm: { span: 15 } |
| | | }, |
| | | advanced: false, // é«çº§æç´¢ å±å¼/å
³é |
| | | queryParam: { |
| | | dates:[], |
| | | }, |
| | | columns: [ |
| | | { |
| | | title: 'åºå·', |
| | | dataIndex: 'index', |
| | | key: 'index', |
| | | align: 'center', |
| | | customRender: (text, record, index) => `${index + 1}` |
| | | }, |
| | | // { |
| | | // title: 'å½å设å¤', |
| | | // align: 'center', |
| | | // sorter: true, |
| | | // dataIndex: 'equipmentName' |
| | | // }, |
| | | { |
| | | title: 'å½åå·¥åº', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'workingProcedure' |
| | | }, |
| | | { |
| | | title: '工件å·', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'workPieceID' |
| | | }, |
| | | { |
| | | title: '夿³¨', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'remarks' |
| | | }, |
| | | { |
| | | title: 'å建人', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'createdUserName' |
| | | }, |
| | | { |
| | | title: 'å建æ¶é´', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'createdTime' |
| | | }, |
| | | ], |
| | | data: [], |
| | | selectedRowKeys: [], |
| | | selectedRows: [], |
| | | // 设å¤ä¸ææ¡æ°æ® |
| | | equitypeData: [], |
| | | // å·¥åºä¸ææ¡æ°æ® |
| | | WorkPieceSelectData: [], |
| | | // è´¨éç¶æä¸ææ¡æ°æ® |
| | | QualityStateSelectData: [], |
| | | pages: { |
| | | current: 1, |
| | | pageSize: 10, |
| | | total: 0, |
| | | showTotal: (total, range) => `${range[0]}-${range[1]}å
±${total}æ¡`, |
| | | showSizeChanger: true, |
| | | pageSizeOptions: ['10', '20', '30', '40'], |
| | | onChange: this.getData, |
| | | onShowSizeChange: this.showSizeChange |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | this.getEquipmentName() |
| | | this.initData(); |
| | | this.getData() |
| | | this.ProcessSelectData = this.$options.filters['dictData']('process_type') |
| | | this.QualityStateSelectData = this.$options.filters['dictData']('quality_state') |
| | | }, |
| | | methods: { |
| | | initData(){ |
| | | this.queryParam.dates = []; |
| | | this.queryParam.dates = getThisWeekRange(); |
| | | }, |
| | | //éç½® |
| | | resetQueryData(){ |
| | | this.queryParam = { dates:[] } |
| | | this.initData(); |
| | | }, |
| | | getRowBackGround(record) { |
| | | switch ( |
| | | record.cololType // è¿éæ ¹æ®æ¡ä»¶æ¹åè¡¨æ ¼èæ¯è² |
| | | ) { |
| | | case 1: |
| | | return 'table-color-yellow' |
| | | case 2: |
| | | return 'table-color-green' |
| | | case 3: |
| | | return 'table-color-red' |
| | | case 4: |
| | | return 'table-color-blue' |
| | | case 5: |
| | | return 'table-color-gray' |
| | | } |
| | | }, |
| | | async getData(pageNo) { |
| | | if (pageNo) this.pages.current = pageNo |
| | | this.queryParam.pageNo = this.pages.current |
| | | this.queryParam.pageSize = this.pages.pageSize |
| | | try { |
| | | const { data } = await QueryWorkPieceLogYield(this.switchingDate()) |
| | | this.data = data.rows |
| | | this.pages.total = data.totalRows |
| | | } catch (error) { |
| | | console.log(error) |
| | | } |
| | | }, |
| | | |
| | | // è¡¨æ ¼æ¾ç¤ºæ°æ®æ¡æ°æ¹å |
| | | showSizeChange(current, size) { |
| | | this.pages.pageSize = size |
| | | this.getData(1) |
| | | }, |
| | | showEditModal() { |
| | | this.$refs.editRef.visible = true |
| | | }, |
| | | moment, |
| | | /** |
| | | * æ¥è¯¢åæ°ç»è£
|
| | | */ |
| | | switchingDate() { |
| | | const dates = this.queryParam.dates |
| | | if (dates != null) { |
| | | this.queryParam.startTimeBeginTime = moment(dates[0]).format('YYYY-MM-DD HH:mm') |
| | | this.queryParam.startTimeEndTime = moment(dates[1]).format('YYYY-MM-DD HH:mm') |
| | | if (dates.length < 1) { |
| | | delete this.queryParam.startTimeBeginTime |
| | | delete this.queryParam.startTimeEndTime |
| | | } |
| | | } |
| | | const obj = JSON.parse(JSON.stringify(this.queryParam)) |
| | | return obj |
| | | }, |
| | | ExportWorkPieceLogYield2() { |
| | | this.cardLoading = true |
| | | exportWorkPieceLogYield(this.queryParam) |
| | | .then((res) => { |
| | | this.cardLoading = false |
| | | downloadFile(res) |
| | | }) |
| | | .catch((err) => { |
| | | this.cardLoading = false |
| | | console.info(err) |
| | | this.$message.error('ä¸è½½é误ï¼è·åæä»¶æµé误' + err) |
| | | }) |
| | | }, |
| | | getEquipmentName() { |
| | | getEquipmentName().then((res) => { |
| | | this.equitypeData = res.data |
| | | }) |
| | | }, |
| | | toggleAdvanced() { |
| | | this.advanced = !this.advanced |
| | | }, |
| | | onSelectChange(selectedRowKeys, selectedRows) { |
| | | this.selectedRowKeys = selectedRowKeys |
| | | this.selectedRows = selectedRows |
| | | }, |
| | | // è®¾å¤æ¥è¯¢æ¡çé |
| | | filterOption(input, option) { |
| | | return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0 |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style lang="less" > |
| | | .table-operator { |
| | | margin-bottom: 18px; |
| | | } |
| | | button { |
| | | margin-right: 8px; |
| | | } |
| | | |
| | | .table-color-yellow{ |
| | | background-color: rgb(202, 202, 86); |
| | | } |
| | | |
| | | .table-color-green{ |
| | | background-color: rgb(147, 228, 147); |
| | | } |
| | | |
| | | .table-color-red{ |
| | | background-color: rgb(236, 157, 157); |
| | | } |
| | | |
| | | .table-color-blue{ |
| | | background-color: rgb(156, 156, 231); |
| | | } |
| | | |
| | | .table-color-gray{ |
| | | background-color: rgb(181, 172, 172); |
| | | } |
| | | </style> |
| | |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="colMd" :sm="colSm"> |
| | | <a-form-item label="OP80æåç "> |
| | | <a-input v-model="queryParam.oP80NewCode" allow-clear placeholder="请è¾å
¥OP80æåç " /> |
| | | <a-form-item label="æåç "> |
| | | <a-input v-model="queryParam.oP80NewCode" allow-clear placeholder="请è¾å
¥æåç " /> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="colMd" :sm="colSm"> |
| | |
| | | customRender: (text, record, index) => `${index + 1}` |
| | | }, |
| | | { |
| | | title: 'æåç ', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'oP80NewCode' |
| | | }, |
| | | { |
| | | title: 'é¶æ®µ', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'unLineStageName' |
| | | }, |
| | | { |
| | | title: 'å°è½¦ç ', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'carNo' |
| | | }, |
| | | { |
| | | title: '工件å·', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'workPieceID' |
| | | }, |
| | | { |
| | | title: 'OP80æåç ', |
| | | title: 'ä¸çº¿æ¶é´', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'oP80NewCode' |
| | | dataIndex: 'workPieceUnLineTime' |
| | | }, |
| | | { |
| | | title: 'ä¸çº¿äºº', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'workPieceUnLineUserName' |
| | | }, |
| | | { |
| | | title: 'åºåºæ¶é´', |
| | |
| | | total: 0, |
| | | showSizeChanger: true, |
| | | showTotal: (total, range) => `${range[0]}-${range[1]}å
±${total}æ¡`, |
| | | pageSizeOptions: ['10', '20', '30', '40'], |
| | | pageSizeOptions: ['10', '20', '30', '40','50','100','200','300','400','500',], |
| | | onChange: this.getData, |
| | | onShowSizeChange: this.pageSizeChange |
| | | }, |
| | |
| | | dataIndex: 'qualityStateName' |
| | | }, |
| | | { |
| | | title: 'ä¸åæ ¼åå ', |
| | | align: 'center', |
| | | sorter: true, |
| | | dataIndex: 'qualityNoOkReason' |
| | | }, |
| | | { |
| | | title: 'æåç ', |
| | | align: 'center', |
| | | sorter: true, |