Commit b642e412 authored by renjintao's avatar renjintao

分卡原因

parent 05765173
<template>
<div class="record">
<div class="record">
<div v-if="load" style="width:100px;margin:0 auto;padding-top:260px;">
<Spin size="large"></Spin>
<Spin size="large"></Spin>
</div>
<div v-show="!load">
<DataGrid :columns="columns" :data="result" border :tool="false" :height="820" :page="false"></DataGrid>
<DataGrid :columns="columns" :data="result" border :tool="false" :height="820" :page="false"></DataGrid>
</div>
<Modal v-model="workOrderPauseModal" title="工单暂停原因" width="800" footer-hide class="suspend">
<EntryPause @on-ok="pauseOk" ref="addBug" :info="info" />
<EntryPause @on-ok="pauseOk" ref="addBug" :info="info" />
</Modal>
<Modal v-model="modalSplit" title="订单分卡" width="650" footer-hide>
<div slot="close">
<Icon type="ios-close" size="31" color="gray" @click="handleClose" />
</div>
<Form :model="entity" ref="form" :label-width="110" :rules="rules">
<Row>
<Col span="24">
<FormItem label="选择序列号" prop="num">
<Select v-model="entity.num" multiple>
<Option
v-for="(item,index) in numList"
:value="item.productcodes"
:key="index"
>{{ item.productcodes}}</Option>
</Select>
</FormItem>
</Col>
<Col span="24">
<FormItem label="选择分卡原因" prop="reason">
<Select v-model="entity.reason" style="width:260px">
<Option
v-for="(item,index) in reasonList"
:value="item.value"
:key="index"
>{{ item.label }}</Option>
</Select>
</FormItem>
</Col>
<Col span="24">
<FormItem label="备注说明">
<Input v-model="entity.remark" placeholder type="textarea" :rows="3" />
</FormItem>
</Col>
<!--
<div slot="close">
<Icon type="ios-close" size="31" color="gray" @click="handleClose" />
</div>
<Form :model="entity" ref="form" :label-width="110" :rules="rules">
<Row>
<Col span="24">
<FormItem label="选择序列号" prop="num">
<Select v-model="entity.num" multiple>
<Option v-for="(item,index) in numList" :value="item.productcodes" :key="index">{{ item.productcodes}}</Option>
</Select>
</FormItem>
</Col>
<Col span="24">
<FormItem label="选择分卡原因" prop="reason">
<dictionary code="taskList.split.reson" v-model="entity.reason" style="width:240px"></dictionary>
</FormItem>
</Col>
<Col span="24">
<FormItem label="备注说明">
<Input v-model="entity.remark" placeholder type="textarea" :rows="3" />
</FormItem>
</Col>
<!--
<Col span="14">
<FormItem label prop="action">
<RadioGroup v-model="entity.action" @on-change="onchangeAction">
......@@ -62,390 +52,381 @@
</FormItem>
</Col>
-->
</Row>
</Form>
<Row>
<Col span="24" style="text-align:right;height:60px;line-height:60px">
<Button type="primary" @click="splitOk">确定分卡</Button>
<Button @click="handleClose" class="ml20">取消</Button>
</Col>
</Row>
</Form>
<Row>
<Col span="24" style="text-align:right;height:60px;line-height:60px">
<Button type="primary" @click="splitOk">确定分卡</Button>
<Button @click="handleClose" class="ml20">取消</Button>
</Col>
</Row>
</Modal>
</div>
</div>
</template>
<script>
import Api from "./api";
import EntryPause from "./entryPause";
export default {
name: "",
components: {
EntryPause
},
data() {
return {
modalSplit: false,
workOrderPauseModal: false,
index: null,
entity: {
count: 0,
code: "",
routingDetailId: 0,
orderId: 0,
dispatchId: 0
},
info: {},
initeId: {
routingDetailId: null,
dispatchId: null
},
columns: [
{
key: "detailId",
title: this.l("detailId"),
align: "center",
width: 100
},
{
key: "taskSeq",
title: this.l("taskSeq"),
align: "center",
width: 100
},
{
key: "detailName",
title: this.l("detailName"),
align: "left"
},
{
key: "routingCode",
title: this.l("routingCode"),
align: "center"
},
{
key: "userNames",
title: this.l("userNames"),
align: "center"
},
{
key: "demandStartDate",
title: this.l("demandStartDate"),
align: "center",
render: (h, params) => {
return h(
"span",
this.sliceStr(params.row.demandStartDate + " ", 0, 10),
params.row.demandStartDate
);
}
},
{
key: "demandFinishDate",
title: this.l("demandFinishDate"),
align: "center",
render: (h, params) => {
return h(
"span",
this.sliceStr(params.row.demandFinishDate + " ", 0, 10),
params.row.demandFinishDate
);
}
},
{
key: "actualStartDate",
title: this.l("actualStartDate"),
align: "center",
name: "",
components: {
EntryPause
},
data() {
return {
modalSplit: false,
workOrderPauseModal: false,
index: null,
entity: {
count: 0,
code: "",
routingDetailId: 0,
orderId: 0,
dispatchId: 0
},
info: {},
initeId: {
routingDetailId: null,
dispatchId: null
},
columns: [{
key: "detailId",
title: this.l("detailId"),
align: "center",
width: 100
},
{
key: "taskSeq",
title: this.l("taskSeq"),
align: "center",
width: 100
},
{
key: "detailName",
title: this.l("detailName"),
align: "left"
},
render: (h, params) => {
return h(
"span",
// this.sliceStr(params.row.actualStartDate + ' ', 0, 10),
params.row.actualStartDate == "0001-01-01 00:00:00"
? ""
: params.row.actualStartDate
);
}
},
{
key: "actualFinishDate",
title: this.l("actualFinishDate"),
align: "center",
{
key: "routingCode",
title: this.l("routingCode"),
align: "center"
},
{
key: "userNames",
title: this.l("userNames"),
render: (h, params) => {
return h(
"span",
// this.sliceStr(params.row.actualFinishDate + ' ', 0, 10),
params.row.actualFinishDate == "0001-01-01 00:00:00"
? ""
: params.row.actualFinishDate
);
}
},
align: "center"
},
{
key: "demandStartDate",
title: this.l("demandStartDate"),
align: "center",
render: (h, params) => {
return h(
"span",
this.sliceStr(params.row.demandStartDate + " ", 0, 10),
params.row.demandStartDate
);
}
},
{
key: "demandFinishDate",
title: this.l("demandFinishDate"),
align: "center",
{
key: "status",
title: "工单状态",
code: "taskList.status",
align: "center",
width: 140,
filters: this.$u.getArry(
this.$store.getters.dictionaryByKey("taskList.status")
),
filterMethod(value, row) {
let statusChar = row.status + "";
return statusChar.indexOf(value) > -1;
}
},
{
title: "操作",
key: "action",
width: 120,
align: "center",
render: (h, params) => {
return h("div", { class: "action" }, [
h(
"op",
render: (h, params) => {
return h(
"span",
this.sliceStr(params.row.demandFinishDate + " ", 0, 10),
params.row.demandFinishDate
);
}
},
{
props: {
oprate: "edit",
title: "暂停"
//msg: "确定暂停工序:" + params.row.detailName + "?"
},
style: params.row.status == 14 ? "" : "display:none",
on: { click: () => this.pause(params.row, params.index) }
key: "actualStartDate",
title: this.l("actualStartDate"),
align: "center",
render: (h, params) => {
return h(
"span",
// this.sliceStr(params.row.actualStartDate + ' ', 0, 10),
params.row.actualStartDate == "0001-01-01 00:00:00" ?
"" :
params.row.actualStartDate
);
}
},
"暂停"
),
h(
"op",
{
props: { oprate: "edit", title: "分卡" },
style: params.row.status == 5 ? "" : "display:none",
on: { click: () => this.split(params.row, params.index) }
key: "actualFinishDate",
title: this.l("actualFinishDate"),
align: "center",
render: (h, params) => {
return h(
"span",
// this.sliceStr(params.row.actualFinishDate + ' ', 0, 10),
params.row.actualFinishDate == "0001-01-01 00:00:00" ?
"" :
params.row.actualFinishDate
);
}
},
"分卡"
),
h(
"op",
{
props: {
oprate: "delete",
title: "继续",
msg: "确定继续执行工序:" + params.row.detailName + "?"
},
style: params.row.status == 5 ? "" : "display:none",
on: { click: () => this.continue(params.row, params.index) }
key: "status",
title: "工单状态",
code: "taskList.status",
align: "center",
width: 140,
filters: this.$u.getArry(
this.$store.getters.dictionaryByKey("taskList.status")
),
filterMethod(value, row) {
let statusChar = row.status + "";
return statusChar.indexOf(value) > -1;
}
},
"继续"
)
]);
}
}
],
listTask: [],
numList: [],
reasonList: [
{
value: 1,
label: "分卡原因1"
},
{
value: 2,
label: "分卡原因2"
},
{
value: 3,
label: "分卡原因3"
}
],
rules: {
num: [
{
required: true,
message: "请选择分卡原因",
trigger: "change",
type: "array"
}
],
reason: [
{
required: true,
message: "请选择分卡原因",
trigger: "change",
type: "number"
}
],
action: [
{
required: true,
message: "请选择操作",
trigger: "change",
type: "number"
}
],
scheduleType: [
{
required: true,
message: "请选择排产类型",
trigger: "change",
type: "number"
}
]
}
};
},
props: {
result: Array,
load: Boolean,
executeId: Number,
orderId: Number
},
async fetch({ store, params }) {
await store.dispatch("loadDictionary"); // 加载数据字典
},
created() {},
methods: {
split(row, index) {
//工单分卡
this.getProduct(row);
this.initeId = {
routingDetailId: row.detailId,
dispatchId: row.id
};
this.modalSplit = true;
{
title: "操作",
key: "action",
width: 120,
align: "center",
render: (h, params) => {
return h("div", {
class: "action"
}, [
h(
"op", {
props: {
oprate: "edit",
title: "暂停"
//msg: "确定暂停工序:" + params.row.detailName + "?"
},
style: params.row.status == 14 ? "" : "display:none",
on: {
click: () => this.pause(params.row, params.index)
}
},
"暂停"
),
h(
"op", {
props: {
oprate: "edit",
title: "分卡"
},
style: params.row.status == 5 ? "" : "display:none",
on: {
click: () => this.split(params.row, params.index)
}
},
"分卡"
),
h(
"op", {
props: {
oprate: "delete",
title: "继续",
msg: "确定继续执行工序:" + params.row.detailName + "?"
},
style: params.row.status == 5 ? "" : "display:none",
on: {
click: () => this.continue(params.row, params.index)
}
},
"继续"
)
]);
}
}
],
listTask: [],
numList: [],
rules: {
num: [{
required: true,
message: "请选择分卡原因",
trigger: "change",
type: "array"
}],
reason: [{
required: true,
message: "请选择分卡原因",
trigger: "change",
type: "number"
}],
action: [{
required: true,
message: "请选择操作",
trigger: "change",
type: "number"
}],
scheduleType: [{
required: true,
message: "请选择排产类型",
trigger: "change",
type: "number"
}]
}
};
},
onchangeAction(val) {
//选择移入排产时显示排产模型下拉框
if (val != 3) {
this.entity.scheduleType = null;
}
props: {
result: Array,
load: Boolean,
executeId: Number,
orderId: Number
},
getProduct(row) {
let params = {
dispatch_id:row.id,
execute_id:row.executeId,
order_id:row.orderId,
RoutingHeaderId:row.routingHeaderId,
RoutingDetailId:row.detailId,
};
Api.getentryproductcode(params).then(res => {
if (res.success) {
this.numList = [];
this.numList = res.result;
}
});
async fetch({
store,
params
}) {
await store.dispatch("loadDictionary"); // 加载数据字典
},
splitOk() {
//确定分卡
this.$refs.form.validate(valid => {
if (valid) {
let params = {
count: this.entity.num.length,
code: JSON.stringify(this.entity.num)
.replace("[", "")
.replace("]", "")
.replace(/\"/g, ""),
routingDetailId: this.initeId.routingDetailId,
orderId: this.orderId,
dispatchId: this.initeId.dispatchId
//reason: this.entity.reason,
//remark: this.entity.remark
};
Api.mesordersplitcard(params)
.then(res => {
if (res.success) {
this.$Message.success("分卡成功");
this.$emit("on-close");
} else {
this.$Message.error("分卡失败");
}
})
.catch(err => {
this.$Message.error("连接失败");
created() {},
methods: {
split(row, index) {
//工单分卡
this.getProduct(row);
this.initeId = {
routingDetailId: row.detailId,
dispatchId: row.id
};
this.modalSplit = true;
},
onchangeAction(val) {
//选择移入排产时显示排产模型下拉框
if (val != 3) {
this.entity.scheduleType = null;
}
},
getProduct(row) {
let params = {
dispatch_id: row.id,
execute_id: row.executeId,
order_id: row.orderId,
RoutingHeaderId: row.routingHeaderId,
RoutingDetailId: row.detailId,
};
Api.getentryproductcode(params).then(res => {
if (res.success) {
this.numList = [];
this.numList = res.result;
}
});
this.handleClose();
} else {
this.modalSplit = true;
},
splitOk() {
//确定分卡
this.$refs.form.validate(valid => {
if (valid) {
let params = {
count: this.entity.num.length,
code: JSON.stringify(this.entity.num)
.replace("[", "")
.replace("]", "")
.replace(/\"/g, ""),
routingDetailId: this.initeId.routingDetailId,
orderId: this.orderId,
dispatchId: this.initeId.dispatchId
//reason: this.entity.reason,
//remark: this.entity.remark
};
Api.mesordersplitcard(params)
.then(res => {
if (res.success) {
this.$Message.success("分卡成功");
this.$emit("on-close");
} else {
this.$Message.error("分卡失败");
}
})
.catch(err => {
this.$Message.error("连接失败");
});
this.handleClose();
} else {
this.modalSplit = true;
}
});
},
handleClose() {
//取消分卡
this.entityReset();
this.modalSplit = false;
},
entityReset() {
//重置分卡项目
this.entity = {
num: [],
reason: null,
remark: "",
action: null,
scheduleType: null
};
},
pause(row, index) {
this.index = index;
//暂停工单
this.info = {
dispatch_id: row.id,
execute_id: this.executeId,
order_id: this.orderId
};
this.workOrderPauseModal = true;
},
pauseOk() {
this.workOrderPauseModal = false;
this.result[this.index].status = 5;
},
continue (row, index) {
this.index = index;
//继续工单
let params = {
id: row.id,
orderid: this.orderId,
time: null
};
Api.entrycontinue(params)
.then(response => {
if (response.success) {
this.$Message.success("操作成功");
this.result[this.index].status = 14;
} else {
this.$Message.error("操作失败");
}
})
.catch(error => {
this.$Message.error("连接失败");
});
},
//截取字符串
sliceStr(str, lenS, lenE) {
return str.slice(lenS, lenE);
},
l(key) {
let vkey = "mes_order_watch" + "." + key;
return this.$t(vkey) || key;
}
});
},
handleClose() {
//取消分卡
this.entityReset();
this.modalSplit = false;
},
entityReset() {
//重置分卡项目
this.entity = {
num: [],
reason: null,
remark: "",
action: null,
scheduleType: null
};
},
pause(row, index) {
this.index = index;
//暂停工单
this.info = {
dispatch_id: row.id,
execute_id: this.executeId,
order_id: this.orderId
};
this.workOrderPauseModal = true;
},
pauseOk() {
this.workOrderPauseModal = false;
this.result[this.index].status = 5;
},
continue(row, index) {
this.index = index;
//继续工单
let params = {
id: row.id,
orderid: this.orderId,
time: null
};
Api.entrycontinue(params)
.then(response => {
if (response.success) {
this.$Message.success("操作成功");
this.result[this.index].status = 14;
} else {
this.$Message.error("操作失败");
}
})
.catch(error => {
this.$Message.error("连接失败");
});
},
//截取字符串
sliceStr(str, lenS, lenE) {
return str.slice(lenS, lenE);
},
l(key) {
let vkey = "mes_order_watch" + "." + key;
return this.$t(vkey) || key;
}
},
watch: {
result(v) {
if (v && v.length > 0) {
this.load = false;
}
watch: {
result(v) {
if (v && v.length > 0) {
this.load = false;
}
}
}
}
};
</script>
<style lang='less' scope>
<style lang="less">
.scheduleTypeSelect {
display: inline;
width: 180px;
margin-left: -110px;
.ivu-select {
display: inline;
width: 180px;
}
margin-left: -110px;
.ivu-select {
width: 180px;
}
}
</style>
\ No newline at end of file
</style>
......@@ -8,16 +8,12 @@
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('status')" prop="status">
<Dictionary code="mes.project_plan_record.Status" v-model="entity.status"></Dictionary>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('title')" prop="title"> <Input v-model="entity.title"> </Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('note')" prop="note"> <Input v-model="entity.note"> </Input>
<Col :span="24">
<FormItem :label="l('note')" prop="note">
<i-quill v-model="entity.note" :height="300" v-paste="handleImg" /></Input>
</FormItem>
</Col>
<Col :span="12">
......@@ -34,8 +30,12 @@
<script>
import Api from './api'
import iQuill from '@/components/quill'
export default {
name: 'Add',
components: {
iQuill
},
data() {
return {
disabled: false,
......@@ -107,6 +107,27 @@ export default {
this.entity.id = 0;
});
},
handleImg(e) {
console.warn(e)
let file = null
if (
e.clipboardData &&
e.clipboardData.items[0] &&
e.clipboardData.items[0].type &&
e.clipboardData.items[0].type.indexOf('image') > -1
) {
//这里就是判断是否有粘贴进来的文件且文件为图片格式
file = e.clipboardData.items[0].getAsFile()
let reader = new FileReader()
reader.readAsDataURL(file)
setTimeout(() => {
var img = '<img src="' + reader.result + '" alt=""/>'
this.entity.note += img
}, 1000)
// new R
}
},
l(key) {
key = "project_plan_record" + "." + key;
return this.$t(key)
......
......@@ -5,71 +5,19 @@
<FormItem :label="l('title')" prop="title"> <Input v-model="entity.title"> </Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('level')" prop="level">
<Dictionary code="project.task.level" v-model="entity.level"></Dictionary>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('projectTitle')" prop="projectTitle"> <Input v-model="entity.projectTitle"> </Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('planTitle')" prop="planTitle"> <Input v-model="entity.planTitle"> </Input>
</FormItem>
</Col>
<Col :span="12" v-if="false">
<FormItem :label="l('planId')" prop="planId">
<Input v-model="entity.planId"></Input>
</FormItem>
</Col>
<Col :span="12" v-if="false">
<FormItem :label="l('projectId')" prop="projectId">
<Input v-model="entity.projectId"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('userId')" prop="userId">
<UserSelect ref="userSelected" v-model="entity.userId" /></Input>
<UserSelect ref="userSelected" v-model="entity.userId" />
</FormItem>
</Col>
<Col :span="24">
<FormItem :label="l('userIds')" prop="userIds"> <Input v-model="entity.userIds" type="textarea" :rows="5"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('startDate')" prop="startDate">
<DatePicker type="date" v-model="entity.startDate"></DatePicker>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('endDate')" prop="endDate">
<DatePicker type="date" v-model="entity.endDate"></DatePicker>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('plansToStartDate')" prop="plansToStartDate">
<DatePicker type="date" v-model="entity.plansToStartDate"></DatePicker>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('plansToEndTime')" prop="plansToEndTime">
<DatePicker type="date" v-model="entity.plansToEndTime"></DatePicker>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('completePercentage')" prop="completePercentage">
<InputNumber v-model="entity.completePercentage"></InputNumber>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('note')" prop="note"> <Input v-model="entity.note"> </Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('upTaskId')" prop="upTaskId">
<InputNumber v-model="entity.upTaskId"></InputNumber>
<FormItem :label="l('note')" prop="note">
<i-quill v-model="entity.note" :height="300" v-paste="handleImg" />
</FormItem>
</Col>
</Row>
......@@ -82,8 +30,12 @@
<script>
import Api from './api'
import iQuill from '@/components/quill'
export default {
name: 'Add',
components: {
iQuill
},
data() {
return {
disabled: false,
......@@ -169,6 +121,27 @@ export default {
this.entity.id = 0;
});
},
handleImg(e) {
console.warn(e)
let file = null
if (
e.clipboardData &&
e.clipboardData.items[0] &&
e.clipboardData.items[0].type &&
e.clipboardData.items[0].type.indexOf('image') > -1
) {
//这里就是判断是否有粘贴进来的文件且文件为图片格式
file = e.clipboardData.items[0].getAsFile()
let reader = new FileReader()
reader.readAsDataURL(file)
setTimeout(() => {
var img = '<img src="' + reader.result + '" alt=""/>'
this.entity.note += img
}, 1000)
// new R
}
},
l(key) {
key = "project_task" + "." + key;
return this.$t(key)
......
......@@ -10,15 +10,12 @@
<Filed :span="6" :name="l('status')">{{entity.status}}</Filed>
<Filed :span="6" :name="l('projectTitle')">{{entity.projectTitle}}</Filed>
<Filed :span="6" :name="l('planTitle')">{{entity.planTitle}}</Filed>
<Filed :span="6" :name="l('userIds')">{{entity.userIds}}</Filed>
<Filed :span="6" :name="l('userId')">{{entity.userId}}</Filed>
<Filed :span="6" :name="l('endDate')">{{entity.endDate}}</Filed>
<Filed :span="6" :name="l('note')">{{entity.note}}</Filed>
<Filed :span="6" :name="l('startDate')">{{entity.startDate}}</Filed>
<Filed :span="6" :name="l('plansToStartDate')">{{entity.plansToStartDate}}</Filed>
<Filed :span="6" :name="l('plansToEndTime')">{{entity.plansToEndTime}}</Filed>
<Filed :span="6" :name="l('completePercentage')">{{entity.completePercentage}}</Filed>
<Filed :span="6" :name="l('upTaskId')">{{entity.upTaskId}}</Filed>
<Filed :span="6" :name="l('endDate')">{{entity.endDate}}</Filed>
<Filed :span="12">&nbsp;</Filed>
<Filed :span="24" :name="l('note')">{{entity.note}}</Filed>
</Row>
<component :is="detail" :eid="curId" />
</div>
......
......@@ -85,6 +85,9 @@
</template>
<script>
import {
replace
} from 'lodash';
import Api from './api'
export default {
name: 'Edit',
......@@ -121,6 +124,7 @@ export default {
id: v
}).then(r => {
this.entity = r.result;
this.entity.userId = parseInt(r.result.userId)
})
},
handleSubmit() {
......
......@@ -188,26 +188,6 @@ export default {
high: true,
type: 'date'
},
{
key: "plansToStartDate",
title: this.l("plansToStartDate"),
align: "center",
high: true,
type: 'date'
},
{
key: "plansToEndTime",
title: this.l("plansToEndTime"),
align: "center",
high: true,
type: 'date'
},
{
key: "completePercentage",
title: this.l("completePercentage"),
align: "left",
high: true
},
{
key: "note",
title: this.l("note"),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment