| | |
| | | params: data |
| | | }) |
| | | } |
| | | |
| | | // 生产开报工扫码获取工单对应工序任务(不良) |
| | | export function MesOrderNgStepSearch(data) { |
| | | return request({ |
| | | url: 'ProductionManagement/MesOrderNgStepSearch', |
| | | method: 'get', |
| | | params: data |
| | | }) |
| | | } |
| | | // 生产开报工扫码获取工单对应工序任务(不良明细) |
| | | export function MesOrderNgSubStepSearch(data) { |
| | | return request({ |
| | | url: 'ProductionManagement/MesOrderNgSubStepSearch', |
| | | method: 'get', |
| | | params: data |
| | | }) |
| | | } |
| | | // 不良处理,提交 |
| | | export function EditOrderNgStepSeave(data) { |
| | | return request({ |
| | | url: 'ProductionManagement/EditOrderNgStepSeave', |
| | | method: 'post', |
| | | data |
| | | }) |
| | | } |
| | |
| | | <!-- <el-form-item label="用户名称:">--> |
| | | <!-- <div> {{ username }}</div>--> |
| | | <!-- </el-form-item>--> |
| | | <el-form-item label="密码:" prop="password"> |
| | | <el-form-item label="原密码:" prop="password"> |
| | | <el-input v-model="form.password" style="width: 220px;" /> |
| | | </el-form-item> |
| | | <el-form-item label="新密码:" prop="newpassword"> |
| | |
| | | this.username = getCookie('username') |
| | | }, |
| | | data() { |
| | | const validatePassword = (rule, value, callback) => { |
| | | const validatePassword1 = (rule, value, callback) => { |
| | | if (!value) { |
| | | return callback(new Error('请输入密码!')) |
| | | return callback(new Error('请输入原密码!')) |
| | | } else { |
| | | if (SER_HZ.test(value)) { |
| | | return callback(new Error('密码不能为中文!')) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | } |
| | | const validatePassword2 = (rule, value, callback) => { |
| | | if (!value) { |
| | | return callback(new Error('请输入新密码!')) |
| | | } else { |
| | | if (SER_HZ.test(value)) { |
| | | return callback(new Error('密码不能为中文!')) |
| | |
| | | dialogVisible: false, |
| | | formRules: { |
| | | password: [ |
| | | { required: true, validator: validatePassword, trigger: ['blur', 'change'] } |
| | | { required: true, validator: validatePassword1, trigger: ['blur', 'change'] } |
| | | ], |
| | | newpassword: [ |
| | | { required: true, validator: validatePassword, trigger: ['blur', 'change'] } |
| | | { required: true, validator: validatePassword2, trigger: ['blur', 'change'] } |
| | | ] |
| | | } |
| | | } |
| | |
| | | justify-content: end; |
| | | } |
| | | |
| | | .ellipsis{ |
| | | text-overflow :ellipsis;overflow:hidden;white-space:nowrap; |
| | | } |
| | | |
| | | |
| | | |
| | | /* |
| | |
| | | } |
| | | |
| | | // 综合看板图 |
| | | export function bar02(dataArr,titlenameArr) { |
| | | export function bar02(dataArr, titlenameArr) { |
| | | // console.log(val) |
| | | // const data = [70, 60, 50, 40, 30] |
| | | // const titlename = ['外观划伤', '表面油污', '尺寸', '颜色', '大小'] |
| | |
| | | const titlename = titlenameArr |
| | | |
| | | const valdata = [683, 500, 400, 300, 200] |
| | | const myColor = ['#FF0000', '#FF5511', '#FF8800', '#FFBB00', '#FFFF00'] |
| | | // const myColor = ['#FF0000', '#FF5511', '#FF8800', '#FFBB00', '#FFFF00'] |
| | | // const myColor = ['#0000FF'] |
| | | // const myColor = ['#7af5f5', '#00FFFF', '#00FFFF', '#00FFFF', '#00FFFF'] |
| | | const myColor = ['rgba(122,245,245,1)', 'rgba(122,245,245,0.95)', 'rgba(122,245,245,0.9)', 'rgba(122,245,245,0.85)', 'rgba(122,245,245,0.8)'] |
| | | const option = { |
| | | backgroundColor: 'transparent', |
| | | title: { |
| | |
| | | } |
| | | }, |
| | | grid: { |
| | | left: '2%', |
| | | right: '2%', |
| | | left: '10%', |
| | | right: '5%', |
| | | bottom: '0%', |
| | | top: '10%', |
| | | containLabel: true |
| | |
| | | // color: '#d8d7d9', |
| | | color: '#fff', |
| | | fontSize: 14, |
| | | formatter: function(value, index) { |
| | | return [ |
| | | '{lg|' + (index + 1) + '、 }' + '{title|' + value + '} ' |
| | | ].join('\n') |
| | | }, |
| | | // formatter: function(value, index) { |
| | | // return [ |
| | | // '{lg|' + (index + 1) + '、 }' + '{title|' + value + '} ' |
| | | // ].join('\n') |
| | | // }, |
| | | rich: { |
| | | lg: { |
| | | // backgroundColor: '#339911', |
| | |
| | | min-width="160" |
| | | label="角色描述" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.description">{{ row.description }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="lm_user" |
| | | label="创建人员" |
| | |
| | | sortable="custom" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <i v-if="row.is_user==='Y'" class="el-icon-user-solid" style="color:#42b983;cursor: pointer" @click="userClick(row)" /> |
| | | <i v-if="row.is_user==='N'" class="el-icon-user-solid" style="color: rgb(180 ,181, 185);cursor: pointer" @click="userClick(row)" /> |
| | | <i |
| | | v-if="row.is_user==='Y'" |
| | | class="el-icon-user-solid" |
| | | style="color:#42b983;cursor: pointer" |
| | | @click="userClick(row)" |
| | | /> |
| | | <i |
| | | v-if="row.is_user==='N'" |
| | | class="el-icon-user-solid" |
| | | style="color: rgb(180 ,181, 185);cursor: pointer" |
| | | @click="userClick(row)" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <i v-if="row.is_right==='Y'" class="el-icon-share" @click="rightClick(row)" /> |
| | | <i v-if="row.is_right==='N'" class="el-icon-share" style="color: rgb(180 ,181, 185)" @click="rightClick(row)" /> |
| | | <i |
| | | v-if="row.is_right==='N'" |
| | | class="el-icon-share" |
| | | style="color: rgb(180 ,181, 185)" |
| | | @click="rightClick(row)" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | ref="multipleTable" |
| | | :data="dialogFormUserTable" |
| | | border |
| | | :row-class-name="tableRowClassName" |
| | | highlight-current-row |
| | | :height="isIpad?400:365" |
| | | :header-cell-style="this.$headerCellStyle" |
| | | :cell-style="this.$cellStyle" |
| | | :row-key="getRowKey" |
| | | :row-class-name="tableRowClassName" |
| | | @sort-change="sortChangeOfUser" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | |
| | | type="selection" |
| | | width="50" |
| | | :reserve-selection="true" |
| | | fixed |
| | | /> |
| | | <el-table-column |
| | | prop="RowNum" |
| | |
| | | prop="flag" |
| | | label="关联角色" |
| | | sortable="custom" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.flag==='Y'">是</div> |
| | | <div v-if="row.flag==='N'">否</div> |
| | | <div v-if="row.flag==='Y'"> |
| | | <svg-icon icon-class="circleYes" style="margin-right: 2px" /> |
| | | 是 |
| | | </div> |
| | | <div v-if="row.flag==='N'"> |
| | | <svg-icon icon-class="circleNo" style="margin-right: 2px" /> |
| | | 否 |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | </el-dialog> |
| | | |
| | | <!--导入组件--> |
| | | <import-picker ref="importPickerFunc" class="importPickerClass" :shows.sync="shows" :title="title_value" :colos="colos" :code="code" /> |
| | | <import-picker |
| | | ref="importPickerFunc" |
| | | class="importPickerClass" |
| | | :shows.sync="shows" |
| | | :title="title_value" |
| | | :colos="colos" |
| | | :code="code" |
| | | /> |
| | | |
| | | </div> |
| | | </template> |
| | |
| | | |
| | | // 目前一期肯定是这个 |
| | | if (this.PCTrue && !this.APPTrue) { |
| | | pcIsSelected1 = true |
| | | // pcIsSelected1 = true |
| | | if (rightPCArrFlag === 'Y') { |
| | | // pcIsSelected1 = true |
| | | pcIsSelected1 = true |
| | | pcIsSelected2 = true |
| | | |
| | | const interval = setInterval(() => { |
| | |
| | | } |
| | | }, 100) |
| | | |
| | | // this.dialogFormRight.rightCurrentCode = this.dialogFormRight.rightPCArr[0].code |
| | | this.dialogFormRight.rightCurrentCode = this.dialogFormRight.rightPCArr[0].code |
| | | } |
| | | this.dialogFormRight.rightCurrentCode = this.dialogFormRight.rightPCArr[0].code |
| | | // this.dialogFormRight.rightCurrentCode = this.dialogFormRight.rightPCArr[0].code |
| | | } |
| | | |
| | | if (!this.PCTrue && this.APPTrue) { |
| | |
| | | ::v-deep .el-dialog__body { |
| | | padding: 20px 100px !important; |
| | | } |
| | | |
| | | .settingDialogVisible, .userDialogVisible, .dialogVisibleRight { |
| | | ::v-deep .el-dialog__body { |
| | | padding: 10px 20px !important; |
| | |
| | | <!--公共页面样式--> |
| | | <style lang="scss" scoped> |
| | | $main_color: #42b983; |
| | | .el-icon-share ,.el-icon-delete,.el-icon-edit-outline{ |
| | | ::v-deep .el-button--text{ |
| | | font-size: 14px ; |
| | | cursor: pointer ; |
| | | } |
| | | .el-icon-share, .el-icon-delete, .el-icon-edit-outline { |
| | | color: $main_color; |
| | | cursor: pointer; |
| | | } |
| | | .el-icon-edit-outline{ |
| | | |
| | | .el-icon-edit-outline { |
| | | margin-right: 15px; |
| | | } |
| | | |
| | |
| | | background-color: #f8f8fa; |
| | | } |
| | | |
| | | ::v-deep .el-table__body .el-table__row.hover-row td{ |
| | | background-color: #eaecef ; |
| | | ::v-deep .el-table__body .el-table__row.hover-row td { |
| | | background-color: #eaecef; |
| | | } |
| | | |
| | | ::v-deep .el-form--inline .el-form-item__label { |
| | |
| | | .body ::v-deep .el-form-item { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | .userDialogVisible ::v-deep .el-form-item { |
| | | margin-bottom: 0; |
| | | } |
| | |
| | | .el-table .custom-row { |
| | | background: #f8f8fa; |
| | | } |
| | | .el-form-item__label{ |
| | | |
| | | .el-form-item__label { |
| | | font-weight: 400 !important |
| | | } |
| | | |
| | | </style> |
| | |
| | | label="联系人" |
| | | width="110" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.conttacts">{{ row.conttacts }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="conttphone" |
| | | label="联系方式" |
| | | width="160" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.conttphone">{{ row.conttphone }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="addr" |
| | | min-width="160" |
| | | label="补充描述" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.addr">{{ row.addr }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="lm_user" |
| | | label="创建人员" |
| | |
| | | id: '', |
| | | UserCode: '', |
| | | UserName: '', |
| | | Password: '', |
| | | Password: '123456', |
| | | Enable: 'Y', |
| | | StuOrg: '', |
| | | Mobile: '', |
| | |
| | | groupcode: '', |
| | | Operator: '', |
| | | OperType: '', |
| | | wagetype: '' |
| | | wagetype: '2' |
| | | }, |
| | | usergroupArr: [], // 生产班组数组 |
| | | wagetypeArr: [ |
| | |
| | | this.dialogForm.UserCode = '' |
| | | this.dialogForm.UserCode = '' |
| | | this.dialogForm.UserName = '' |
| | | this.dialogForm.Password = '' |
| | | this.dialogForm.Password = '123456' |
| | | this.dialogForm.Enable = 'Y' |
| | | this.$refs.dialogCascader.checkedValue = '' |
| | | this.dialogForm.StuOrg = '' |
| | | this.dialogForm.Mobile = '' |
| | | this.dialogForm.Email = '' |
| | | this.dialogForm.groupcode = '' |
| | | this.dialogForm.wagetype = '' |
| | | this.dialogForm.wagetype = '2' |
| | | this.$refs.dialogForm.clearValidate() |
| | | }, |
| | | // 对话框取消 |
| | |
| | | <!--公共页面样式--> |
| | | <style lang="scss" scoped> |
| | | $main_color: #42b983; |
| | | |
| | | ::v-deep .el-button--text{ |
| | | font-size: 14px ; |
| | | cursor: pointer ; |
| | | } |
| | | .el-icon-share ,.el-icon-delete,.el-icon-edit-outline{ |
| | | color: $main_color; |
| | | cursor: pointer; |
| | |
| | | <!-- 2--> |
| | | <div class="kb_left_bottom kb_pd10"> |
| | | <div class="kb_left_bottom_content"> |
| | | <div class="content_head">采购到货跟踪:</div> |
| | | <div class="content_head kb_title_text">采购到货跟踪</div> |
| | | <div class="content_body"> |
| | | <el-table |
| | | ref="tableData" |
| | |
| | | <el-table-column |
| | | prop="suppername" |
| | | label="供应商" |
| | | width="163" |
| | | /> |
| | | width="125" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.suppername" class="ellipsis">{{ row.suppername }}</div> |
| | | <div v-else /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="username" |
| | | label="采购员" |
| | | width="68" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.username">{{ row.username }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="partcode" |
| | | label="产品编码" |
| | | width="84" |
| | | width="108" |
| | | /> |
| | | <el-table-column |
| | | prop="partname" |
| | | label="产品名称" |
| | | width="168" |
| | | width="155" |
| | | /> |
| | | <el-table-column |
| | | prop="partspec" |
| | | label="规格型号" |
| | | width="84" |
| | | /> |
| | | width="130" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.partspec" class="ellipsis">{{ row.partspec }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="quantity" |
| | | label="订单数量" |
| | | width="84" |
| | | /> |
| | | width="74" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.quantity">{{ parseFloat(row.quantity) }}</div> |
| | | <div v-else>0</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="checktype" |
| | | label="检验状态" |
| | |
| | | <el-table-column |
| | | prop="quantity1" |
| | | label="已收数量" |
| | | width="84" |
| | | /> |
| | | <el-table-column |
| | | label="未收数量" |
| | | width="84" |
| | | width="74" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ parseFloat(row.quantity- row.quantity1) }}</div> |
| | | <div v-if="row.quantity1">{{ parseFloat(row.quantity1) }}</div> |
| | | <div v-else>0</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="未收数量" |
| | | width="74" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.quantity- row.quantity1">{{ parseFloat(row.quantity- row.quantity1) }}</div> |
| | | <div v-else>0</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="acceptDate" |
| | | label="预计交期" |
| | | width="84" |
| | | width="95" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.acceptDate.substring(5, 10) }}</div> |
| | | <div v-if="row.acceptDate">{{ row.acceptDate.substring(0, 10) }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="parseFloat(row.warning)<0" style="color: red">{{ Math.abs(parseFloat(row.warning)) }}</div> |
| | | <div v-else-if="row.warning===null">0</div> |
| | | <div v-else>{{ row.warning }}</div> |
| | | <div v-else-if="row.warning===null||row.warning===''||row.warning===0">0</div> |
| | | <div v-else-if="parseFloat(row.warning)>3">{{ row.warning }}</div> |
| | | <div v-else-if="parseFloat(row.warning)>0&&parseFloat(row.warning)<=3" style="color:yellow;">{{ row.warning }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | <div class="kb_right kb_pd10"> |
| | | <div class="kb_right_top kb_pd10"> |
| | | <div class="kb_right_top_content"> |
| | | <div class="content_head">供应商延期交货排行:</div> |
| | | <div class="content_head kb_title_text">供应商延期交货排行</div> |
| | | <div class="content_body"> |
| | | <el-table |
| | | ref="tableDataRank" |
| | |
| | | <el-table-column |
| | | type="index" |
| | | label="序号" |
| | | width="100" |
| | | width="90" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>NO.{{ row.index }}</div> |
| | |
| | | <el-table-column |
| | | prop="suppercode" |
| | | label="供应商编码" |
| | | width="145" |
| | | width="170" |
| | | /> |
| | | <el-table-column |
| | | prop="suppername" |
| | | width="163" |
| | | width="183" |
| | | label="供应商名称" |
| | | /> |
| | | <el-table-column |
| | | prop="cont" |
| | | label="延期次数" |
| | | width="125" |
| | | width="90" |
| | | /> |
| | | </el-table> |
| | | </div> |
| | |
| | | getPurchaseLeftTop() { |
| | | PurchaseLeftTop().then(res => { |
| | | this.purchaseLeftTopData = res.data[0] |
| | | console.log(this.purchaseLeftTopData) |
| | | // console.log(this.purchaseLeftTopData) |
| | | }) |
| | | setInterval(() => { |
| | | PurchaseLeftTop().then(res => { |
| | |
| | | getPurchaseLeftBottom() { |
| | | PurchaseLeftBottom().then(res => { |
| | | this.tableData = res.data |
| | | }) |
| | | |
| | | const divData = this.$refs.tableData.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableDataRank.length |
| | | divData.scrollTop += 1 |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | PurchaseLeftBottom().then(res => { |
| | | this.tableData = res.data |
| | | }) |
| | | } |
| | | }, this.tableData.length <= 14 ? 1000 * 6 : 100) |
| | | const divData = this.$refs.tableData.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableDataRank.length |
| | | divData.scrollTop += 1 |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | PurchaseLeftBottom().then(res => { |
| | | this.tableData = res.data |
| | | }) |
| | | } |
| | | }, this.tableData.length <= 14 ? 1000 * 6 : 100) |
| | | }) |
| | | }, |
| | | |
| | | getPurchaseRight() { |
| | | PurchaseRight().then(res => { |
| | | this.tableDataRank = res.data |
| | | }) |
| | | |
| | | const divData = this.$refs.tableDataRank.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableDataRank.length |
| | | divData.scrollTop += 1 |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | PurchaseRight().then(res => { |
| | | this.tableDataRank = res.data |
| | | }) |
| | | } |
| | | }, this.tableDataRank.length <= 22 ? 1000 * 6 : 100) |
| | | const divData = this.$refs.tableDataRank.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableDataRank.length |
| | | divData.scrollTop += 1 |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | PurchaseRight().then(res => { |
| | | this.tableDataRank = res.data |
| | | }) |
| | | } |
| | | }, this.tableDataRank.length <= 22 ? 1000 * 6 : 100) |
| | | }) |
| | | }, |
| | | |
| | | tableRowClassName({ row, rowIndex }) { |
| | |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | $kbBorderColor: #09d8f2; |
| | | //$kbBorderColor: #09d8f2; |
| | | $kbBorderColor: rgba(9,216,242,0.4); |
| | | |
| | | .kb_content { |
| | | display: flex; |
| | |
| | | /* width: 0;宽度为0暗藏 */ |
| | | width: 0; |
| | | } |
| | | |
| | | ::v-deep .cell { |
| | | padding: 0 !important; |
| | | } |
| | | </style> |
| | |
| | | <div class="kb_content"> |
| | | <div class="kb_left"> |
| | | <!-- 1--> |
| | | <!-- <div class="kb_left_top kb_pd10" style="padding:10px 0px 10px 5px">--> |
| | | <div class="kb_left_top kb_pd10"> |
| | | <div class="kb_left_top_block" style="margin-top: 10px"> |
| | | <div class="headTitle">产品待入库:</div> |
| | | <div class="headTitle kb_title_text">产品待入库</div> |
| | | <div class="content"> |
| | | <el-table |
| | | ref="tableDataTopRef" |
| | |
| | | <el-table-column |
| | | prop="voucherdate" |
| | | label="单据日期" |
| | | width="86" |
| | | width="110" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.voucherdate.substring(5, 10) }}</div> |
| | | <div v-if=" row.voucherdate">{{ row.voucherdate.substring(0, 10) }}</div> |
| | | <div v-else /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="wo" |
| | | label="单据编号" |
| | | width="165" |
| | | width="149" |
| | | /> |
| | | <el-table-column |
| | | prop="wkshp_name" |
| | | label="生产车间" |
| | | width="86" |
| | | width="95" |
| | | /> |
| | | <el-table-column |
| | | prop="saleOrderCode" |
| | | label="销售订单号" |
| | | width="178" |
| | | /> |
| | | width="170" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.saleOrderCode">{{ row.saleOrderCode }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="materiel_code" |
| | | label="产品编号" |
| | |
| | | <el-table-column |
| | | prop="materiel_name" |
| | | label="产品名称" |
| | | width="105" |
| | | width="140" |
| | | /> |
| | | <el-table-column |
| | | prop="specification" |
| | | label="规格型号" |
| | | width="85" |
| | | /> |
| | | width="113" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.specification" class="ellipsis">{{ row.specification }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="stck_name" |
| | | label="预入仓库" |
| | | width="100" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.stck_name">{{ row.stck_name }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="quantity" |
| | | label="数量" |
| | | width="60" |
| | | width="50" |
| | | /> |
| | | <el-table-column |
| | | prop="totalStockInQuantity" |
| | | label="已入库数量" |
| | | width="105" |
| | | /> |
| | | width="80" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.totalStockInQuantity">{{ row.totalStockInQuantity }}</div> |
| | | <div v-else>0</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="uomname" |
| | | label="单位" |
| | | width="90" |
| | | width="50" |
| | | /> |
| | | <el-table-column |
| | | prop="preStartDate" |
| | | label="预计开工" |
| | | width="86" |
| | | width="100" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.preStartDate.substring(5, 10) }}</div> |
| | | <div v-if="row.preStartDate">{{ row.preStartDate.substring(0, 10) }}</div> |
| | | <div v-else /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="preFinishDate" |
| | | label="预计完工" |
| | | width="86" |
| | | width="110" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.preFinishDate.substring(5, 10) }}</div> |
| | | <div v-if="row.preFinishDate">{{ row.preFinishDate.substring(0, 10) }}</div> |
| | | <div v-else /> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div class="kb_left_top_block" style="margin-top: 25px"> |
| | | <div class="headTitle">产品待发货:</div> |
| | | <div class="headTitle kb_title_text">产品待发货</div> |
| | | <div class="content"> |
| | | <el-table |
| | | ref="tableDataBottomRef" |
| | |
| | | <el-table-column |
| | | prop="voucherdate" |
| | | label="单据日期" |
| | | width="86" |
| | | width="110" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.voucherdate.substring(5, 10) }}</div> |
| | | <div v-if="row.voucherdate">{{ row.voucherdate.substring(0, 10) }}</div> |
| | | <div v-else /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="wo" |
| | | label="单据编号" |
| | | width="165" |
| | | width="145" |
| | | /> |
| | | <el-table-column |
| | | prop="customename" |
| | | label="客户" |
| | | width="170" |
| | | /> |
| | | width="125" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.customename" class="ellipsis">{{ row.customename }}</div> |
| | | <div v-else /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="username" |
| | | label="业务员" |
| | | width="68" |
| | | width="65" |
| | | /> |
| | | <el-table-column |
| | | prop="SourceVoucherCode" |
| | | label="来源单号" |
| | | width="119" |
| | | /> |
| | | width="145" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.SourceVoucherCode">{{ row.SourceVoucherCode }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="materiel_code" |
| | | label="产品编号" |
| | | width="86" |
| | | width="96" |
| | | /> |
| | | <el-table-column |
| | | prop="materiel_name" |
| | | label="产品名称" |
| | | width="86" |
| | | width="170" |
| | | /> |
| | | <el-table-column |
| | | prop="specification" |
| | | label="规格型号" |
| | | width="86" |
| | | /> |
| | | width="100" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.specification" class="ellipsis">{{ row.specification }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="quantity" |
| | | label="数量" |
| | | width="60" |
| | | width="47" |
| | | /> |
| | | <el-table-column |
| | | prop="saleOutQuantity" |
| | | label="已发货数量" |
| | | width="100" |
| | | /> |
| | | width="80" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.saleOutQuantity">{{ row.saleOutQuantity }}</div> |
| | | <div v-else>0</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="priuserdefnvc1" |
| | | label="检验方式" |
| | | width="86" |
| | | width="80" |
| | | /> |
| | | <el-table-column |
| | | prop="priuserdefnvc2" |
| | | label="检验人员" |
| | | width="86" |
| | | width="80" |
| | | /> |
| | | <el-table-column |
| | | prop="deliveryDate" |
| | | label="预计交货日期" |
| | | width="120" |
| | | width="110" |
| | | > |
| | | <!-- <template slot-scope="{row}">--> |
| | | <!-- <div>{{ row.deliveryDate.substring(5,10) }}</div>--> |
| | | <!-- </template>--> |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.deliveryDate">{{ row.deliveryDate.substring(0,10) }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | |
| | | <div class="kb_right kb_pd10"> |
| | | <div class="kb_right_top kb_pd10"> |
| | | <div class="kb_right_top_content"> |
| | | <div class="content_head">产品库存量排行Top5:</div> |
| | | <div class="content_head kb_title_text">产品库存量排行Top5</div> |
| | | <div class="content_body"> |
| | | <div id="bar03" style="width: 100%;height:100%" /> |
| | | </div> |
| | | <div class="content_head" style="margin-top: 12px">原料库存量排行Top5:</div> |
| | | <div class="content_head kb_title_text" style="margin-top: 12px">原料库存量排行Top5</div> |
| | | <div class="content_body"> |
| | | <div id="bar04" style="width: 100%;height:100%" /> |
| | | </div> |
| | |
| | | import './kbCommon.css' |
| | | import { bar02, loadEcharts } from '@/utils/myEcharts' |
| | | import { |
| | | LineSearchBottomLeftData, |
| | | WareHouseRightBottomData, |
| | | WareHouseRightTopData, |
| | | WareHouseTopBottomData, |
| | |
| | | getWareHouseTopLeftData() { |
| | | WareHouseTopLeftData().then(res => { |
| | | this.tableDataTop = res.data |
| | | }) |
| | | |
| | | const divData = this.$refs.tableDataTopRef.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | divData.scrollTop += 1 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableData.length |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | WareHouseTopLeftData().then(res => { |
| | | this.tableDataTop = res.data |
| | | }) |
| | | } |
| | | }, this.tableDataTop.length <= 10 ? 1000 * 6 : 100) |
| | | const divData = this.$refs.tableDataTopRef.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | divData.scrollTop += 1 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableData.length |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | WareHouseTopLeftData().then(res => { |
| | | this.tableDataTop = res.data |
| | | }) |
| | | } |
| | | }, this.tableDataTop.length <= 10 ? 1000 * 6 : 100) |
| | | }) |
| | | }, |
| | | // 获取左下table数据 |
| | | getWareHouseTopBottomData() { |
| | | WareHouseTopBottomData().then(res => { |
| | | this.tableDataBottom = res.data |
| | | }) |
| | | |
| | | const divData = this.$refs.tableDataBottomRef.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | divData.scrollTop += 1 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableData.length |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | WareHouseTopBottomData().then(res => { |
| | | this.tableDataBottom = res.data |
| | | }) |
| | | } |
| | | }, this.tableDataBottom.length <= 10 ? 1000 * 6 : 100) |
| | | const divData = this.$refs.tableDataBottomRef.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | divData.scrollTop += 1 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableData.length |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | WareHouseTopBottomData().then(res => { |
| | | this.tableDataBottom = res.data |
| | | }) |
| | | } |
| | | }, this.tableDataBottom.length <= 10 ? 1000 * 6 : 100) |
| | | }) |
| | | }, |
| | | |
| | | // 获取echarts |
| | | getEcharts() { |
| | | WareHouseRightTopData().then(res => { |
| | | loadEcharts('bar03', bar02(res.data.map(i => i.CanuseBaseQuantity), res.data.map(i => i.materiel_name))) |
| | | loadEcharts('bar03', bar02(res.data.filter(i => i.CanuseBaseQuantity > 0).map(i => i.CanuseBaseQuantity), res.data.filter(i => i.CanuseBaseQuantity > 0).map(i => i.materiel_name))) |
| | | }) |
| | | |
| | | WareHouseRightBottomData().then(res => { |
| | | loadEcharts('bar04', bar02(res.data.map(i => i.CanuseBaseQuantity), res.data.map(i => i.materiel_name))) |
| | | loadEcharts('bar04', bar02(res.data.filter(i => i.CanuseBaseQuantity > 0).map(i => i.CanuseBaseQuantity), res.data.filter(i => i.CanuseBaseQuantity > 0).map(i => i.materiel_name))) |
| | | }) |
| | | |
| | | setInterval(() => { |
| | | WareHouseRightTopData().then(res => { |
| | | loadEcharts('bar03', bar02(res.data.map(i => i.CanuseBaseQuantity), res.data.map(i => i.materiel_name))) |
| | | loadEcharts('bar03', bar02(res.data.filter(i => i.CanuseBaseQuantity > 0).map(i => i.CanuseBaseQuantity), res.data.filter(i => i.CanuseBaseQuantity > 0).map(i => i.materiel_name))) |
| | | }) |
| | | }, 1000 * 15) |
| | | |
| | | setInterval(() => { |
| | | WareHouseRightBottomData().then(res => { |
| | | loadEcharts('bar04', bar02(res.data.map(i => i.CanuseBaseQuantity), res.data.map(i => i.materiel_name))) |
| | | loadEcharts('bar04', bar02(res.data.filter(i => i.CanuseBaseQuantity > 0).map(i => i.CanuseBaseQuantity), res.data.filter(i => i.CanuseBaseQuantity > 0).map(i => i.materiel_name))) |
| | | }) |
| | | }, 1000 * 15) |
| | | }, |
| | |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | $kbBorderColor: #09d8f2; |
| | | //$kbBorderColor: #09d8f2; |
| | | $kbBorderColor: rgba(9,216,242,0.4); |
| | | $kbBackgroundColor: rgba(30, 33, 46, 0.6); |
| | | |
| | | .kb_content { |
| | |
| | | letter-spacing: 2px; |
| | | |
| | | .kb_left { |
| | | width: 1345px; |
| | | width: 1380px; |
| | | height: 100%; |
| | | padding-left: 5px; |
| | | |
| | |
| | | } |
| | | |
| | | .kb_right { |
| | | width: 575px; |
| | | width: 540px; |
| | | height: 100%; |
| | | |
| | | .kb_right_top { |
| | |
| | | ::v-deep .el-table::before { |
| | | height: 0; |
| | | } |
| | | |
| | | ::v-deep .cell { |
| | | padding: 0 !important; |
| | | } |
| | | </style> |
| | |
| | | |
| | | .kb_header_text { |
| | | letter-spacing: 5px; |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | .kb_title_text{ |
| | | font-weight: bolder; |
| | | } |
| | | |
| | | .kb_headerPic { |
| | |
| | | <div class="kb_content"> |
| | | <div class="kb_left"> |
| | | <!-- 1--> |
| | | <div class="kb_left_top_title01"> |
| | | <div class="kb_left_top_title01 kb_title_text"> |
| | | <!-- <div class="PG01" />--> |
| | | <!-- <svg-icon icon-class="sccx" />--> |
| | | 产线加工中任务: |
| | | 产线加工中任务 |
| | | </div> |
| | | |
| | | <div class="kb_left_top kb_pd10"> |
| | | <!-- {{ lineContent01 }}--> |
| | | |
| | | <div class="kb_left_top_block"> |
| | | <div class="kb_block01 kb_pd10"> |
| | |
| | | <div class="kb_mt5"> |
| | | 产品名称:{{ lineContent01.children !== undefined ? lineContent01.children.partname : '' }} |
| | | </div> |
| | | <div class="kb_mt5"> |
| | | 任务数量:{{ lineContent01.children !== undefined ? parseFloat(lineContent01.children.qty) : '' }} |
| | | |
| | | <div v-if="lineContent01.children&&lineContent01.children.length===0" class="kb_mt5"> |
| | | 任务数量: |
| | | </div> |
| | | <div v-else class="kb_mt5"> |
| | | 任务数量:{{ lineContent01.children? parseFloat(lineContent01.children.qty) : '' }} |
| | | </div> |
| | | </div> |
| | | <div v-if="lineContent01.children!==undefined"> |
| | | <!-- <div>{{ lineContent01.children.saleordercode }}</div>--> |
| | | <!-- <div class="kb_mt5 ">{{ lineContent01.children.workcode }}</div>--> |
| | | <!-- <div class="kb_mt5">{{ lineContent01.children.partname }}</div>--> |
| | | <!-- <div v-if="parseFloat(lineContent01.children.qty)!==0" class="kb_mt5">--> |
| | | <!-- {{ parseFloat(lineContent01.children.qty) }}--> |
| | | <!-- </div>--> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="kb_block03 kb_pd10 "> |
| | | <div v-if="lineContent01.children!==undefined" class="flex_s_c"> |
| | |
| | | <div |
| | | v-if="item.status==='START'&&(parseFloat(item.ngqty)===0||item.ngqty==='')&&(parseFloat(item.goodqty)===0||item.goodqty==='')" |
| | | class="circle" |
| | | style="background-color: red;" |
| | | style="background-color: blue;" |
| | | /> |
| | | <div |
| | | v-else-if="item.status==='ALLO'&&(parseFloat(item.ngqty)===0||item.ngqty==='')&&(parseFloat(item.goodqty)===0||item.goodqty==='')" |
| | |
| | | <div class="kb_mt5"> |
| | | 产品名称:{{ lineContent02.children !== undefined ? lineContent02.children.partname : '' }} |
| | | </div> |
| | | <div class="kb_mt5"> |
| | | 任务数量:{{ lineContent02.children !== undefined ? parseFloat(lineContent02.children.qty) : '' }} |
| | | <div v-if="lineContent02.children&&lineContent02.children.length===0" class="kb_mt5"> |
| | | 任务数量: |
| | | </div> |
| | | <div v-else class="kb_mt5"> |
| | | 任务数量:{{ lineContent02.children ? parseFloat(lineContent02.children.qty) : '' }} |
| | | </div> |
| | | </div> |
| | | <div v-if="lineContent02.children!==undefined"> |
| | | <!-- <div>{{ lineContent02.children.saleordercode }}</div>--> |
| | | <!-- <div class="kb_mt5 ">{{ lineContent02.children.workcode }}</div>--> |
| | | <!-- <div class="kb_mt5">{{ lineContent02.children.partname }}</div>--> |
| | | <!-- <div v-if="parseFloat(lineContent02.children.qty)!==0" class="kb_mt5">--> |
| | | <!-- {{ parseFloat(lineContent02.children.qty) }}--> |
| | | <!-- </div>--> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="kb_block03 kb_pd10 "> |
| | | <div v-if="lineContent02.children!==undefined" class="flex_s_c"> |
| | |
| | | <div |
| | | v-if="item.status==='START'&&(parseFloat(item.ngqty)===0||item.ngqty==='')&&(parseFloat(item.goodqty)===0||item.goodqty==='')" |
| | | class="circle" |
| | | style="background-color: red;" |
| | | style="background-color: blue;" |
| | | /> |
| | | <div |
| | | v-else-if="item.status==='ALLO'&&(parseFloat(item.ngqty)===0||item.ngqty==='')&&(parseFloat(item.goodqty)===0||item.goodqty==='')" |
| | |
| | | <div class="kb_mt5"> |
| | | 产品名称:{{ lineContent03.children !== undefined ? lineContent03.children.partname : '' }} |
| | | </div> |
| | | <div class="kb_mt5"> |
| | | 任务数量:{{ lineContent03.children !== undefined ? parseFloat(lineContent03.children.qty) : '' }} |
| | | <div v-if="lineContent03.children&&lineContent03.children.length===0" class="kb_mt5"> |
| | | 任务数量: |
| | | </div> |
| | | <div v-else class="kb_mt5"> |
| | | 任务数量:{{ lineContent03.children ? parseFloat(lineContent03.children.qty) : '' }} |
| | | </div> |
| | | </div> |
| | | <div v-if="lineContent03.children!==undefined"> |
| | | <!-- <div>{{ lineContent03.children.saleordercode }}</div>--> |
| | | <!-- <div class="kb_mt5 ">{{ lineContent03.children.workcode }}</div>--> |
| | | <!-- <div class="kb_mt5">{{ lineContent03.children.partname }}</div>--> |
| | | <!-- <div v-if="parseFloat(lineContent03.children.qty)!==0" class="kb_mt5">--> |
| | | <!-- {{ parseFloat(lineContent03.children.qty) }}--> |
| | | <!-- </div>--> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="kb_block03 kb_pd10 "> |
| | | <div v-if="lineContent03.children!==undefined" class="flex_s_c"> |
| | |
| | | <div |
| | | v-if="item.status==='START'&&(parseFloat(item.ngqty)===0||item.ngqty==='')&&(parseFloat(item.goodqty)===0||item.goodqty==='')" |
| | | class="circle" |
| | | style="background-color: red;" |
| | | style="background-color: blue;" |
| | | /> |
| | | <div |
| | | v-else-if="item.status==='ALLO'&&(parseFloat(item.ngqty)===0||item.ngqty==='')&&(parseFloat(item.goodqty)===0||item.goodqty==='')" |
| | |
| | | <div class="kb_mt5"> |
| | | 产品名称:{{ lineContent04.children !== undefined ? lineContent04.children.partname : '' }} |
| | | </div> |
| | | <div class="kb_mt5"> |
| | | 任务数量:{{ lineContent04.children !== undefined ? parseFloat(lineContent04.children.qty) : '' }} |
| | | <div v-if="lineContent04.children&&lineContent04.children.length===0" class="kb_mt5"> |
| | | 任务数量: |
| | | </div> |
| | | <div v-else class="kb_mt5"> |
| | | 任务数量:{{ lineContent04.children ? parseFloat(lineContent04.children.qty) : '' }} |
| | | </div> |
| | | </div> |
| | | <div v-if="lineContent04.children!==undefined"> |
| | | <!-- <div>{{ lineContent04.children.saleordercode }}</div>--> |
| | | <!-- <div class="kb_mt5 ">{{ lineContent04.children.workcode }}</div>--> |
| | | <!-- <div class="kb_mt5">{{ lineContent04.children.partname }}</div>--> |
| | | <!-- <div v-if="parseFloat(lineContent04.children.qty)!==0" class="kb_mt5">--> |
| | | <!-- {{ parseFloat(lineContent04.children.qty) }}--> |
| | | <!-- </div>--> |
| | | </div> |
| | | |
| | | </div> |
| | | <div class="kb_block03 kb_pd10 "> |
| | | <div v-if="lineContent04.children!==undefined" class="flex_s_c"> |
| | |
| | | <div |
| | | v-if="item.status==='START'&&(parseFloat(item.ngqty)===0||item.ngqty==='')&&(parseFloat(item.goodqty)===0||item.goodqty==='')" |
| | | class="circle" |
| | | style="background-color: red;" |
| | | style="background-color: blue;" |
| | | /> |
| | | <div |
| | | v-else-if="item.status==='ALLO'&&(parseFloat(item.ngqty)===0||item.ngqty==='')&&(parseFloat(item.goodqty)===0||item.goodqty==='')" |
| | |
| | | <!-- 2--> |
| | | <div class="kb_left_bottom kb_pd10"> |
| | | <div class="kb_left_bottom_content"> |
| | | <div class="content_head">产线加工任务:</div> |
| | | <div class="content_head kb_title_text">产线加工任务</div> |
| | | <div class="content_body"> |
| | | <el-table |
| | | ref="tableData" |
| | |
| | | <el-table-column |
| | | prop="RowNum" |
| | | label="序号" |
| | | width="53" |
| | | width="40" |
| | | /> |
| | | <el-table-column |
| | | prop="status" |
| | | label="加工状态" |
| | | width="85" |
| | | width="70" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.status==='ALLO'">已派发</div> |
| | |
| | | <el-table-column |
| | | prop="lm_date" |
| | | label="派发时间" |
| | | width="86" |
| | | width="95" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.lm_date.substring(5, 10) }}</div> |
| | | <div>{{ row.lm_date.substring(0, 10) }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="saleOrderCode" |
| | | label="销售订单号" |
| | | width="150" |
| | | width="158" |
| | | /> |
| | | <el-table-column |
| | | prop="wo_code" |
| | | label="加工单号" |
| | | width="207" |
| | | width="170" |
| | | /> |
| | | <el-table-column |
| | | prop="partname" |
| | | label="产品名称" |
| | | width="105" |
| | | width="145" |
| | | /> |
| | | <el-table-column |
| | | prop="partspec" |
| | | label="规格" |
| | | width="60" |
| | | /> |
| | | width="130" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.partspec" class="ellipsis">{{ row.partspec }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="name" |
| | | label="单位" |
| | | width="60" |
| | | width="50" |
| | | /> |
| | | <el-table-column |
| | | prop="plan_qty" |
| | | label="任务数量" |
| | | width="90" |
| | | width="70" |
| | | /> |
| | | <el-table-column |
| | | prop="good_qty" |
| | | label="完工数量" |
| | | width="90" |
| | | width="70" |
| | | /> |
| | | <el-table-column |
| | | prop="ng_qty" |
| | | label="不良数量" |
| | | width="90" |
| | | width="70" |
| | | /> |
| | | <el-table-column |
| | | prop="wcl" |
| | | label="完成率" |
| | | width="70" |
| | | width="50" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ parseFloat((row.good_qty / row.plan_qty).toFixed(2)) }}%</div> |
| | | <div>{{ parseFloat((row.good_qty * 100 / row.plan_qty).toFixed(2)) }}%</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="planenddate" |
| | | label="预计开始" |
| | | width="86" |
| | | width="95" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.planenddate.substring(5, 10) }}</div> |
| | | <div>{{ row.planenddate.substring(0, 10) }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="planstartdate" |
| | | label="预计结束" |
| | | width="86" |
| | | width="105" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.planstartdate.substring(5, 10) }}</div> |
| | | <div>{{ row.planstartdate.substring(0, 10) }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | <div class="kb_right kb_pd10"> |
| | | <div class="kb_right_top kb_pd10"> |
| | | <div class="kb_right_top_content"> |
| | | <div class="content_head">当日完工产品数量排行:</div> |
| | | <div class="content_head kb_title_text">当日完工产品数量排行</div> |
| | | <div class="content_body"> |
| | | <el-table |
| | | ref="tableDataRank" |
| | |
| | | /> |
| | | <el-table-column |
| | | prop="wkshname" |
| | | label="车间" |
| | | label="车间(供方)" |
| | | width="120" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.wkshname" class="ellipsis">{{ row.wkshname }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="linename" |
| | | label="产线" |
| | |
| | | </div> |
| | | </div> |
| | | <div class="kb_right_bottom kb_pd10"> |
| | | <div class="kb_right_bottom_content_title"> |
| | | 一周不良Top5: |
| | | <div class="kb_right_bottom_content_title kb_title_text"> |
| | | 一周不良Top5 |
| | | </div> |
| | | <div class="kb_right_bottom_content"> |
| | | <div id="bar02" style="width: 100%;height:100%" /> |
| | |
| | | |
| | | leftTopData: [], |
| | | tableData: [], |
| | | tableDataRank: [// 排行 |
| | | // { xh: 'NO.1', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.2', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.3', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.4', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.5', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.6', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.7', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.8', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.9', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.10', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.11', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.12', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.13', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.14', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.15', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.16', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.17', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.18', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.19', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 }, |
| | | // { xh: 'NO.20', cj: '锂电车间', cx: '锂电1线', cp: 'F09锂电', sl: 1000 } |
| | | // |
| | | ] |
| | | tableDataRank: [] |
| | | |
| | | } |
| | | }, |
| | |
| | | }, |
| | | // 处理每一条产线 |
| | | async handleEveryLine(item, index) { |
| | | const { data: res } = await LineSearchTopLeftData([item]) |
| | | console.log(res, 8999) |
| | | const res = await LineSearchTopLeftData([item]) |
| | | console.log(res, 7) |
| | | let res1, res2, res3, res4 |
| | | if (res.data[0].linecode === 'CXSB001') { |
| | | res1 = res |
| | | } |
| | | if (res.data[0].linecode === 'CXSB002') { |
| | | res2 = res |
| | | } |
| | | if (res.data[0].linecode === 'CXSB003') { |
| | | res3 = res |
| | | } |
| | | if (res.data[0].linecode === 'CXSB004') { |
| | | res4 = res |
| | | } |
| | | |
| | | let flag1 = true |
| | | let flag2 = true |
| | | let flag3 = true |
| | |
| | | let count = 0 |
| | | if (flag1) { |
| | | this.lineContent01 = { |
| | | linename: res[0].linename, |
| | | lineworkcont: res[0].lineworkcont, |
| | | children: res[0].children[count] |
| | | linename: res1.data[0].linename, |
| | | lineworkcont: res1.data[0].lineworkcont, |
| | | children: res1.data[0].children ? res.data[0].children[count] : [] |
| | | // children: res1.data[0].children[count] |
| | | } |
| | | flag1 = false |
| | | } |
| | | |
| | | setInterval(() => { |
| | | if (count > 0) { |
| | | this.lineContent01 = { |
| | | linename: res[0].linename, |
| | | lineworkcont: res[0].lineworkcont, |
| | | children: res[0].children[count] |
| | | linename: res1.data[0].linename, |
| | | lineworkcont: res1.data[0].lineworkcont, |
| | | children: res1.data[0].children ? res1.data[0].children[count] : [] |
| | | } |
| | | } |
| | | // count++ |
| | | if (res[0].children.length === count++) { |
| | | // console.log(res1.data[0].children.length, 9999) |
| | | // console.log(res1.data[0].children, 8888) |
| | | if (res1.data[0].children.length > 0 && res1.data[0].children.length === count++) { |
| | | count = 0 |
| | | LineSearchTopLeftData([item]).then(res => { |
| | | res1 = res |
| | | this.lineContent01 = { |
| | | linename: res.data[0].linename, |
| | | lineworkcont: res.data[0].lineworkcont, |
| | | children: res.data[0].children[count] |
| | | linename: res1.data[0].linename, |
| | | lineworkcont: res1.data[0].lineworkcont, |
| | | children: res1.data[0].children ? res1.data[0].children[count] : [] |
| | | } |
| | | }) |
| | | |
| | | // this.handleEveryLine(item, index) |
| | | } |
| | | }, 1000 * 6) |
| | | }, res1.data[0].children && res1.data[0].children.length > 0 ? 1000 * 3 : 1000 * 10) |
| | | } else if (index === 1) { |
| | | let count = 0 |
| | | if (flag2) { |
| | | this.lineContent02 = { |
| | | linename: res[0].linename, |
| | | lineworkcont: res[0].lineworkcont, |
| | | children: res[0].children[count] |
| | | linename: res2.data[0].linename, |
| | | lineworkcont: res2.data[0].lineworkcont, |
| | | children: res2.data[0].children ? res2.data[0].children[count] : [] |
| | | } |
| | | flag2 = false |
| | | } |
| | | |
| | | setInterval(() => { |
| | | if (count > 0) { |
| | | this.lineContent02 = { |
| | | linename: res[0].linename, |
| | | lineworkcont: res[0].lineworkcont, |
| | | children: res[0].children[count] |
| | | linename: res2.data[0].linename, |
| | | lineworkcont: res2.data[0].lineworkcont, |
| | | children: res2.data[0].children ? res2.data[0].children[count] : [] |
| | | } |
| | | } |
| | | |
| | | // count++ |
| | | console.log(this.lineContent02, 123) |
| | | if (res[0].children.length === count++) { |
| | | if (res2.data[0].children.length > 0 && res2.data[0].children.length === count++) { |
| | | count = 0 |
| | | LineSearchTopLeftData([item]).then(res => { |
| | | res2 = res |
| | | this.lineContent02 = { |
| | | linename: res.data[0].linename, |
| | | lineworkcont: res.data[0].lineworkcont, |
| | | children: res.data[0].children[count] |
| | | linename: res2.data[0].linename, |
| | | lineworkcont: res2.data[0].lineworkcont, |
| | | children: res2.data[0].children ? res2.data[0].children[count] : [] |
| | | } |
| | | }) |
| | | |
| | | // this.handleEveryLine(item, index) |
| | | } |
| | | }, 1000 * 6) |
| | | }, res2.data[0].children && res2.data[0].children.length > 0 ? 1000 * 3 : 1000 * 10) |
| | | } else if (index === 2) { |
| | | let count = 0 |
| | | if (flag3) { |
| | | this.lineContent03 = { |
| | | linename: res[0].linename, |
| | | lineworkcont: res[0].lineworkcont, |
| | | children: res[0].children[count] |
| | | linename: res3.data[0].linename, |
| | | lineworkcont: res3.data[0].lineworkcont, |
| | | children: res3.data[0].children ? res3.data[0].children[count] : [] |
| | | } |
| | | flag3 = false |
| | | } |
| | | |
| | | setInterval(() => { |
| | | if (count > 0) { |
| | | this.lineContent03 = { |
| | | linename: res[0].linename, |
| | | lineworkcont: res[0].lineworkcont, |
| | | children: res[0].children[count] |
| | | linename: res3.data[0].linename, |
| | | lineworkcont: res3.data[0].lineworkcont, |
| | | children: res3.data[0].children ? res3.data[0].children[count] : [] |
| | | } |
| | | } |
| | | // count++ |
| | | if (res[0].children.length === count++) { |
| | | if (res3.data[0].children.length > 0 && res3.data[0].children.length === count++) { |
| | | count = 0 |
| | | LineSearchTopLeftData([item]).then(res => { |
| | | res3 = res |
| | | this.lineContent03 = { |
| | | linename: res.data[0].linename, |
| | | lineworkcont: res.data[0].lineworkcont, |
| | | children: res.data[0].children[count] |
| | | linename: res3.data[0].linename, |
| | | lineworkcont: res3.data[0].lineworkcont, |
| | | children: res3.data[0].children ? res3.data[0].children[count] : [] |
| | | } |
| | | }) |
| | | // this.handleEveryLine(item, index) |
| | | } |
| | | }, 1000 * 6) |
| | | }, res3.data[0].children && res3.data[0].children.length > 0 ? 1000 * 3 : 1000 * 10) |
| | | } else if (index === 3) { |
| | | let count = 0 |
| | | if (flag4) { |
| | | this.lineContent04 = { |
| | | linename: res[0].linename, |
| | | lineworkcont: res[0].lineworkcont, |
| | | children: res[0].children[count] |
| | | linename: res4.data[0].linename, |
| | | lineworkcont: res4.data[0].lineworkcont, |
| | | children: res4.data[0].children ? res4.data[0].children[count] : [] |
| | | } |
| | | flag4 = false |
| | | } |
| | | |
| | | setInterval(() => { |
| | | if (count > 0) { |
| | | this.lineContent04 = { |
| | | linename: res[0].linename, |
| | | lineworkcont: res[0].lineworkcont, |
| | | children: res[0].children[count] |
| | | linename: res4.data[0].linename, |
| | | lineworkcont: res4.data[0].lineworkcont, |
| | | children: res4.data[0].children ? res4.data[0].children[count] : [] |
| | | } |
| | | } |
| | | // count++ |
| | | if (res[0].children.length === count++) { |
| | | if (res4.data[0].children > 0 && res4.data[0].children.length === count++) { |
| | | count = 0 |
| | | LineSearchTopLeftData([item]).then(res => { |
| | | res4 = res |
| | | this.lineContent04 = { |
| | | linename: res.data[0].linename, |
| | | lineworkcont: res.data[0].lineworkcont, |
| | | children: res.data[0].children[count] |
| | | linename: res4.data[0].linename, |
| | | lineworkcont: res4.data[0].lineworkcont, |
| | | children: res4.data[0].children ? res4.data[0].children[count] : [] |
| | | } |
| | | }) |
| | | // this.handleEveryLine(item, index) |
| | | } |
| | | }, 1000 * 6) |
| | | }, res4.data[0].children && res4.data[0].children.length > 0 ? 1000 * 3 : 1000 * 10) |
| | | } |
| | | }, |
| | | |
| | | // 在制订单table |
| | | // 产线加工任务 |
| | | getTableDataRoll() { |
| | | LineSearchBottomLeftData().then(res => { |
| | | this.tableData = res.data |
| | | |
| | | const divData = this.$refs.tableData.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | divData.scrollTop += 1 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableData.length |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | LineSearchBottomLeftData().then(res => { |
| | | this.tableData = res.data |
| | | }) |
| | | } |
| | | }, this.tableData.length <= 10 ? 1000 * 6 : 100) |
| | | }) |
| | | const divData = this.$refs.tableData.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | divData.scrollTop += 1 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableData.length |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | LineSearchBottomLeftData().then(res => { |
| | | this.tableData = res.data |
| | | }) |
| | | } |
| | | }, this.tableData.length <= 10 ? 1000 * 6 : 100) |
| | | }, |
| | | // 产线产品数量排行滚动效果 |
| | | // 当日完工产品数量排行 |
| | | getTableDataRankRoll() { |
| | | LineSearchTopRightData().then(res => { |
| | | this.tableDataRank = res.data |
| | | |
| | | const divData = this.$refs.tableDataRank.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableDataRank.length |
| | | divData.scrollTop += 1 |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | LineSearchTopRightData().then(res => { |
| | | this.tableDataRank = res.data |
| | | }) |
| | | } |
| | | }, this.tableDataRank.length <= 10 ? 1000 * 6 : 100) |
| | | }) |
| | | console.log(this.tableDataRank.length, 88) |
| | | const divData = this.$refs.tableDataRank.bodyWrapper |
| | | // 拿到元素后,对元素进行定时增加距离顶部距离,实现滚动效果(此配置为每100毫秒移动1像素) |
| | | setInterval(() => { |
| | | // 元素自增距离顶部1像素 |
| | | // divData.scrollTop += divData.scrollHeight / this.tableDataRank.length |
| | | divData.scrollTop += 1 |
| | | // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) |
| | | if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) { |
| | | // 重置table距离顶部距离 |
| | | divData.scrollTop = 0 |
| | | LineSearchTopRightData().then(res => { |
| | | this.tableDataRank = res.data |
| | | }) |
| | | } |
| | | }, this.tableDataRank.length <= 10 ? 1000 * 6 : 100) |
| | | }, |
| | | // 获取echarts |
| | | getEcharts() { |
| | |
| | | |
| | | <style scoped lang="scss"> |
| | | //$kbBorderColor: #3A0088; |
| | | $kbBorderColor: #09d8f2; |
| | | //$kbBorderColor: #09d8f2; |
| | | $kbBorderColor: rgba(9, 216, 242, 0.4); |
| | | $kbBackgroundColor: rgba(30, 33, 46, 0.6); |
| | | .kb_content { |
| | | display: flex; |
| | |
| | | width: 0; |
| | | } |
| | | |
| | | ::v-deep .cell { |
| | | padding: 0 !important; |
| | | } |
| | | |
| | | // |
| | | ///* 定义keyframes动画,命名为blink*/ |
| | | //@keyframes blink { |
| | |
| | | width="100" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.operation_ration }}%</div> |
| | | <div v-if=" parseFloat(row.operation_ration)===0">/</div> |
| | | <div v-else>{{ row.operation_ration }}%</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | <!--公共页面样式--> |
| | | <style lang="scss" scoped> |
| | | $main_color: #42b983; |
| | | ::v-deep .el-button--text{ |
| | | font-size: 14px ; |
| | | cursor: pointer ; |
| | | } |
| | | .el-icon-share ,.el-icon-delete,.el-icon-edit-outline{ |
| | | color: $main_color; |
| | | cursor: pointer; |
| | |
| | | <el-radio |
| | | v-model="radioSelected" |
| | | :label="row.wo_code" |
| | | style="color: #fff;padding-left: 10px; margin-right: -25px;" |
| | | style="color: transparent;padding-left: 10px; margin-right: -25px;" |
| | | @change.native="getCurrentRow(row.wo_code)" |
| | | /> |
| | | </template> |
| | |
| | | label="产品规格" |
| | | sortable="custom" |
| | | width="110" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.partspec">{{ row.partspec }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="plan_qty" |
| | | label="工单数" |
| | |
| | | label="生产车间" |
| | | sortable="custom" |
| | | width="120" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.wkshp_name">{{ row.wkshp_name }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="route_name" |
| | | label="工艺路线" |
| | | sortable="custom" |
| | | min-width="130" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.route_name">{{ row.route_name }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column |
| | | prop="plan_startdate" |
| | | label="计划开始时间" |
| | | sortable="custom" |
| | | width="160" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.plan_startdate">{{ row.plan_startdate }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="plan_enddate" |
| | | label="计划结束时间" |
| | | sortable="custom" |
| | | width="160" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.plan_enddate">{{ row.plan_enddate }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="piroque" |
| | | label="工单等级" |
| | |
| | | <div v-if="row.piroque==='1'">特级</div> |
| | | <div v-if="row.piroque==='2'">紧急</div> |
| | | <div v-if="row.piroque==='3'">正常</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | <el-table-column |
| | | prop="ng_qty" |
| | | label="不良数量" |
| | | fixed="right" |
| | | /> |
| | | <el-table-column |
| | | label="操作" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" style="padding: 0;" @click="supplementSmallClick(row)">补打</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <span slot="footer" class="dialog-footer"> |
| | |
| | | </div> |
| | | </span> |
| | | </el-dialog> |
| | | |
| | | <!--打印预览页面 小标签--> |
| | | <el-dialog |
| | | title="预览" |
| | | :visible.sync="dialogVisible2" |
| | | width="1140" |
| | | :close-on-click-modal="false" |
| | | @close="dialogVisible2Close" |
| | | > |
| | | <!-- 要打印的区域 --> |
| | | <div id="printMe2" style="padding: 30px;"> |
| | | <div |
| | | style="display: flex;width: 250px;height: 150px;border: 1px solid #000;text-align: center;font-size: 10px;" |
| | | > |
| | | |
| | | <div style="width: 60px;display: flex;flex-direction: column;border-right: 1px solid #000"> |
| | | <div |
| | | style="display: flex;height: 75%;border-bottom:1px solid #000; |
| | | justify-content: center;align-items: center;position: relative" |
| | | > |
| | | <div id="qrCode2" ref="qrCodeDiv2" style="overflow-y: hidden;height: 50px;position: absolute;left: 4px" /> |
| | | </div> |
| | | <div style="display: flex;height: 25%;justify-content: flex-start;align-items: center"> |
| | | <div style="margin-left: 5px;width: 40px">数量:</div> |
| | | {{ qrForm.startqty }} |
| | | </div> |
| | | </div> |
| | | |
| | | <div style="width:190px;display: flex;flex-direction: column"> |
| | | <div |
| | | style="display: flex;height: 25%;border-bottom:1px solid #000;justify-content: flex-start;align-items: center;text-align: left" |
| | | > |
| | | <div style="width: 60px;margin-left: 5px;">工单编号:</div> |
| | | <div>{{ qrForm.wo_code }}</div> |
| | | </div> |
| | | <div |
| | | style="display: flex;height: 25%;border-bottom:1px solid #000;justify-content: flex-start;align-items: center ;text-align: left" |
| | | > |
| | | <div style="width: 60px;margin-left: 5px;">产品编码:</div> |
| | | <div>{{ qrForm.partcode }}</div> |
| | | </div> |
| | | <div |
| | | style="display: flex;height: 25%;border-bottom:1px solid #000 ;justify-content: flex-start;align-items: center;text-align: left" |
| | | > |
| | | <div style="width:60px;margin-left: 5px;">产品名称:</div> |
| | | <div>{{ qrForm.partname }}</div> |
| | | </div> |
| | | <div style="display: flex;height: 25%;justify-content: flex-start;align-items: center;text-align: left"> |
| | | <div style="width: 60px;margin-left: 5px;">下道工序:</div> |
| | | <div>{{ qrForm.nextstepname }}</div> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <div class="footerButton"> |
| | | <el-button @click="dialogVisible2 = false">取 消</el-button> |
| | | <el-button v-print="printObj2" type="primary">确 定</el-button> |
| | | </div> |
| | | </span> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | routename: '', |
| | | lm_date: '' |
| | | }, |
| | | number: '' |
| | | number: '', |
| | | dialogVisible2: false, |
| | | printObj2: { |
| | | id: 'printMe2', |
| | | popTitle: '打印模板', |
| | | preview: false, |
| | | extraHead: '<meta http-equiv="Content-Language" content="zh-cn"/>', |
| | | closeCallback(vue) { // 关闭打印的回调事件(无法确定点击的是确认还是取消) |
| | | console.log('11212', vue) |
| | | // vue.dialogVisible = false |
| | | vue.dialogVisible2 = false |
| | | // vue.dialogVisible = false |
| | | }, |
| | | beforeOpenCallback(vue) { |
| | | vue.printLoading = true |
| | | console.log('打开之前') |
| | | console.log() |
| | | }, |
| | | openCallback(vue) { |
| | | vue.printLoading = false |
| | | console.log('执行了打印') |
| | | } |
| | | }, |
| | | qrForm: { |
| | | qrvalue: '', |
| | | startqty: '', |
| | | wo_code: '', |
| | | partcode: '', |
| | | partname: '', |
| | | nextstepname: '' |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | |
| | | supplementClick() { |
| | | this.dialogVisibleTask = false |
| | | this.handlePrint() |
| | | }, |
| | | // 补打小标签 |
| | | supplementSmallClick(row) { |
| | | // let obj = {} |
| | | |
| | | this.taskTableData.forEach((item, index) => { |
| | | if (item.seq === row.seq) { |
| | | console.log(item) |
| | | this.qrForm = { |
| | | qrvalue: item.seq === this.taskTableData.length ? item.wo_code + ';' + item.stepcode : item.wo_code + ';' + this.taskTableData[item.seq].stepcode, |
| | | startqty: item.seq === this.taskTableData.length ? item.plan_qty : this.taskTableData[item.seq].plan_qty, |
| | | wo_code: item.wo_code, |
| | | partcode: item.partcode, |
| | | partname: item.partname, |
| | | nextstepname: item.seq === this.taskTableData.length ? item.stepname : this.taskTableData[item.seq].stepname |
| | | } |
| | | this.$nextTick(() => { |
| | | console.log(this.qrForm.qrvalue, 3333) |
| | | this.bindQRCode2(this.qrForm.qrvalue) |
| | | }) |
| | | } |
| | | }) |
| | | |
| | | // this.dialogVisibleTask = false |
| | | this.dialogVisible2 = true |
| | | console.log(this.qrForm, 1111) |
| | | }, |
| | | dialogVisible2Close() { |
| | | this.qrForm.qrvalue = '' |
| | | this.qrForm.startqty = '' |
| | | this.qrForm.wo_code = '' |
| | | this.qrForm.partcode = '' |
| | | this.qrForm.partname = '' |
| | | this.qrForm.nextstepname = '' |
| | | // this.$refs.qrCodeDiv2 = '' |
| | | }, |
| | | // 生成二维码 |
| | | bindQRCode2(text) { |
| | | new QRCode(this.$refs.qrCodeDiv2, { |
| | | text: text, |
| | | width: 50, |
| | | height: 50, |
| | | colorDark: '#000', // 二维码颜色 |
| | | colorLight: '#ffffff', // 二维码背景色 |
| | | correctLevel: QRCode.CorrectLevel.L// 容错率,L/M/H |
| | | }) |
| | | } |
| | | |
| | | } |
| | |
| | | <div> |
| | | <div class="body" :style="{height:mainHeight+'px'}"> |
| | | |
| | | <div class="bodyTopButtonGroup"> |
| | | <div class="bodyTopButtonGroup" style="justify-content: space-between"> |
| | | <el-button |
| | | icon="el-icon-refresh-right" |
| | | @click="syncERP" |
| | |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-radio |
| | | v-model="radioSelected" |
| | | :label="row.wo" |
| | | style="color: #fff;padding-left: 10px; margin-right: -25px;" |
| | | @change.native="getCurrentRow(row.wo)" |
| | | v-model="radioSelectedId" |
| | | :label="row.id" |
| | | style="color: transparent;padding-left: 15px; margin-right: -25px;" |
| | | @change.native="getCurrentRow(row.id)" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | label="产品规格" |
| | | sortable="custom" |
| | | min-width="110" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.partspec">{{ row.partspec }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="qty" |
| | | label="订单数量" |
| | |
| | | label="生产车间" |
| | | sortable="custom" |
| | | width="150" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.wkshp_name">{{ row.wkshp_name }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="planstartdate" |
| | | label="预计开工时间" |
| | |
| | | label="创建人员" |
| | | sortable="custom" |
| | | width="150" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.createuser">{{ row.createuser }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="createdate" |
| | | label="创建时间" |
| | |
| | | ], |
| | | total: 10, |
| | | radioSelected: '', |
| | | radioSelectedId: '', |
| | | tableData: [], |
| | | dialogVisible: false, |
| | | dialogForm: { |
| | | erporderid: '', |
| | | partname: '', // 产品名称 |
| | | partspec: '', // 产品规格 |
| | | // paystartdate: '', // 预计开工时间 |
| | |
| | | this.getErpOrderSearch() |
| | | }, |
| | | // 单选框选中获取当前行信息 |
| | | getCurrentRow(wo) { |
| | | this.radioSelected = wo |
| | | getCurrentRow(id) { |
| | | // console.log(row, 2) |
| | | // this.radioSelected = row.wo |
| | | this.radioSelectedId = id |
| | | }, |
| | | // 订单关闭 |
| | | async orderClose() { |
| | | if (this.radioSelected.length < 1) { |
| | | if (this.radioSelectedId.length < 1) { |
| | | return this.$message.info('请先选择订单!') |
| | | } |
| | | this.tableData.forEach(item => { |
| | | if (item.wo === this.radioSelected) { |
| | | if (item.id === this.radioSelectedId) { |
| | | if (item.status !== 'NEW') { |
| | | return this.$message.info('此订单非新订单,无法关闭!') |
| | | } else { |
| | |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | ClosedErpOrder({ erpordercode: this.radioSelected }).then(res => { |
| | | ClosedErpOrder({ erpordercode: item.wo, erporderid: this.radioSelectedId }).then(res => { |
| | | if (res.code === '200') { |
| | | this.$message.success('订单关闭成功!') |
| | | this.getErpOrderSearch() |
| | |
| | | this.dialogVisible = true |
| | | |
| | | this.$nextTick(() => { |
| | | this.dialogForm.erporderid = row.id |
| | | this.dialogForm.erporderstus = row.status |
| | | this.dialogForm.erpordercode = row.wo |
| | | this.dialogForm.partcode = row.partcode |
| | |
| | | this.$refs.dialogForm.validate(valid => { |
| | | if (valid) { |
| | | const data = { |
| | | 'erporderid': this.dialogForm.erporderid, |
| | | // 'erporderstus': this.dialogForm.erporderstus, |
| | | 'erpordercode': this.dialogForm.erpordercode, |
| | | 'partcode': this.dialogForm.partcode, |
| | |
| | | /> |
| | | <el-table-column |
| | | prop="partname" |
| | | min-width="110" |
| | | min-width="160" |
| | | label="产品名称" |
| | | sortable="custom" |
| | | /> |
| | |
| | | min-width="80" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="descr" |
| | | label="工序描述" |
| | | min-width="150" |
| | | sortable="custom" |
| | | /> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="descr"--> |
| | | <!-- label="工序描述"--> |
| | | <!-- min-width="150"--> |
| | | <!-- sortable="custom"--> |
| | | <!-- >--> |
| | | <!-- <template slot-scope="{row}">--> |
| | | <!-- <div v-if="row.descr">{{ row.descr }}</div>--> |
| | | <!-- <div v-else>/</div>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <el-table-column |
| | | prop="plan_qty" |
| | | label="任务数量" |
| | |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | label="未报工数量" |
| | | width="120" |
| | | > |
| | | <!-- sortable="custom"--> |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.plan_qty - row.good_qty - row.ng_qty }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="good_qty" |
| | | label="已报工数量(良品)" |
| | | label="已报工数量" |
| | | sortable="custom" |
| | | width="160" |
| | | /> |
| | |
| | | prop="ng_qty" |
| | | label="不良数量" |
| | | width="150" |
| | | |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="bad_qty" |
| | | label="已报废数量" |
| | | width="120" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | |
| | | label="计划开工日期" |
| | | width="185" |
| | | sortable="custom" |
| | | fixed="right" |
| | | /> |
| | | <el-table-column |
| | | prop="plan_enddate" |
| | | label="计划完工日期" |
| | | width="185" |
| | | sortable="custom" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.plan_startdate">{{ row.plan_startdate }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column--> |
| | | <!-- label="操作"--> |
| | | <!-- width="150"--> |
| | |
| | | <el-table-column |
| | | prop="partname" |
| | | label="产品名称" |
| | | min-width="110" |
| | | min-width="160" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | |
| | | min-width="80" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="descr" |
| | | label="工序描述" |
| | | min-width="150" |
| | | sortable="custom" |
| | | /> |
| | | <!-- <el-table-column--> |
| | | <!-- prop="descr"--> |
| | | <!-- label="工序描述"--> |
| | | <!-- min-width="150"--> |
| | | <!-- sortable="custom"--> |
| | | <!-- >--> |
| | | <!-- <template slot-scope="{row}">--> |
| | | <!-- <div v-if="row.descr">{{ row.descr }}</div>--> |
| | | <!-- <div v-else>/</div>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <el-table-column |
| | | prop="plan_qty" |
| | | label="任务数量" |
| | |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | label="未报工数量" |
| | | width="120" |
| | | > |
| | | <!-- sortable="custom"--> |
| | | <template slot-scope="{row}"> |
| | | <div>{{ row.plan_qty - row.good_qty - row.ng_qty }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="good_qty" |
| | | label="已收料数量(良品)" |
| | | label="已收料数量" |
| | | sortable="custom" |
| | | width="160" |
| | | /> |
| | |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="bad_qty" |
| | | label="已报废数量" |
| | | min-width="120" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="plan_startdate" |
| | | label="计划开工日期" |
| | | width="185" |
| | | sortable="custom" |
| | | fixed="right" |
| | | /> |
| | | <el-table-column |
| | | prop="plan_enddate" |
| | | label="计划完工日期" |
| | | width="185" |
| | | sortable="custom" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.plan_startdate">{{ row.plan_startdate }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column--> |
| | | <!-- label="操作"--> |
| | | <!-- width="150"--> |
| | |
| | | layout="total,prev, pager, next,sizes" |
| | | popper-class="select_bottom" |
| | | @pagination="getMesOrderStepSearch" |
| | | /> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="不良待处理列表"> |
| | | <div style="margin-left: 10px;margin-top:10px;display: flex;justify-content: space-between"> |
| | | <div style="display: flex;align-items: center"> |
| | | <div style="width: 90px">扫描条码:</div> |
| | | <!-- oninput="value=value.replace(/[^0-9a-zA-Z;_]/g,'')"--> |
| | | |
| | | <el-input |
| | | v-model="badForm.orderstepqrcode" |
| | | name="badProduceCode" |
| | | style="width: 300px" |
| | | @keyup.enter.native="val=>enterNative(val,'badProduceCode')" |
| | | /> |
| | | </div> |
| | | </div> |
| | | <el-divider /> |
| | | <div class="elTableDiv"> |
| | | <el-table |
| | | :data="badTableData" |
| | | :height="isIpad? (tableHeight+50):tableHeight" |
| | | border |
| | | :row-class-name="tableRowClassName" |
| | | :style="{width: 100+'%',height:tableHeight+'px',}" |
| | | highlight-current-row |
| | | :header-cell-style="this.$headerCellStyle" |
| | | :cell-style="this.$cellStyle" |
| | | @sort-change="badSortChange" |
| | | > |
| | | <el-table-column |
| | | prop="RowNum" |
| | | width="50" |
| | | label="序号" |
| | | fixed |
| | | /> |
| | | |
| | | <el-table-column |
| | | prop="wo_code" |
| | | label="工单号" |
| | | min-width="160" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="partcode" |
| | | label="产品编码" |
| | | min-width="110" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="partname" |
| | | min-width="160" |
| | | label="产品名称" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="stepname" |
| | | label="工序" |
| | | min-width="80" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="plan_qty" |
| | | label="任务数量" |
| | | min-width="110" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="good_qty" |
| | | label="已报工数量" |
| | | sortable="custom" |
| | | min-width="160" |
| | | /> |
| | | <el-table-column |
| | | prop="ng_qty" |
| | | label="不良数量" |
| | | min-width="150" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | prop="bad_qty" |
| | | label="已报废数量" |
| | | min-width="120" |
| | | sortable="custom" |
| | | /> |
| | | <el-table-column |
| | | label="操作" |
| | | width="120" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div class="operationClass"> |
| | | <el-button type="text" @click="repairHandle(row)">维修处理</el-button> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | </el-table> |
| | | </div> |
| | | <!--分页--> |
| | | <pagination |
| | | :total="badTotal" |
| | | :page.sync="badForm.page" |
| | | :limit.sync="badForm.rows" |
| | | align="right" |
| | | layout="total,prev, pager, next,sizes" |
| | | popper-class="select_bottom" |
| | | @pagination="getBadList" |
| | | /> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | |
| | | <el-form-item label="当前工序:"> |
| | | <div style="width: 200px">{{ dialogForm.stepname }}</div> |
| | | </el-form-item> |
| | | <el-form-item label="工序描述:"> |
| | | <el-form-item v-if="false" label="工序描述:"> |
| | | <!-- <el-tooltip class="item" effect="dark" content="原材料切按材料切按材料切按时打卡数据的卡" placement="top-start">--> |
| | | <div style="width: 200px;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;"> |
| | | {{ dialogForm.stepdesc }} |
| | |
| | | title="预览" |
| | | :visible.sync="dialogVisible2" |
| | | width="1140" |
| | | top="10vh" |
| | | :close-on-click-modal="false" |
| | | @close="dialogVisible2Close" |
| | | > |
| | |
| | | </span> |
| | | </el-dialog> |
| | | |
| | | <!-- 不良处理列表对话框--> |
| | | <el-dialog |
| | | title="维修处理" |
| | | :visible.sync="badDialogVisible" |
| | | width="990px" |
| | | class="badDialogVisible" |
| | | top="10vh" |
| | | :close-on-click-modal="false" |
| | | @close="handleCloseBad" |
| | | @closed="handleCloseBad" |
| | | > |
| | | <el-form |
| | | inline |
| | | :model="badDialogForm" |
| | | label-width="110px" |
| | | > |
| | | <el-form-item label="工单编号:"> |
| | | <div style="width: 200px">{{ badDialogForm.wo_code }}</div> |
| | | </el-form-item> |
| | | <el-form-item label="产品编码:"> |
| | | <div style="width: 200px">{{ badDialogForm.partcode }}</div> |
| | | </el-form-item> |
| | | <el-form-item label="产品名称:"> |
| | | <div style="width: 200px">{{ badDialogForm.partname }}</div> |
| | | </el-form-item> |
| | | <el-form-item label="产品规格:"> |
| | | <div style="width: 200px">{{ badDialogForm.partspec }}</div> |
| | | </el-form-item> |
| | | <el-form-item label="当前工序:"> |
| | | <div style="width: 200px">{{ badDialogForm.stepname }}</div> |
| | | </el-form-item> |
| | | <el-form-item label="下道工序:"> |
| | | <div style="width: 200px">{{ badDialogForm.nextstepname }}</div> |
| | | </el-form-item> |
| | | <el-form-item label="任务数量:"> |
| | | <div style="width: 200px">{{ badDialogForm.plan_qty }}</div> |
| | | </el-form-item> |
| | | <el-form-item label="报工数量:"> |
| | | <div style="width: 200px">{{ badDialogForm.good_qty }}</div> |
| | | </el-form-item> |
| | | <el-form-item label="不良数量:"> |
| | | <div style="width: 200px">{{ badDialogForm.ng_qty }}</div> |
| | | </el-form-item> |
| | | |
| | | </el-form> |
| | | <div style="margin-bottom:20px"> |
| | | <i class="el-icon-s-operation" style="color:#42b983;" /> 不良信息明细: |
| | | </div> |
| | | <div class="elTableDiv"> |
| | | <el-table |
| | | :data="badTableDataDialog" |
| | | :height="isIpad? (tableHeight-350):(tableHeight-400)" |
| | | border |
| | | :row-class-name="tableRowClassName" |
| | | :style="{width: 100+'%',height:(tableHeight-400)+'px',}" |
| | | highlight-current-row |
| | | :header-cell-style="this.$headerCellStyle" |
| | | :cell-style="this.$cellStyle" |
| | | > |
| | | <el-table-column |
| | | type="index" |
| | | width="50" |
| | | label="序号" |
| | | fixed |
| | | /> |
| | | <el-table-column |
| | | prop="step_code" |
| | | label="工序编码" |
| | | min-width="80" |
| | | /> |
| | | <el-table-column |
| | | prop="stepname" |
| | | label="工序名称" |
| | | min-width="80" |
| | | /> |
| | | |
| | | <el-table-column |
| | | prop="plan_qty" |
| | | label="任务数量" |
| | | width="80" |
| | | /> |
| | | <el-table-column |
| | | label="报工数量" |
| | | width="80" |
| | | prop="report_qty" |
| | | /> |
| | | <el-table-column |
| | | prop="ng_qty" |
| | | label="不良数量" |
| | | width="80" |
| | | /> |
| | | <el-table-column |
| | | prop="badqty" |
| | | label="已报废数量" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | prop="defect_name" |
| | | label="不良原因" |
| | | show-tooltip-when-overflow |
| | | width="80" |
| | | /> |
| | | <el-table-column |
| | | prop="repair_qty" |
| | | label="维修数量" |
| | | width="90" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <!-- {{ row.repair_qty }}--> |
| | | <div v-if="row.isVisible===0">{{ row.repair_qty }}</div> |
| | | <el-input v-if="row.isVisible===1" v-model="row.repair_qty" oninput="value=value.replace(/[^0-9]/g,'')" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="bad_qty" |
| | | label="报废数量" |
| | | width="90" |
| | | > |
| | | <!-- oninput="value=value.replace(/[0-9]/g,'')"--> |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.isVisible===0">{{ row.bad_qty }}</div> |
| | | <el-input v-if="row.isVisible===1" v-model="row.bad_qty" oninput="value=value.replace(/[^0-9]/g,'')" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="操作" |
| | | width="100" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div class="operationClass"> |
| | | <el-button v-if="row.isVisible===0" type="text" @click="badEdit(row)">编辑</el-button> |
| | | <el-button v-if="row.isVisible===0" type="text" @click="badDel(row)">删除</el-button> |
| | | |
| | | <el-button v-if="row.isVisible===1" type="text" @click="badSave(row)">确认</el-button> |
| | | <el-button v-if="row.isVisible===1" type="text" @click="badCancel(row)">取消</el-button> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | </el-table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <div class="footerButton"> |
| | | <el-button @click="badDialogVisibleCancel">取 消</el-button> |
| | | <el-button type="primary" @click="badDialogVisibleConfirm ">保 存/打 印</el-button> |
| | | </div> |
| | | </span> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | MesOrderStepSelectCause, |
| | | SavaMesOrderStepIn, |
| | | SavaMesOrderStepStart, |
| | | SavaMesOrderStepReport |
| | | SavaMesOrderStepReport, MesOrderNgStepSearch, MesOrderNgSubStepSearch, EditOrderNgStepSeave |
| | | } from '@/api/scgl' |
| | | import { urlAddRandomNo, webapp_ws_ajax_run, webapp_ws_autoupdate } from '@/utils/grwebapp' |
| | | import QRCode from 'qrcodejs2' |
| | |
| | | console.log('执行了打印') |
| | | } |
| | | }, |
| | | qrForm: { |
| | | qrForm: { // 打印内容 |
| | | qrvalue: '', |
| | | startqty: '', |
| | | wo_code: '', |
| | | partcode: '', |
| | | partname: '', |
| | | nextstepname: '' |
| | | } |
| | | nextstepname: '', |
| | | operator: '', // 操作人 |
| | | operatorTime: ''// 操作时间 |
| | | }, |
| | | badForm: { |
| | | orderstepqrcode: '', // 扫描的二维码 |
| | | prop: 'wo_code', |
| | | order: 'asc', |
| | | page: 1, |
| | | rows: 20 |
| | | }, |
| | | badTableData: [], // 不良处理列表table数据 |
| | | badTotal: 0, |
| | | badDialogVisible: false, |
| | | badDialogForm: {}, |
| | | badTableDataDialog: []// 不良对话框table表格 |
| | | } |
| | | }, |
| | | // computed: { |
| | |
| | | this.WXform.prop = prop |
| | | this.getMesOrderWxStepSearch() |
| | | }, |
| | | badSortChange({ column, prop, order }) { |
| | | if (order === 'descending') { |
| | | order = 'desc' |
| | | } else if (order === 'ascending') { |
| | | order = 'asc' |
| | | } else { |
| | | order = 'desc' |
| | | } |
| | | this.badForm.order = order |
| | | this.badForm.prop = prop |
| | | this.getBadList() |
| | | }, |
| | | // 自制页签原点点击 |
| | | getCurrentRow(val) { |
| | | |
| | |
| | | this.getMesOrderWxStepSearch() |
| | | $("input[name='WXproduceCode']")[0].focus() |
| | | this.form.orderstepqrcode = '' |
| | | }) |
| | | } |
| | | if (this.$refs.elTabs.currentName === '2') { |
| | | this.$nextTick(() => { |
| | | this.getBadList() |
| | | $("input[name='badProduceCode']")[0].focus() |
| | | this.badForm.orderstepqrcode = '' |
| | | }) |
| | | } |
| | | }, |
| | |
| | | if (res.code === '200' && res.count === 3) { |
| | | await this.WXback(res.data) |
| | | } |
| | | } |
| | | |
| | | if (belong === 'badProduceCode') { |
| | | // this.badForm.orderstepqrcode= |
| | | await this.getBadList() |
| | | await this.repairHandle(this.badForm.orderstepqrcode) |
| | | this.badDialogVisible = true |
| | | } |
| | | }, |
| | | // 查询 |
| | |
| | | |
| | | this.dialogForm.startqtySum = '' // 不能超过的数值 |
| | | |
| | | this.dialogForm.nextstepcode = '' // 下道工序编码 |
| | | |
| | | this.userTableData = [] // 人员列表 |
| | | |
| | | this.$refs.dialogForm.clearValidate() |
| | | }, |
| | | // 对话框取消 |
| | |
| | | } |
| | | SavaMesOrderStepIn(data).then(res => { |
| | | if (res.code === '200') { |
| | | this.WXprint2() |
| | | this.$message.success('收料成功!') |
| | | this.dialogVisible = false |
| | | |
| | | if (this.dialogForm.nextstepcode !== '') { |
| | | this.WXprint2() |
| | | } |
| | | this.dialogVisible2 = true |
| | | this.tabClick() |
| | | } else { |
| | |
| | | return this.$message.info('请选择不良原因!') |
| | | } |
| | | } |
| | | |
| | | // this.userTableData = [...new Set(this.userTableData)]// 数组去重 |
| | | this.userTableData = this.userTableData.filter(item => item.usercode !== '') |
| | | // 数组中对象相同的去重 |
| | | this.userTableData = this.userTableData.filter((currentValue, currentIndex, selfArr) => { |
| | | return selfArr.findIndex(item => item.usercode === currentValue.usercode) === currentIndex |
| | | }) |
| | | // console.log(this.userTableData, 1) |
| | | const reportuser = this.userTableData.map(item => item.usercode).join(';') |
| | | const data = { |
| | | mesordercode: this.dialogForm.wo_code, // 工单编号 |
| | |
| | | |
| | | SavaMesOrderStepReport(data).then(res => { |
| | | if (res.code === '200') { |
| | | this.ZZprint2() |
| | | this.$message.success('报工成功!') |
| | | this.dialogVisible = false |
| | | |
| | | console.log(this.dialogForm.nextstepcode, 1) |
| | | if (this.dialogForm.nextstepcode !== '') { |
| | | this.ZZprint2() |
| | | } |
| | | this.dialogVisible2 = true |
| | | this.tabClick() |
| | | } else { |
| | |
| | | this.tableHeight = this.tableHeight - 50 |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 获取不良处理列表 |
| | | async getBadList() { |
| | | const res = await MesOrderNgStepSearch(this.badForm) |
| | | this.badTableData = res.data |
| | | this.badTotal = res.count |
| | | }, |
| | | badDialogVisibleCancel() { |
| | | this.badDialogVisible = false |
| | | }, |
| | | badDialogVisibleConfirm() { |
| | | const data = { |
| | | Data: this.badTableDataDialog |
| | | } |
| | | // console.log(JSON.stringify(data), 1) |
| | | // this.badPrint() |
| | | // this.dialogVisible2 = true |
| | | |
| | | EditOrderNgStepSeave(data).then(res => { |
| | | if (res.code === '200' || res.code === '301') { |
| | | this.getBadList() |
| | | this.badDialogVisible = false |
| | | return this.$message.success('保存成功!') |
| | | } |
| | | }) |
| | | }, |
| | | badPrint() { |
| | | this.qrForm.qrvalue = this.badDialogForm.wo_code + ';' + this.badDialogForm.nextstepcode |
| | | this.qrForm.startqty = this.badDialogForm.plan_qty |
| | | this.qrForm.wo_code = this.badDialogForm.wo_code |
| | | this.qrForm.partcode = this.badDialogForm.partcode |
| | | this.qrForm.partname = this.badDialogForm.partname |
| | | this.qrForm.nextstepname = this.badDialogForm.nextstepname |
| | | this.$nextTick(() => { |
| | | this.bindQRCode(this.qrForm.qrvalue) |
| | | }) |
| | | }, |
| | | |
| | | handleCloseBad() { |
| | | this.badDialogForm = {} |
| | | this.badTableDataDialog = [] |
| | | }, |
| | | // 点击维修处理按钮 |
| | | async repairHandle(row) { |
| | | console.log(row) |
| | | let data |
| | | if (row.wo_code) { |
| | | data = { |
| | | orderstepqrcode: row.wo_code + ';' + row.stepcode |
| | | } |
| | | } else { |
| | | data = { |
| | | orderstepqrcode: row |
| | | } |
| | | } |
| | | |
| | | const { data: res } = await MesOrderNgSubStepSearch(data) |
| | | |
| | | this.$nextTick(() => { |
| | | this.badDialogForm.wo_code = res.data1.wo_code |
| | | this.badDialogForm.partcode = res.data1.partnumber |
| | | this.badDialogForm.partname = res.data1.partname |
| | | this.badDialogForm.partspec = res.data1.partspec |
| | | this.badDialogForm.stepname = res.data1.stepname |
| | | this.badDialogForm.nextstepcode = res.data1.nextstepcode |
| | | this.badDialogForm.nextstepname = res.data1.nextstepname |
| | | this.badDialogForm.plan_qty = res.data1.planqty |
| | | this.badDialogForm.good_qty = res.data1.noreportqty // 报工数量 |
| | | this.badDialogForm.ng_qty = res.data1.noputqty // 不良数量 |
| | | |
| | | this.badTableDataDialog = res.data2 |
| | | |
| | | this.badTableDataDialog.forEach(item => { |
| | | item.repair_qty = 0 |
| | | item.bad_qty = 0 |
| | | item.isVisible = 0 |
| | | }) |
| | | console.log(this.badTableDataDialog, 321) |
| | | this.badDialogVisible = true |
| | | }) |
| | | }, |
| | | badEdit(row) { |
| | | console.log(row) |
| | | this.badTableDataDialog.forEach((item, index) => { |
| | | if (item.id === row.id && item.m_id === row.m_id) { |
| | | this.badTableDataDialog.splice(index, 1, { |
| | | bad_qty: row.bad_qty, |
| | | repair_qty: row.repair_qty, |
| | | isVisible: 1, |
| | | defect_code: row.defect_code, |
| | | defect_name: row.defect_name, |
| | | badqty: row.badqty, |
| | | id: row.id, |
| | | m_id: row.m_id, |
| | | materiel_code: row.materiel_code, |
| | | ng_qty: row.ng_qty, |
| | | plan_qty: row.plan_qty, |
| | | report_qty: row.report_qty, |
| | | seq: row.seq, |
| | | step_code: row.step_code, |
| | | stepname: row.stepname, |
| | | style: row.style, |
| | | wo_code: row.wo_code |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | badSave(row) { |
| | | console.log(row, 1) |
| | | // console.log(parseFloat(row.bad_qty) + parseFloat(row.repair_qty), 2) |
| | | // console.log(parseFloat(row.ng_qty), 2) |
| | | // console.log(parseFloat(row.bad_qty) + parseFloat(row.repair_qty) > parseFloat(row.ng_qty), 2) |
| | | if (parseFloat(row.bad_qty) + parseFloat(row.repair_qty) > parseFloat(row.ng_qty)) { |
| | | this.badCancel(row) |
| | | return this.$message.info('维修数量与报废数量之和不能大于不良数量!') |
| | | } |
| | | this.badTableDataDialog.forEach((item, index) => { |
| | | if (item.id === row.id && item.m_id === row.m_id) { |
| | | this.badTableDataDialog.splice(index, 1, { |
| | | bad_qty: row.bad_qty, |
| | | repair_qty: row.repair_qty, |
| | | isVisible: 0, |
| | | defect_code: row.defect_code, |
| | | defect_name: row.defect_name, |
| | | id: row.id, |
| | | m_id: row.m_id, |
| | | badqty: row.badqty, |
| | | materiel_code: row.materiel_code, |
| | | ng_qty: row.ng_qty, |
| | | plan_qty: row.plan_qty, |
| | | report_qty: row.report_qty, |
| | | seq: row.seq, |
| | | step_code: row.step_code, |
| | | stepname: row.stepname, |
| | | style: row.style, |
| | | wo_code: row.wo_code |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | badCancel(row) { |
| | | this.badTableDataDialog.forEach((item, index) => { |
| | | if (item.id === row.id && item.m_id === row.m_id) { |
| | | this.badTableDataDialog.splice(index, 1, { |
| | | // bad_qty: row.bad_qty, |
| | | // repair_qty: row.repair_qty, |
| | | bad_qty: 0, |
| | | repair_qty: 0, |
| | | isVisible: 0, |
| | | defect_code: row.defect_code, |
| | | defect_name: row.defect_name, |
| | | id: row.id, |
| | | m_id: row.m_id, |
| | | badqty: row.badqty, |
| | | materiel_code: row.materiel_code, |
| | | ng_qty: row.ng_qty, |
| | | plan_qty: row.plan_qty, |
| | | report_qty: row.report_qty, |
| | | seq: row.seq, |
| | | step_code: row.step_code, |
| | | stepname: row.stepname, |
| | | style: row.style, |
| | | wo_code: row.wo_code |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | badDel(row) { |
| | | this.badTableDataDialog.forEach((item, index) => { |
| | | if (item.id === row.id && item.m_id === row.m_id) { |
| | | this.badTableDataDialog.splice(index, 1) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | $main_color: #42b983; |
| | | .el-button--text{ |
| | | .el-button--text { |
| | | font-size: 14px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .operationClass { |
| | | height: 23px; |
| | | display: flex; |
| | |
| | | <!--公共页面样式--> |
| | | <style lang="scss" scoped> |
| | | $main_color: #42b983; |
| | | .el-icon-share ,.el-icon-delete,.el-icon-edit-outline{ |
| | | ::v-deep .el-button--text { |
| | | font-size: 14px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .el-icon-share, .el-icon-delete, .el-icon-edit-outline { |
| | | color: $main_color; |
| | | cursor: pointer; |
| | | } |
| | | .el-icon-edit-outline{ |
| | | |
| | | .el-icon-edit-outline { |
| | | margin-right: 15px; |
| | | } |
| | | |
| | | ::v-deep .el-button--primary, .el-button--default, .el-button--info { |
| | | height: 34px; |
| | | display: flex; |
| | |
| | | padding: 20px 20px !important; |
| | | } |
| | | |
| | | ::v-deep .badDialogVisible .el-dialog__body { |
| | | padding: 20px 20px !important; |
| | | } |
| | | |
| | | ::v-deep .el-dialog__footer { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | |
| | | background-color: #f8f8fa; |
| | | } |
| | | |
| | | ::v-deep .el-table__body .el-table__row.hover-row td{ |
| | | background-color: #eaecef ; |
| | | ::v-deep .el-table__body .el-table__row.hover-row td { |
| | | background-color: #eaecef; |
| | | } |
| | | |
| | | ::v-deep .el-form--inline .el-form-item__label { |
| | |
| | | <template> |
| | | <div> |
| | | <div class="body" :style="{height:mainHeight+'px'}"> |
| | | <div style="padding: 10px 5px 0 0"> |
| | | <div class="bodyTopButtonGroup"> |
| | | <el-button type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button> |
| | | <el-button icon="el-icon-upload2" @click="upload">导入</el-button> |
| | | </div> |
| | | |
| | | <div class="bodyTopFormGroup"> |
| | | <el-form |
| | | ref="form" |
| | | :model="form" |
| | |
| | | </div> |
| | | </el-form> |
| | | </div> |
| | | <el-divider /> |
| | | <div style="margin-left: 10px;display: flex"> |
| | | <el-button type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button> |
| | | <el-button type="primary" icon="el-icon-upload2" @click="upload">导入</el-button> |
| | | </div> |
| | | <el-divider /> |
| | | |
| | | <div class="elTableDiv"> |
| | | <el-table |
| | | :data="tableData" |
| | | :height="tableHeight+'px'" |
| | | border |
| | | stripe |
| | | :row-class-name="tableRowClassName" |
| | | :style="{width: 100+'%',height:tableHeight+'px',}" |
| | | highlight-current-row |
| | | :header-cell-style="this.$headerCellStyle" |
| | |
| | | </div> |
| | | <!--分页--> |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="form.page" |
| | | :limit.sync="form.rows" |
| | |
| | | this.mainHeight = window.innerHeight - 250 |
| | | this.tableHeight = this.mainHeight - 100 |
| | | }) |
| | | }, |
| | | tableRowClassName({ row, rowIndex }) { |
| | | return 'custom-row' |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <!--公共页面样式--> |
| | | <style lang="scss" scoped> |
| | | $main_color: #42b983; |
| | | ::v-deep .el-button--primary { |
| | | background-color: $main_color !important; |
| | | height: 30px; |
| | | display: flex; |
| | | align-items: center; |
| | | //border: 1px solid $main_color; |
| | | border: none; |
| | | padding: 0 20px; |
| | | ::v-deep .el-button--text{ |
| | | font-size: 14px ; |
| | | cursor: pointer ; |
| | | } |
| | | ::v-deep .el-button--primary:hover { |
| | | border: none; |
| | | .el-icon-share ,.el-icon-delete,.el-icon-edit-outline{ |
| | | color: $main_color; |
| | | cursor: pointer; |
| | | } |
| | | ::v-deep .el-button--info { |
| | | height: 30px; |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 0 20px; |
| | | .el-icon-edit-outline{ |
| | | margin-right: 15px; |
| | | } |
| | | |
| | | ::v-deep .el-pagination.is-background .el-pager li:not(.disabled).active { |
| | | background-color: $main_color !important; |
| | | ::v-deep .el-button--primary, .el-button--default, .el-button--info { |
| | | height: 34px; |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 0 15px; |
| | | } |
| | | |
| | | ::v-deep .el-button--primary { |
| | | //background-color: $main_color !important; |
| | | } |
| | | |
| | | ::v-deep .el-button--default { |
| | | background-color: #f8f8fa; |
| | | border: none; |
| | | } |
| | | |
| | | ::v-deep .el-input__inner { |
| | | height: 34px; |
| | | line-height: 34px; |
| | | //color: #a7a7a7; |
| | | } |
| | | |
| | | ::v-deep .el-dialog__body { |
| | | padding: 20px 100px !important; |
| | | } |
| | | |
| | | ::v-deep .dialogVisibleRoles .el-dialog__body { |
| | | padding: 20px 20px !important; |
| | | } |
| | | |
| | | ::v-deep .importPickerClass .el-dialog__body { |
| | | padding: 20px 20px !important; |
| | | } |
| | | |
| | | ::v-deep .el-dialog__footer { |
| | |
| | | justify-content: flex-end; |
| | | } |
| | | |
| | | .footerButton { |
| | | display: flex; |
| | | justify-content: end; |
| | | } |
| | | |
| | | ::v-deep .el-button--default { |
| | | background-color: #ffffff !important; |
| | | height: 30px; |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 0 20px; |
| | | } |
| | | |
| | | ::v-deep .el-button--default:hover { |
| | | color: #606266; |
| | | } |
| | | |
| | | ::v-deep .el-dialog__body { |
| | | padding: 20px 100px !important; |
| | | } |
| | | |
| | | ::v-deep .el-radio__input.is-checked .el-radio__inner { |
| | | background-color: $main_color; |
| | | border-color: $main_color; |
| | | } |
| | | |
| | | ::v-deep .el-radio__input.is-checked + .el-radio__label { |
| | | color: $main_color !important; |
| | | } |
| | | |
| | | ::v-deep .el-checkbox__input.is-checked .el-checkbox__inner { |
| | | border-color: $main_color; |
| | | background-color: $main_color; |
| | | } |
| | | |
| | | ::v-deep .el-input__inner { |
| | | height: 30px; |
| | | line-height: 30px; |
| | | } |
| | | ::v-deep .el-input__inner:focus { |
| | | border-color: $main_color; |
| | | } |
| | | |
| | | ::v-deep .el-table .caret-wrapper { |
| | | transform: scale(0.8); |
| | | } |
| | | |
| | | ::v-deep .cell { |
| | | display: flex !important; |
| | | align-items: center !important; |
| | | justify-content: space-between !important; |
| | | } |
| | | |
| | | ::v-deep .el-button--text { |
| | | color: $main_color; |
| | | font-size: 14px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .operationClass { |
| | | height: 23px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .el-icon-share { |
| | | color: $main_color; |
| | | cursor: pointer; |
| | | ::v-deep .el-table::before { |
| | | height: 0; |
| | | } |
| | | |
| | | .el-checkbox.is-bordered.is-checked { |
| | | border-color: $main_color; |
| | | ::v-deep .el-table__body-wrapper { |
| | | background-color: #f8f8fa; |
| | | } |
| | | |
| | | ::v-deep .el-radio__input.is-checked .el-radio__inner { |
| | | border-color: $main_color; |
| | | background: $main_color; |
| | | ::v-deep .el-table__body .el-table__row.hover-row td{ |
| | | background-color: #eaecef ; |
| | | } |
| | | |
| | | ::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner { |
| | | border-color: $main_color; |
| | | background: $main_color; |
| | | } |
| | | |
| | | ::v-deep .el-checkbox__input.is-checked + .el-checkbox__label { |
| | | color: $main_color !important; |
| | | } |
| | | |
| | | ::v-deep .el-checkbox.is-bordered + .el-checkbox.is-bordered { |
| | | margin: 10px 30px 0px 0; |
| | | } |
| | | |
| | | ::v-deep .el-radio__input.is-checked + .el-radio__label { |
| | | color: $main_color; |
| | | } |
| | | |
| | | ::v-deep .el-radio.is-bordered + .el-radio.is-bordered { |
| | | margin: 10px 30px 0px 0; |
| | | ::v-deep .el-form--inline .el-form-item__label { |
| | | color: #a7a7a7; |
| | | } |
| | | |
| | | .body ::v-deep .el-divider { |
| | |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | ::v-deep .el-input__inner:focus { |
| | | border-color: $main_color; |
| | | .userDialogVisible ::v-deep .el-form-item { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | ::v-deep .el-select .el-input__inner:focus{ |
| | | border-color: $main_color; |
| | | } |
| | | </style> |
| | | <style> |
| | | |
| | | ::v-deep .el-select-dropdown__item.selected{ |
| | | color: $main_color; |
| | | } |
| | | ::v-deep .el-checkbox__inner:hover{ |
| | | border-color: $main_color; |
| | | } |
| | | ::v-deep .el-textarea__inner:focus{ |
| | | border-color: $main_color; |
| | | } |
| | | ::v-deep .el-select .el-input .el-select__caret { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | .el-table .custom-row { |
| | | background: #f8f8fa; |
| | | } |
| | | </style> |
| | |
| | | prop="description" |
| | | label="仓库描述" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.description">{{ row.description }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="lm_user" |
| | | label="创建人员" |
| | |
| | | prop="description" |
| | | label="库位描述" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.description">{{ row.description }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="stock_name" |
| | | label="所属仓库" |
| | |
| | | prop="descr" |
| | | label="标准描述" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.descr">{{ row.descr }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="lm_user" |
| | | label="创建人员" |
| | |
| | | prop="descr" |
| | | label="项目描述" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.descr">{{ row.descr }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="lm_user" |
| | | label="创建人员" |
| | |
| | | prop="descr" |
| | | label="缺陷描述" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.descr">{{ row.descr }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="lm_user" |
| | | label="创建人员" |
| | |
| | | label="物料规格" |
| | | width="110" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.partspec">{{ row.partspec }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="uom_name" |
| | | label="单位" |
| | |
| | | label="仓库名称" |
| | | sortable="custom" |
| | | min-width="110" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.stck_name">{{ row.stck_name }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="maxqty" |
| | | label="库存上限" |
| | | width="110" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.maxqty">{{ row.maxqty }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="minqty" |
| | | label="库存下限" |
| | | width="110" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.minqty">{{ row.minqty }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="lm_user" |
| | | label="创建人员" |
| | |
| | | <el-select |
| | | v-model="defaultroute_code" |
| | | filterable |
| | | style="width: 200px" |
| | | style="width: 200px;" |
| | | placeholder="请选择" |
| | | class="defaultroute_code" |
| | | > |
| | | <el-option |
| | | v-for="item in defaultroute_codeArr" |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .defaultroute_code ::v-deep .el-input__suffix-inner{ |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | margin-top: -3px; |
| | | } |
| | | </style> |
| | | |
| | | <!--公共页面样式--> |
| | |
| | | label="工序描述" |
| | | min-width="180" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.descr">{{ row.descr }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="enable" |
| | | label="启用状态" |
| | |
| | | width="110" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.enable==='Y'">是</div> |
| | | <div v-if="row.enable==='N'">否</div> |
| | | <div v-if="row.enable==='Y'"><svg-icon icon-class="circleYes" style="margin-right: 2px" />是</div> |
| | | <div v-if="row.enable==='N'"> <svg-icon icon-class="circleNo" style="margin-right: 2px" />否</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | prop="description" |
| | | label="工艺路线描述" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.description">{{ row.description }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="enable" |
| | | label="使用状态" |
| | | sortable="custom" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.enable==='Y'">是</div> |
| | | <div v-if="row.enable==='N'">否</div> |
| | | <div v-if="row.enable==='Y'"> |
| | | <svg-icon icon-class="circleYes" style="margin-right: 2px" /> |
| | | 是 |
| | | </div> |
| | | <div v-if="row.enable==='N'"> |
| | | <svg-icon icon-class="circleNo" style="margin-right: 2px" /> |
| | | 否 |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | <template slot-scope="{row}"> |
| | | <div class="operationClass"> |
| | | <el-tooltip class="item" effect="dark" content="预览" placement="top"> |
| | | <i class="el-icon-view" style="margin-right:15px;cursor: pointer;color:#42b983 " @click="edit('edit',row)" /> |
| | | <i |
| | | class="el-icon-view" |
| | | style="margin-right:15px;cursor: pointer;color:#42b983 " |
| | | @click="edit('edit',row)" |
| | | /> |
| | | </el-tooltip> |
| | | <el-tooltip v-del-tab-index class="item" effect="dark" content="删除" placement="top"> |
| | | <i class="el-icon-delete" @click="del(row)" /> |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="工艺描述" prop="description"> |
| | | <el-input v-model="dialogForm.description" :disabled="operation==='edit'" type="textarea" style="width: 220px" /> |
| | | <el-input |
| | | v-model="dialogForm.description" |
| | | :disabled="operation==='edit'" |
| | | type="textarea" |
| | | style="width: 220px" |
| | | /> |
| | | </el-form-item> |
| | | </div> |
| | | <el-form-item label="工艺设置" prop="Data" style="margin-top: 30px"> |
| | |
| | | zIndex:tag.label===selectedName?0:2 |
| | | }" |
| | | > |
| | | {{ index+1 }} |
| | | {{ index + 1 }} |
| | | </div> |
| | | |
| | | <!-- <el-tooltip--> |
| | |
| | | } |
| | | }, |
| | | // 工艺设置 下拉获取所有 |
| | | async getStepSelectArr() { |
| | | async getStepSelectArr() { |
| | | const { data: res } = await StepSelect() |
| | | this.routeArr = res |
| | | }, |
| | |
| | | if (this.clickSelected === '' || this.clickSelected === this.dynamicTags.length) { |
| | | seq = this.dynamicTags.length + 1 |
| | | this.dynamicTags.push( |
| | | { editDisabled: true, seq: seq, stepname: '', effect: 'light', stepcode: ('Step' + (seq.toString().length === 2 ? seq : '0' + seq)) } |
| | | { |
| | | editDisabled: true, |
| | | seq: seq, |
| | | stepname: '', |
| | | effect: 'light', |
| | | stepcode: ('Step' + (seq.toString().length === 2 ? seq : '0' + seq)) |
| | | } |
| | | ) |
| | | } else { |
| | | // 2.第二种情况 当选中某个tag 将在tag后面添加 |
| | |
| | | this.getStepSelectArr() |
| | | }, |
| | | // 工艺路线预览 |
| | | async edit(operation, row) { |
| | | async edit(operation, row) { |
| | | this.operation = operation |
| | | this.dialogVisible = true |
| | | |
| | |
| | | border-radius: 0; |
| | | color: $main_color; |
| | | } |
| | | |
| | | ::v-deep .el-button--success:disabled { |
| | | background-color:#eeeeee; |
| | | background-color: #eeeeee; |
| | | color: $main_color; |
| | | } |
| | | |
| | |
| | | white-space: nowrap; |
| | | } |
| | | |
| | | .autocompleteClass{ |
| | | .el-autocomplete-suggestion li{ |
| | | .autocompleteClass { |
| | | .el-autocomplete-suggestion li { |
| | | //color: red; |
| | | } |
| | | } |
| | |
| | | <!--公共页面样式--> |
| | | <style lang="scss" scoped> |
| | | $main_color: #42b983; |
| | | .el-icon-share ,.el-icon-delete,.el-icon-edit-outline{ |
| | | .el-icon-share, .el-icon-delete, .el-icon-edit-outline { |
| | | color: $main_color; |
| | | cursor: pointer; |
| | | } |
| | | .el-icon-edit-outline{ |
| | | |
| | | .el-icon-edit-outline { |
| | | margin-right: 15px; |
| | | } |
| | | |
| | |
| | | background-color: #f8f8fa; |
| | | } |
| | | |
| | | ::v-deep .el-table__body .el-table__row.hover-row td{ |
| | | background-color: #eaecef ; |
| | | ::v-deep .el-table__body .el-table__row.hover-row td { |
| | | background-color: #eaecef; |
| | | } |
| | | |
| | | ::v-deep .el-form--inline .el-form-item__label { |
| | |
| | | .body ::v-deep .el-form-item { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | .userDialogVisible ::v-deep .el-form-item { |
| | | margin-bottom: 0; |
| | | } |
| | |
| | | label="产品规格" |
| | | min-width="110" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.partspec">{{ row.partspec }}</div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="wksp_name" |
| | | label="生产车间" |
| | |
| | | label="设备节拍" |
| | | width="110" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.eqp_value">{{ row.eqp_value }} <span style="margin-left: 2px">秒</span></div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="stand_value" |
| | | label="生产节拍" |
| | | width="110" |
| | | sortable="custom" |
| | | /> |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <div v-if="row.stand_value">{{ row.stand_value }} <span style="margin-left: 2px">秒</span></div> |
| | | <div v-else>/</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="cavity_qty" |
| | | label="型腔数" |