|
@@ -0,0 +1,396 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <div class="content">
|
|
|
+ <div v-for="(item, index) in list" :key="index" class="item">
|
|
|
+ <div class="add" @click="handleAdd(item, index)">+</div>
|
|
|
+ <div class="delete" @click="handleDelete(index)">x</div>
|
|
|
+ <div class="unit" style="display: flex">
|
|
|
+ <label style="width: 40%">派工单号:</label>
|
|
|
+ <div style="width: 60%">{{ item.dispatch_no }}</div>
|
|
|
+ </div>
|
|
|
+ <div style="display: flex" class="unit">
|
|
|
+ <label style="width: 40%">产品名称:</label>
|
|
|
+ <div style="width: 60%">{{ item.product_title }}</div>
|
|
|
+ </div>
|
|
|
+ <div style="display: flex" class="unit">
|
|
|
+ <label>数量:</label>
|
|
|
+ <Input
|
|
|
+ size="small"
|
|
|
+ placeholder="请输入"
|
|
|
+ style="width: 70%; padding: 0 0 0 0.2rem"
|
|
|
+ v-model="item.quantity"
|
|
|
+ type="number"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="unit">
|
|
|
+ <label>班组:</label>
|
|
|
+ <b-form-select
|
|
|
+ v-model="item.team_id"
|
|
|
+ :options="teamList"
|
|
|
+ style="
|
|
|
+ height: 1.4rem;
|
|
|
+ width: 70%;
|
|
|
+ border: 0.1rem solid;
|
|
|
+ border-radius: 0.6rem;
|
|
|
+ background: #fff;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <template v-slot:first>
|
|
|
+ <b-form-select-option value="" disabled
|
|
|
+ >请选择班组</b-form-select-option
|
|
|
+ >
|
|
|
+ </template></b-form-select
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ <div class="unit">
|
|
|
+ <label>人员:</label>
|
|
|
+ <b-form-select
|
|
|
+ v-model="item.employee_id"
|
|
|
+ :options="employeeList"
|
|
|
+ style="
|
|
|
+ height: 1.4rem;
|
|
|
+ width: 70%;
|
|
|
+ border: 0.1rem solid;
|
|
|
+ border-radius: 0.6rem;
|
|
|
+ background: #fff;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <template v-slot:first>
|
|
|
+ <b-form-select-option value="" disabled
|
|
|
+ >请选择人员</b-form-select-option
|
|
|
+ >
|
|
|
+ </template></b-form-select
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="unit">
|
|
|
+ <label>设备:</label>
|
|
|
+ <b-form-select
|
|
|
+ v-model="item.equipment_id"
|
|
|
+ :options="equipmentList"
|
|
|
+ style="
|
|
|
+ height: 1.4rem;
|
|
|
+ width: 70%;
|
|
|
+ border: 0.1rem solid;
|
|
|
+ border-radius: 0.6rem;
|
|
|
+ background: #fff;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <template v-slot:first>
|
|
|
+ <b-form-select-option value="" disabled
|
|
|
+ >请选择设备</b-form-select-option
|
|
|
+ >
|
|
|
+ </template></b-form-select
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ v-for="(_item, _index) in item.break"
|
|
|
+ :key="_index"
|
|
|
+ style="display: flex; align-item: center"
|
|
|
+ >
|
|
|
+ <div style="width: 35%; padding: 0 0.5rem 1rem 0.5rem">
|
|
|
+ <label>不良品原因:</label>
|
|
|
+ <b-form-select
|
|
|
+ v-model="_item.break_id"
|
|
|
+ :options="breakList"
|
|
|
+ style="
|
|
|
+ height: 1.4rem;
|
|
|
+ width: 100%;
|
|
|
+ border: 0.1rem solid;
|
|
|
+ border-radius: 0.6rem;
|
|
|
+ background: #fff;
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <template v-slot:first>
|
|
|
+ <b-form-select-option value="" disabled
|
|
|
+ >请选择原因</b-form-select-option
|
|
|
+ >
|
|
|
+ </template></b-form-select
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ <div style="width: 35%; padding: 0 0.5rem 1rem 0.5rem">
|
|
|
+ <label>不良品数量:</label>
|
|
|
+ <Input
|
|
|
+ style="width: 100%"
|
|
|
+ size="small"
|
|
|
+ placeholder="请输入"
|
|
|
+ v-model="_item.break_num"
|
|
|
+ type="number"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div style="width: 30%; display: flex">
|
|
|
+ <div class="boo" @click="handleBreakAdd(_index, item, index)">
|
|
|
+ +
|
|
|
+ </div>
|
|
|
+ <div class="boo" @click="handleBreakCancel(_index, item, index)">
|
|
|
+ -
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="footer_btn">
|
|
|
+ <b-button
|
|
|
+ variant="primary"
|
|
|
+ style="width: 35%; margin-left: 3%"
|
|
|
+ @click="handleReturn"
|
|
|
+ >返回</b-button
|
|
|
+ >
|
|
|
+ <b-button
|
|
|
+ variant="primary"
|
|
|
+ style="width: 35%; margin-right: 3%"
|
|
|
+ @click="handleSure"
|
|
|
+ >确认</b-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- <div class="footer">
|
|
|
+ <div>总计:</div>
|
|
|
+ <div class="footer_content">
|
|
|
+ <div>
|
|
|
+ <label>派工单号:</label>
|
|
|
+ <div>123456</div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>产品名称:</label>
|
|
|
+ <div>实木板</div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>数量:</label>
|
|
|
+ <div>23</div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>班组:</label>
|
|
|
+ <div>一班</div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>人员:</label>
|
|
|
+ <div>张三</div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <label>设备:</label>
|
|
|
+ <div>一号机</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div> -->
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ list: [],
|
|
|
+ email: "",
|
|
|
+ name: "",
|
|
|
+ food: null,
|
|
|
+ checked: [],
|
|
|
+ form: {},
|
|
|
+ teamList: [],
|
|
|
+ employeeList: [],
|
|
|
+ equipmentList: [],
|
|
|
+ state: true,
|
|
|
+ breakList: [
|
|
|
+ { value: 1, text: '碳化' },
|
|
|
+ { value: 2, text: '起泡' },
|
|
|
+ ],
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.axios.post('/api/finishedOrderDetailsList', { id: this.$route.query.id.split(',') }).then(res => {
|
|
|
+ this.list = res.data.list;
|
|
|
+ this.list.forEach(v => {
|
|
|
+ v.break = [
|
|
|
+ { break_id: '', break_num: 0 }
|
|
|
+ ];
|
|
|
+ })
|
|
|
+ })
|
|
|
+ //获取班组
|
|
|
+ this.axios.post('/api/teamList').then(res => {
|
|
|
+ this.teamList = res.data.data;
|
|
|
+ this.teamList.forEach(v => {
|
|
|
+ v.value = v.id;
|
|
|
+ v.text = v.title;
|
|
|
+ })
|
|
|
+ })
|
|
|
+ //获取人员
|
|
|
+ this.axios.post('/api/employeeList').then(res => {
|
|
|
+ this.employeeList = res.data.data;
|
|
|
+ this.employeeList.forEach(v => {
|
|
|
+ v.value = v.id;
|
|
|
+ v.text = v.emp_name
|
|
|
+ })
|
|
|
+ })
|
|
|
+ //获取设备
|
|
|
+ this.axios.post('/api/equipmentList').then(res => {
|
|
|
+ this.equipmentList = res.data.data;
|
|
|
+ this.equipmentList.forEach(v => {
|
|
|
+ v.value = v.id;
|
|
|
+ v.text = v.title;
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ handleBreakAdd(_index, item, index) {
|
|
|
+ item.break.splice(_index + 1, 0, {
|
|
|
+ break_id: '',
|
|
|
+ break_num: 0
|
|
|
+ })
|
|
|
+ this.list.splice(index, 1, item);
|
|
|
+ },
|
|
|
+ handleBreakCancel(_index, item, index) {
|
|
|
+ if (_index == 0) {
|
|
|
+ item.break = [{ break_id: '', break_num: 0 }]
|
|
|
+ } else {
|
|
|
+ item.break.splice(_index, 1);
|
|
|
+ }
|
|
|
+ this.list.splice(index, 1, item);
|
|
|
+ },
|
|
|
+ handleReturn() {
|
|
|
+ this.$router.go(-1);
|
|
|
+ },
|
|
|
+ handleDelete(index) {
|
|
|
+ if (this.list.length == 1) {
|
|
|
+ return
|
|
|
+ } else {
|
|
|
+ this.list.splice(index, 1);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleAdd(item, index) {
|
|
|
+ if (!item.quantity) {
|
|
|
+ return
|
|
|
+ } else {
|
|
|
+ let copy = JSON.parse(JSON.stringify(item));
|
|
|
+ copy.quantity = Math.floor(item.quantity / 2) + item.quantity % 2;
|
|
|
+ copy.break = [{
|
|
|
+ break_id: '', break_num: 0
|
|
|
+ }]
|
|
|
+ item.quantity = Math.floor(item.quantity / 2);
|
|
|
+ this.list.splice(index, 1, item);
|
|
|
+ this.list.splice(index + 1, 0, copy);
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ handleSure() {
|
|
|
+ let data = [];
|
|
|
+ this.list.forEach(v => {
|
|
|
+ let obj = {};
|
|
|
+ obj.id = v.id;
|
|
|
+ obj.team_id = v.team_id,
|
|
|
+ obj.finished_id = v.employee_id,
|
|
|
+ obj.equipment_id = v.equipment_id,
|
|
|
+ obj.quantity = v.quantity;
|
|
|
+ data.push(obj)
|
|
|
+ });
|
|
|
+ if (!this.state) {
|
|
|
+ return
|
|
|
+ } else {
|
|
|
+ this.state = false;
|
|
|
+ this.axios.post('/api/mobileFinishedOrderAdd', { ...data }).then(res => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.state = true
|
|
|
+ this.$Message.success(res.msg);
|
|
|
+ this.handleReturn()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+<style lang="scss" scoped>
|
|
|
+.content {
|
|
|
+ height: calc(100% - 5rem);
|
|
|
+ overflow: auto;
|
|
|
+ .item {
|
|
|
+ width: 94%;
|
|
|
+ position: relative;
|
|
|
+ left: 3%;
|
|
|
+ margin: 1.5rem 0;
|
|
|
+ border-radius: 1rem;
|
|
|
+ background-color: #fff;
|
|
|
+ box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
|
|
|
+ font-size: 0.8rem;
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ .add {
|
|
|
+ position: absolute;
|
|
|
+ width: 1.5rem;
|
|
|
+ height: 1.5rem;
|
|
|
+ bottom: -0.5rem;
|
|
|
+ left: -0.5rem;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ font-size: 1.3rem;
|
|
|
+ border-radius: 50%;
|
|
|
+ box-shadow: 0.1rem 0.1rem 0.1rem 0rem #777676;
|
|
|
+ background: #fff;
|
|
|
+ }
|
|
|
+ .delete {
|
|
|
+ width: 1.5rem;
|
|
|
+ height: 1.5rem;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ font-size: 1.3rem;
|
|
|
+ position: absolute;
|
|
|
+ top: -0.5rem;
|
|
|
+ right: -0.5rem;
|
|
|
+ border-radius: 50%;
|
|
|
+ box-shadow: 0.1rem 0.1rem 0.1rem 0rem #777676;
|
|
|
+ background: #fff;
|
|
|
+ }
|
|
|
+ .unit {
|
|
|
+ width: 50%;
|
|
|
+ padding: 0.5rem;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ label {
|
|
|
+ width: 30%;
|
|
|
+ text-align: right;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+// .footer {
|
|
|
+// position: absolute;
|
|
|
+// bottom: 7rem;
|
|
|
+// height: 3rem;
|
|
|
+
|
|
|
+// width: 100%;
|
|
|
+// border-top: 0.2rem solid #8a8888;
|
|
|
+// }
|
|
|
+// .footer_content {
|
|
|
+// display: flex;
|
|
|
+// flex-wrap: wrap;
|
|
|
+// font-size: 0.8rem;
|
|
|
+// > div {
|
|
|
+// width: 50%;
|
|
|
+// display: flex;
|
|
|
+// label {
|
|
|
+// width: 45%;
|
|
|
+// text-align: center;
|
|
|
+// }
|
|
|
+// div {
|
|
|
+// width: 60%;
|
|
|
+// text-align: center;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+.footer_btn {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+.boo {
|
|
|
+ font-size: 2rem;
|
|
|
+ border-radius: 50%;
|
|
|
+ width: 2rem;
|
|
|
+ height: 2rem;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ margin: 0.5rem;
|
|
|
+ border: 0.1rem solid;
|
|
|
+}
|
|
|
+</style>
|