Commit fb482dfa authored by kangzhenfei's avatar kangzhenfei

Merge branch 'product' of git.mes123.com:zhouyx/mes-ui into product

parents f3bfaaa9 bf6fb94e
......@@ -1432,3 +1432,6 @@ html [type=button] {
.gdShow {
box-shadow: 0px 0px 15px #333;
}
.bgDDD{
background:#DDD
}
\ No newline at end of file
......@@ -39,7 +39,6 @@
</dd>
</dl>
</div>
</div>
</div>
......@@ -53,13 +52,17 @@
clearable
filterable
>
<Option v-for="item in dic" :value="item.value" :key="item.value" :label="item.label">
<Option
v-for="item in datas?datas:dic"
:value="item.value"
:key="item.value"
:label="item.label"
>
<div>
<Icon :type="item.gender == 1 ? 'ios-man' : 'ios-woman'" />
{{ item.label }}(
<span style="color:#c3c3c3">{{ item.cardNo }}</span>)
{{ item.label }}
<span style="color:#c3c3c3" v-if="item.cardNo">({{ item.cardNo }})</span>
<br />
<span style="color:#c3c3c3">{{ item.departmentTitle }}</span>
<span style="color:#c3c3c3" v-if="item.departmentTitle">{{ item.departmentTitle }}</span>
</div>
</Option>
</Select>
......@@ -111,6 +114,11 @@ export default {
roleTitle: {
type: String,
default: ""
},
datas: {
//自定义用户数据
type: Array,
default: null
}
},
methods: {
......@@ -131,18 +139,18 @@ export default {
})
.then(r => {
this.data = r.result;
if(this.theme=="list"){
if (this.theme == "list") {
this.departmentGroup();
}
});
},
departmentGroup() {
var group = [];
var users=this.$u.clone(this.data);
if(this.name&&this.name.length>0){
users.map(u=>{
u.checked=this.name.indexOf(u.id)>-1;
})
var users = this.$u.clone(this.data);
if (this.name && this.name.length > 0) {
users.map(u => {
u.checked = this.name.indexOf(u.id) > -1;
});
}
group = this.$u.group(users, u => {
return u.departmentId;
......@@ -183,12 +191,12 @@ export default {
this.listSetValue();
},
//list 时,设置值。
listSetValue(){
var ids=[];
this.checkedItems.map(u=>{
ids.push(u.id)
})
this.$emit("on-change",ids);
listSetValue() {
var ids = [];
this.checkedItems.map(u => {
ids.push(u.id);
});
this.$emit("on-change", ids);
},
checkAll(item, i) {
item.children.map(u => {
......@@ -207,10 +215,17 @@ export default {
} else {
if (!this.multiple) {
//单选时返回信息
if (this.datas && this.datas.length > 0) {
var item2 = this.datas.filter(u => u.value == this.value);
if (item2 && item2[0]) {
items.push(item2[0]);
}
} else {
var item1 = this.dic.filter(u => u.value == this.value);
if (item1 && item1[0]) {
items.push(item1[0]);
}
}
} else {
//复选时返回
this.value.forEach(v => {
......@@ -284,6 +299,11 @@ export default {
this.getselectuser(v);
},
deep: true
},
datas(v) {
if (v) {
//alert(JSON.stringify(v))
}
}
}
};
......
<template>
<div>
<div style="z-index:200">
<viewer :options="options" :images="images" @inited="inited" class="viewer" ref="viewer">
<template slot-scope="scope">
<figure class="images">
......
......@@ -184,7 +184,7 @@ export default {
if (r.result) {
var arr = r.result;
this.checkList = arr.filter(function(item) {
delete item["id"];
delete item["id"]; //删除属性id
return item;
});
}
......
......@@ -53,7 +53,7 @@
</a>
</div>
<Content :class="!showMenu?'con_bord':''">
<MasterData ref="dataTable" @on-edit="edit" />
<MasterData ref="dataTable" @on-edit="editRow" />
</Content>
</Layout>
<Modal v-model="modal" :title="title" width="1000" footer-hide :mask-closable="false">
......@@ -69,7 +69,7 @@
</div>
</template>
<script>
import MasterData from "./masterData";
import MasterData from "./masterData.vue";
import Api from "./api";
export default {
......@@ -127,10 +127,11 @@ export default {
this.detail = () => import("./sonAdd");
this.modal = true;
},
edit(row) {
if (row) {
editRow(row) {
this.nodeInfo = row;
}
this.edit();
},
edit() {
if (this.nodeInfo.upId == 0) {
this.detail = () => import("./edit");
this.$refs.chlidren.arr = [];
......
<template>
<div class="master-data">
<Table stripe :columns="columns" :data="dataColumns"></Table>
<Table border :columns="columns" :data="dataColumns" :height="tableHeight"></Table>
</div>
</template>
<script>
import Api from "../api";
import Api from "./api";
export default {
name: "masterData",
data() {
return {
action: "",
detail: null,
modal: false,
curId: 0,
tableHeight: "",
dataColumns: [],
title: "",
columns: [
// {
// key: "index",
......@@ -46,6 +42,11 @@ export default {
});
}
},
{
key: "banben",
title: "版本",
align: "left"
},
{
key: "description",
title: "描述",
......@@ -85,8 +86,16 @@ export default {
await store.dispatch("loadDictionary"); // 加载数据字典
},
created() {
// this.dataColumns = this.dataTable;
// console.log(this.dataColumns)
this.tableHeight = window.innerHeight - 150;
},
mounted() {
window.onresize = () => {
///浏览器窗口大小变化
return (() => {
window.screenHeight = window.innerHeight;
this.tableHeight = window.innerHeight - 150;
})();
};
},
methods: {
edit(row) {
......@@ -108,22 +117,6 @@ export default {
this.$Message.success("取消删除");
}
});
},
add() {
this.modal = true;
this.detail = () => import("./add");
},
search() {
this.$refs.grid.reload(this.easySearch);
},
ok() {
// this.$refs.grid.load();
this.modal = false;
this.curId = 0;
},
cancel() {
this.curId = 0;
this.modal = false;
}
}
};
......
<template>
<div>
<Form ref="form" :model="entity" :rules="rules" :label-width="90">
<Row>
<Col :span="12">
<FormItem label="编码" prop="userUnit">
<Input v-model="entity.userUnit" placeholder="请输入"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem label="名称" prop="taskBased">
<Input v-model="entity.taskBased" placeholder="请输入"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem label="状态" prop="productName" placeholder="请选择">
<Select v-model="entity.productName" style="width:200px">
<Option value="0">New York</Option>
<Option value="1" disabled>London</Option>
<Option value="2">Sydney</Option>
</Select>
</FormItem>
</Col>
<Col :span="24">
<FormItem label="描述" prop="productName">
<Input v-model="entity.productName" type="textarea" placeholder="请输入..."></Input>
</FormItem>
</Col>
<Col :span="24">
<h4>属性配置</h4>
</Col>
<Col :span="24" style="padding:20px 0 0px 10px;margin-bottom:10px;" class="table-solt">
<Table border :columns="columns" :data="checkList" class="tableCommon">
<template slot-scope="{ row, index }" slot="name">
<Input v-model="row.name" placeholder="请输入" @on-blur="setRow(row,index)" />
</template>
<template slot-scope="{ row, index }" slot="require">
<Input v-model="row.require" placeholder="请输入" @on-blur="setRow(row,index)" />
</template>
<template slot-scope="{ row, index }" slot="result">
<Input v-model="row.result" placeholder="请输入" @on-blur="setRow(row,index)" />
</template>
<template slot-scope="{ row, index }" slot="pash">
<inputFile v-model="row.file" :files="true" :parms="getParams(row.fileId)" />
</template>
<template slot-scope="{ row, index }" slot="remark">
<Input v-model="row.remark" placeholder="请输入" @on-blur="setRow(row,index)" />
</template>
</Table>
</Col>
<Col :span="24" style="margin-bottom:20px;">
<Button type="primary" long @click="addNew" class="mt10">添加</Button>
</Col>
<Col :span="24" style="text-align: right;">
<FormItem>
<Button type="primary" @click="handleSubmit" :disabled="disabled">保存</Button>
<Button @click="handleClose" class="ml20">取消</Button>
</FormItem>
</Col>
</Row>
</Form>
</div>
</template>
<script>
export default {
data() {
return {
entity: {},
disabled: false,
columns: [
{
title: "序号",
type: "index",
width: 80,
align: "center"
},
{
title: "检验项目",
key: "name",
align: "center",
slot: "name"
},
{
title: "要求",
key: "require",
align: "center",
slot: "require"
},
{
title: "预测结果",
key: "result",
align: "center",
slot: "result"
}
],
checkList: [],
rules: {
businessName: [{ required: true, message: "必填", trigger: "blur" }],
businessCode: [{ required: true, message: "必填", trigger: "blur" }]
}
};
},
methods: {
setRow() {
this.checkList = r.result;
},
addNew() {},
handleSubmit() {
this.$refs.form.validate(v => {});
},
handleClose() {
this.$emit('on-close')
}
}
};
</script>
<template>
<div>
<Form ref="form" :model="entity" :rules="rules" :label-width="90">
<Row>
<Col :span="12">
<FormItem label="编码" prop="code">
<Input v-model="entity.code" placeholder="请输入" disabled></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem label="名称" prop="name">
<Input v-model="entity.name" placeholder="请输入"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem label="状态" prop="status" placeholder="请选择">
<Dictionary
code="materail.category.status"
v-model="entity.status"
type="select"
:value="entity.status"
:key="entity.status"
></Dictionary>
</FormItem>
</Col>
<Col :span="12">
<FormItem label="版本" prop="banben">
<Input v-model="entity.banben" placeholder="请输入"></Input>
</FormItem>
</Col>
<Col :span="24">
<FormItem label="描述" prop="description">
<Input v-model="entity.description" type="textarea" placeholder="请输入..."></Input>
</FormItem>
</Col>
<Col :span="24" style="text-align: right;">
<FormItem>
<Button type="primary" @click="handleSubmit" :disabled="disabled">保存</Button>
<Button @click="handleClose" class="ml20">取消</Button>
</FormItem>
</Col>
</Row>
</Form>
</div>
</template>
<script>
import Api from "./api";
export default {
data() {
return {
arr: [],
entity: {
upId: 0,
code: 0
},
disabled: false,
rules: {
name: [{ required: true, message: "必填", trigger: "blur" }]
}
};
},
async fetch({ store, params }) {
await store.dispatch("loadDictionary"); // 加载数据字典
},
mounted() {
// this.tableData();
},
methods: {
tableData() {
let conditions = [
{
conditionalType: "In",
fieldName: "fieldType",
fieldValue: "1,2"
},
{
conditionalType: "Equal",
fieldName: "categoryId",
fieldValue: "0"
}
];
Api.listTable({ conditions: conditions }).then(r => {
if (r.result) {
var arr = r.result;
this.checkList = arr.filter(function(item) {
delete item["id"];
return item;
});
}
});
},
remove(index, row) {
if (row.add == 0) {
//新增的删除,直接删
this.checkList.splice(index, 1);
} else {
row.action = 2; //返回的默认删除,删除后保存在arr数组中,添加标识action = 2,然后点击保存的时候,一起传给后台
this.$set(this.checkList, index, row);
this.arr.push(row);
this.checkList.splice(index, 1);
}
},
setRow(row, index) {
this.$set(this.checkList, index, row);
},
handleSubmit() {
this.$refs.form.validate(v => {
if (v) {
// let categoryDto = this.entity;
// let pro = this.checkList.concat(this.arr);
// Api.create({ categoryDto: categoryDto, pro: pro })
// .then(r => {
// if (r.success) {
// this.$Message.success("保存成功");
// this.$emit("on-ok");
// } else {
// this.$Message.error("保存失败");
// }
// })
// .catch(err => {
// this.disabled = false;
// this.$Message.error("保存失败");
// });
}
});
},
handleClose() {
this.$emit("on-close");
}
}
};
</script>
import Api from '@/plugins/request'
export default {
listTable(params){
return Api.post(`${systemUrl}/custompropertydefinition/list`,params);
},
list(params){
return Api.post(`${systemUrl}/category/list`,params);
},
get(params){
return Api.get(`${systemUrl}/category/get`,params);
},
create(params){
return Api.post(`${systemUrl}/category/create`,params);
},
update(params){
return Api.post(`${systemUrl}/category/update`,params);
},
delete(id) {
return Api.delete(`${systemUrl}/category/delete`,{params:{id:id}});
},
}
\ No newline at end of file
<template>
<div>
<Form ref="form" :model="entity" :rules="rules" :label-width="90">
<Row>
<!-- <Col :span="12">
<FormItem label="编码" prop="code">
<Input v-model="entity.code" placeholder="请输入" disabled></Input>
</FormItem>
</Col>-->
<Col :span="12">
<FormItem label="名称" prop="name">
<Input v-model="entity.name" placeholder="请输入"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem label="状态" prop="status" placeholder="请选择">
<Dictionary
code="materail.category.status"
v-model="entity.status"
type="select"
:value="entity.status"
:key="entity.status"
></Dictionary>
</FormItem>
</Col>
<Col :span="24">
<FormItem label="描述" prop="description">
<Input v-model="entity.description" type="textarea" placeholder="请输入..."></Input>
</FormItem>
</Col>
<Col :span="24">
<h4>属性配置</h4>
</Col>
<Col :span="24" style="padding:20px 0 0px 10px;margin-bottom:10px;" class="table-solt">
<!--fieldType 1.固有,2.默认,3自定义; -->
<Table border :columns="columns" :data="checkList" class="tableCommon" height="300">
<template slot-scope="{ row, index }" slot="title">
<div v-if="row.fieldType==1||row.fieldType==2">{{row.title}}</div>
<Input v-else v-model="row.title" placeholder="请输入" @on-blur="setRow(row,index)" />
</template>
<template slot-scope="{ row, index }" slot="note">
<div v-if="row.fieldType==1">{{row.note}}</div>
<Input v-model="row.note" placeholder="请输入" @on-blur="setRow(row,index)" v-else />
</template>
<template slot-scope="{ row, index }" slot="dataType">
<state
v-if="row.fieldType==1"
code="materail.category.dataType"
:value="row.dataType"
type="text"
></state>
<Dictionary
v-else
code="materail.category.dataType"
type="select"
:value="row.dataType"
:key="row.dataType"
></Dictionary>
</template>
<!-- <template slot-scope="{ row, index }" slot="result">
<Input v-model="row.result" placeholder="请输入" @on-blur="setRow(row,index)" />
</template>-->
<template slot-scope="{ row, index }" slot="required">
<Checkbox v-model="row.required" @on-change="setRow(row,index)"></Checkbox>
</template>
<template slot-scope="{ row, index }" slot="isUnique">
<Checkbox v-model="row.isUnique" @on-change="setRow(row,index)"></Checkbox>
</template>
<template
slot-scope="{ row, index }"
slot="action"
v-if="row.fieldType==2||row.fieldType==3"
>
<a @click="remove(index,row)" style="color:#FF7A8B">删除</a>
</template>
</Table>
</Col>
<Col :span="24" style="margin-bottom:20px;">
<Button type="primary" long @click="addNew" class="mt10">添加</Button>
</Col>
<Col :span="24" style="text-align: right;">
<FormItem>
<Button type="primary" @click="handleSubmit" :disabled="disabled">保存</Button>
<Button @click="handleClose" class="ml20">取消</Button>
</FormItem>
</Col>
</Row>
</Form>
</div>
</template>
<script>
import Api from "./api";
export default {
props: ["nodeInfo"],
data() {
return {
entity: {
upId: 0,
code: 0
},
arr: [],
disabled: false,
columns: [
{
title: "序号",
type: "index",
width: 80,
align: "center"
},
{
title: "属性名称",
key: "title",
align: "center",
slot: "title"
},
{
title: "备注",
key: "note",
align: "center",
slot: "note"
},
{
title: "属性类型",
key: "dataType",
align: "center",
slot: "dataType"
},
// {
// title: "是否显示",
// key: "result",
// align: "center",
// slot: "result"
// },
{
title: "是否必填",
key: "required",
align: "center",
slot: "required"
},
{
title: "是否唯一属性",
key: "isunique",
align: "center",
slot: "isunique"
},
{
title: "操作",
slot: "action",
width: 100,
align: "center"
}
],
checkList: [],
rules: {
name: [{ required: true, message: "必填", trigger: "blur" }]
}
};
},
async fetch({ store, params }) {
await store.dispatch("loadDictionary"); // 加载数据字典
},
mounted() {
this.get();
},
methods: {
get() {
Api.get({ id: this.nodeInfo.id }).then(r => {
if (r.result) {
this.entity = r.result;
this.tableData();
}
});
},
tableData() {
let conditions = [
{
conditionalType: "Equal",
fieldName: "categoryId",
fieldValue: this.nodeInfo.id
}
];
Api.listTable({ conditions: conditions }).then(r => {
if (r.result) {
console.log(r);
this.checkList = r.result;
}
});
},
remove(index, row) {
if (row.add == 0) {
this.checkList.splice(index, 1);
} else {
row.action = 2;
this.$set(this.checkList, index, row);
this.arr.push(row);
this.checkList.splice(index, 1);
}
},
setRow(row,index) {
this.$set(this.checkList, index, row);
},
addNew() {
let arr = this.$u.clone(this.checkList);
let obj = {
title: "",
note: "",
dataType: "",
required: false,
isunique: false,
fieldType: 3,
categoryId: 0,
action: 1,
add: 0
};
arr.push(obj);
this.checkList = arr;
},
handleSubmit() {
this.$refs.form.validate(v => {
if (v) {
let categoryDto = this.entity;
let pro = this.checkList.concat(this.arr);
Api.update({ categoryDto: categoryDto, pro: pro })
.then(r => {
if (r.success) {
this.$Message.success("保存成功");
this.$emit("on-ok");
} else {
this.$Message.error("保存失败");
}
})
.catch(err => {
this.disabled = false;
this.$Message.error("保存失败");
});
}
});
},
handleClose() {
this.$emit("on-close");
}
}
};
</script>
<template>
<div class="master-data">
<Button type="dashed" @click="datail">详情</Button>
<div class="classification">
<Layout>
<Sider width="300" v-if="showMenu">
<div class="p-list">
<h3>
零部件库
<div class="fr mr10 mt10">
<ButtonGroup class="fr" size="small">
<!-- <Button icon="md-add" title="新增顶级" @click="addNew"></Button> -->
<Button
:icon="expand ? 'md-arrow-dropright' : 'md-arrow-dropdown'"
@click="toggle"
title="展开/合并"
></Button>
<Button icon="md-refresh" title="刷新" @click="loadTree"></Button>
<Button icon="md-rewind" title="收起" @click="hide"></Button>
</ButtonGroup>
</div>
</h3>
<div class="search">
<Input search placeholder="关键字" v-model="keys" clearable />
</div>
<div class="fg">
<div class="tree">
<Tree :data="data" ref="tree" @on-select-change="change" :render="renderContent"></Tree>
</div>
</div>
</div>
</Sider>
<div v-if="!showMenu" class="show_menu">
<a class="menu_play fr" @click="showMenuFn" title="展开">
<Icon type="ios-arrow-forward" size="24" />
</a>
</div>
<Content :class="!showMenu?'con_bord':''">
<MasterData ref="dataTable" @on-edit="edit" />
</Content>
</Layout>
<!-- <Modal v-model="modal" :title="title" width="1000" footer-hide :mask-closable="false">
<component
:is="detail"
:eid="curId"
:nodeInfo="nodeInfo"
@on-close="cancel"
@on-ok="ok"
ref="chlidren"
/>
</Modal>-->
</div>
</template>
<script>
import MasterData from "./masterData.vue";
import Api from "./api";
export default {
components: {
MasterData
},
name: "masterData",
data() {
return {};
return {
keys: "",
expand: false,
list: [],
nodeInfo: {},
modal: false,
title: "新增",
curId: 0,
detail: null,
showMenu: true,
dataList: []
};
},
async fetch({ store, params }) {
await store.dispatch("loadDictionary"); // 加载数据字典
},
created() {
this.loadTree();
},
methods: {
datail() {
this.$router.push({
path: "/materiel/masterData/details"
showMenuFn() {
//this.$Message.info("展开左侧树")
this.showMenu = true;
},
ok(row) {
this.loadTree();
this.modal = false;
this.curId = 0;
if (row) {
this.dataList.map((e, index) => {
if (e.id == row.id) {
this.$set(this.$refs.dataTable.dataColumns, index, row);
}
});
}
},
cancel() {
this.curId = 0;
this.modal = false;
},
renderContent(h, { root, node, data }) {
return h(
"span",
{
on: {
click: () => {
this.handleSelect(data); //手动选择树节点
}
}
},
data.title
);
},
handleSelect(data) {},
loadTree() {
let conditions = [];
Api.list({ conditions: conditions }).then(r => {
var data = this.$u.toTree(
r.result,
0,
u => {
u.title = u.code + u.name;
u.value = u.id;
u.expand = true;
},
"upId"
);
this.list = this.$u.clone(data);
});
},
toggle() {
this.expand = !this.expand;
},
change(v, b) {
console.log(v);
console.log(b);
let ids = [];
ids.push(b.value);
if (b.children) {
addId(b.children);
function addId(data) {
data.map(u => {
ids.push(u.value);
if (u.children) {
addId(u.children);
}
});
}
}
// this.$emit("on-select", b.value, b, ids);
},
hide() {
this.showMenu = false;
}
},
computed: {
data() {
let items = this.$u.clone(this.list);
let expand = this.expand;
let result = [];
search(this.keys, items);
function search(keys, data) {
data.map(u => {
if (keys.length < u.title) {
u.expand = expand;
result.push(u);
} else {
u.expand = expand;
if (u.title.indexOf(keys) > -1) {
result.push(u);
} else if (u.children) {
search(keys, u.children);
}
}
});
}
return result;
}
}
};
</script>
<style lang="less" scoped>
.master-data {
width: 100%;
<style lang="less" >
.classification {
font-family: Microsoft YaHei;
.ivu-layout-sider {
background: rgba(255, 255, 255, 1);
margin-right: 10px;
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);
height: 87vh;
h4 {
height: 30px;
line-height: 30px;
background: #eee;
padding-left: 10px;
}
.p-list {
h3 {
height: 50px;
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 50px;
color: rgba(81, 90, 110, 1);
background: rgba(245, 246, 250, 1);
opacity: 1;
padding-left: 10px;
}
.search {
height: 50px;
padding: 5px 10px;
}
.fg {
flex: none;
height: 100%;
overflow: auto;
padding-left: 10px;
}
.tree {
height: calc(100vh - 215px);
overflow: auto;
}
}
}
.show_menu {
width: 30px;
height: 30px;
position: fixed;
top: 100px;
left: 0;
z-index: 9;
.menu_play {
width: 30px;
height: 30px;
line-height: 34px;
font-size: 14px;
text-align: center;
color: #515a6e;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
background: #ffffff;
box-shadow: #ccc 2px 2px 4px 1px;
}
.menu_play:hover {
background-color: #2d8cf0;
color: white;
}
}
.ivu-layout-content {
// margin-left: 5px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);
overflow: auto;
padding: 10px;
height: 87vh;
overflow-y: hidden;
}
}
</style>
\ No newline at end of file
<template>
<div class="master-data">
<DataGrid :columns="columns" ref="grid" :action="action">
<template slot="easySearch">
<Form ref="formInline" :model="easySearch" inline>
<FormItem prop="keys">
<Input
placeholder="请输入工艺名称/工艺编号"
v-width="200"
v-model="easySearch.keys.value"
clearable
/>
</FormItem>
<FormItem>
<Button type="primary" @click="search">查询</Button>
</FormItem>
</Form>
</template>
<!-- <template slot="searchForm">
<Search />
</template>-->
<template slot="buttons">
<Button type="primary" @click="add">新增</Button>
</template>
</DataGrid>
<Modal v-model="modal" :title="title" width="1000" footer-hide :mask-closable="false">
<component
:is="detail"
:eid="curId"
:nodeInfo="nodeInfo"
@on-close="cancel"
@on-ok="ok"
ref="chlidren"
/>
</Modal>
</div>
</template>
<script>
import Api from "./api";
// import Search from "./search";
export default {
name: "masterData",
components: {
// Search
},
data() {
return {
action: "",
modal: false,
title: "新增",
curId: 0,
detail: null,
easySearch: {
keys: { op: "unicode,name,code", value: null }
},
columns: [
// {
// key: "index",
// title: "#",
// align: "left",
// width: 60
// },
{
key: "code",
title: "编码",
align: "left"
},
{
key: "name",
title: "名称",
align: "left"
},
{
key: "status",
title: "状态",
align: "left",
render: (h, params) => {
return h("state", {
props: {
code: "materail.category.status",
type: "text",
value: params.row.status + ""
}
});
}
},
{
key: "description",
title: "描述",
align: "left"
},
{
title: "操作",
key: "action",
width: 260,
align: "left",
render: (h, params) => {
return h("div", { class: "action" }, [
h(
"op",
{
attrs: { oprate: "edit" },
on: { click: () => this.edit(params.row) }
},
"编辑"
),
h(
"op",
{
attrs: { oprate: "delete" },
on: { click: () => this.remove(params.row.id) }
},
params.row.children == 0 ? "删除" : ""
)
]);
}
}
]
};
},
async fetch({ store, params }) {
await store.dispatch("loadDictionary"); // 加载数据字典
},
created() {
// this.dataColumns = this.dataTable;
// console.log(this.dataColumns)
},
methods: {
search() {
this.$refs.grid.reload(this.easySearch);
},
add() {
this.curId = 0;
this.title = "新增";
this.detail = () => import("./Add");
this.modal = true;
},
remove(id) {
this.$Modal.confirm({
title: "删除",
content: "<p>您确定要删除吗?</p>",
onOk: () => {
Api.delete(id).then(r => {
if (r.success) {
this.loadTree();
this.$Message.success("删除成功");
}
});
},
onCancel: () => {
this.$Message.success("取消删除");
}
});
},
ok() {
// this.loadTree();
this.modal = false;
this.curId = 0;
},
cancel() {
this.curId = 0;
this.modal = false;
}
}
};
</script>
<style lang="less" scoped>
.spare-parts {
width: 100%;
height: 100%;
}
</style>
\ No newline at end of file
......@@ -25,5 +25,14 @@ export default {
entrentrycontinuestart(params) {
return Api.post(`${PlanUrl}/orderexecute/entrycontinue`, params);
},
//转序弹框产品+人员
productsandoperators(params) {
return Api.post(`${PlanUrl}/orderexecutehandon/productsandoperators`, params);
},
//确认发起转序
confirmproductsandoperator(params) {
return Api.post(`${PlanUrl}/orderexecutehandon/confirmproductsandoperator`, params);
},
}
\ No newline at end of file
......@@ -37,26 +37,29 @@ export default {
return {
gnFlag: 0,
listTasks: [],
dataLength: 0,
dataLength: 0
};
},
props: {
order: {
type: String,
default: '',
type: [String, Number]
},
asc: {
type: Boolean,
default: true,
default: true
},
statu: {
type: Number,
default: -9
}
},
created() {
this.loadTree(-9);
this.loadTree();
},
methods: {
loadTree(value) {
loadTree() {
let parmse = {
status: value,
status: this.statu,
isAsc: this.asc
};
Api.getCardList(parmse).then(res => {
......@@ -84,14 +87,16 @@ export default {
}
},
watch: {
order(v)
{
order(v) {
//alert(v)
},
asc(v)
{
this.asc=v
this.loadTree(-9)
asc(v) {
this.asc = v;
this.loadTree();
},
statu(v) {
this.statu=v
this.loadTree();
}
}
};
......
......@@ -515,6 +515,124 @@
}
}
.wu_bgModal{
height: calc(100vh - 185px);
.mass_box{
padding: 0 50px;
}
.footer {
width: 100%;
position: absolute;
left: 0;
bottom: -5px;
height: 60px;
line-height: 60px;
background: rgba(0, 0, 0, 0.6);
color: #fff;
padding-left: 50px;
}
.mass_box{
h2{ height: 40px;}
// .weizhix{ color: #4d5055;}
.rangb{ color: #515A6E;}
.hege{ color: #2680EB;}
.fanxiu{ color: #FFA000;}
.feipin{ color: #FE7777;}
.chuanse{
button{
width: 88px;
height: 40px;
font-size: 16px;
margin: 0 30px 0 0;
color: #fff;
}
.button04{ background: #2680EB; }
.button01{ background: #515A6E; }
.button02{ background: #FFA000; }
.button03{ background: #FE7777; }
}
.mass_list{
border: 1px solid #CACBD0;
border-radius: 4px;
padding: 10px 15px;
margin: 15px 0;
.btn_play{
margin: 0 0 20px 0;
color: #4d5055;
}
.list01{
min-height: 50px;
max-height: 155px;
overflow-x: auto;
.tag_card{
cursor: pointer;
margin: 0 20px 15px 0;
}
.ivu-tag-checked{
border: 1px solid #2680EB !important;
}
.card_bor{
border: 1px solid #2680EB !important;
}
}
.list02{
min-height: 50px;
max-height: 100px;
overflow-y: auto;
.tag_card02{
margin: 0 20px 15px 0;
}
}
}
.hege_box{
.ivu-tag-dot-inner{
background: #2680EB;
}
}
.rangbu{
.list02{
.tag_card02{
.ivu-tag-dot-inner{
background: #515a6e;
}
}
}
}
.fanxiu_box{
.list02{
.tag_card02{
.ivu-tag-dot-inner{
background: #FFA000;
}
}
}
}
.fei_box{
width: calc(100% - 482px);
display: inline-block;
.list02{
.tag_card02{
.ivu-tag-dot-inner{
background: #FE7777;
}
}
}
}
.fei_right{
float: right;
padding-top: 15px;
line-height: 50px;
width: 460px;
}
}
.futer{
width: 100%;
height: 60px;
position: absolute;
bottom: 1px;
}
}
.tech_box{
height: calc(100vh - 110px);
.ivu-layout-header{
......
......@@ -6,26 +6,37 @@
<!-- <div class="top_title">
<span class="fl">{{orderTitle}}</span>
<div>工单编号: 12001011</div>
</div> -->
<component :is="detail" :gdid="gdId" :row="row"/>
</div>-->
<component :is="detail" :gdid="gdId" :row="row" />
<a class="gd_list" @click="orderlistMode = true">工单列表</a>
<a class="gn_area" @click="functionalMode = true">功能区</a>
<!-- 工单列表 -->
<Drawer placement="left" class="gd_box" :closable="false"
:inner="true" :transfer="false" v-model="orderlistMode">
<Drawer
placement="left"
class="gd_box"
:closable="false"
:inner="true"
:transfer="false"
v-model="orderlistMode"
>
<div slot="header">
<div class="header">
<a class="gd_tt" @click="goToOrder"><Icon type="ios-undo-outline" />工单列表</a>
<Dictionary code="taskList.status" class="select_star fr" v-model="odermodel" @on-change="searchOrder"></Dictionary>
</Option>
</Select>
<a class="gd_tt" @click="goToOrder">
<Icon type="ios-undo-outline" />工单列表
</a>
<Dictionary
code="taskList.status"
class="select_star fr"
v-model="odermodel"
@on-change="searchOrder"
></Dictionary>
</div>
<div class="select_t">
<Button @click="changeAsc">{{ascTitle}}</Button>
</div>
</div>
<!-- 列表卡片主内容 -->
<orderlist ref="orderlist" :asc="asc" :order="inputId" />
<orderlist ref="orderlistref" :asc="asc" :statu="statu" :order="inputId" />
</Drawer>
<!-- 功能区 -->
<Drawer
......@@ -54,22 +65,23 @@ export default {
functionalMode: false,
gdId: 0,
detail: null,
row:{},
row: {},
odermodel: -9,
orderId: this.$route.query.id,
condition: [],
inputId: null,
asc:true,
ascTitle:'时间正序排序'
asc: true,
ascTitle: "时间正序排序",
statu:-9
};
},
created() {
let row={}
let row = {};
row.id = this.$route.query.id;
row.orderId = this.$route.query.orderId;
row.executeId = this.$route.query.executeId;
this.row=row
this.inputId=this.$route.query.id
this.row = row;
this.inputId = this.$route.query.id;
this.detail = () => import("./starOrder/index");
},
async fetch({ store, params }) {
......@@ -84,11 +96,11 @@ export default {
this.$router.push("/produce/orderlist");
},
searchOrder(value) {
if(value==''||value==null||value==undefined)
{
value=-9
if (value == null || typeof value == "undefined") {
value = -9;
}
this.$refs.orderlist.loadTree(value);
this.statu=value
// this.$refs.orderlistref.loadTree(value);
},
changeTitle(number, type) {
this.orderTitle = type;
......@@ -97,18 +109,18 @@ export default {
this.detail = () => import("./starOrder/index");
} //进度汇报
if (number == 1) {
this.$Message.info("尊敬的用户,您没有该权限!")
this.$Message.info("尊敬的用户,您没有该权限!");
// this.detail = () => import("./MaterialCollec/index");
} //物料领用
if (number == 2) {
// this.detail = () => import("./productSet/index");
this.$Message.info("尊敬的用户,您没有该权限!")
this.$Message.info("尊敬的用户,您没有该权限!");
} //产品装配
if (number == 3) {
this.detail = () => import("./taskTime/index");
} //工时分配
if (number == 4) {
this.$Message.info("尊敬的用户,您没有该权限!")
this.$Message.info("尊敬的用户,您没有该权限!");
// this.detail = () => import("./preparation/index");
} //生产准备
if (number == 5) {
......@@ -124,31 +136,25 @@ export default {
this.detail = () => import("./datafilling/index");
} //数据填报
if (number == 9) {
this.$Message.info("尊敬的用户,您没有该权限!")
this.$Message.info("尊敬的用户,您没有该权限!");
// this.detail = () => import("./testdata/index");
} //测试数据
},
changeAsc()
{
this.asc=!this.asc
if(this.asc)
{
this.ascTitle='时间正序排序'
}
else
{
this.ascTitle='时间倒序排序'
changeAsc() {
this.asc = !this.asc;
if (this.asc) {
this.ascTitle = "时间正序排序";
} else {
this.ascTitle = "时间倒序排序";
}
}
},
watch: {
'$route.query.id'(v)
{
this.row.id = v
this.inputId=v
this.detail = () => import("./starOrder/index")
},
"$route.query.id"(v) {
this.row.id = v;
this.inputId = v;
this.detail = () => import("./starOrder/index");
}
}
};
</script>
<template>
<div class>
<div>
<div class="star" v-if="dispatchStatus==12">
<a class="start" @click="starFun">
<Icon type="md-play" />开工
......@@ -53,7 +53,7 @@
<li>图号:{{entity.drawnNumber}}</li>
<li>
状态:
<state code="plan.order.status" ref="state" :value="entity.status" type="text"></state>
<state code="plan.order.status" ref="state" :value="entity.status" type="text" ></state>
</li>
<li>订单编号:{{entity.mesCode}}</li>
<li>批次号:{{entity.batchNumber}}</li>
......@@ -68,23 +68,48 @@
<li>派工数量:{{entity.dispatchQuantity}}</li>
<li>人员信息:{{entity.userNames}}</li>
<li>准备工时:{{entity.setupTime}}</li>
<li>工单状态: <state code="taskList.status" ref="state1" :value="dispatchStatus" type="text"></state></li>
<li>
工单状态:
<state code="taskList.status" ref="state1" :value="dispatchStatus" type="text"></state>
</li>
</ul>
</div>
<div class="img_box fl" style="background:#DDD">
<div class="img_box fl bgDDD">
<ViewerImg :images="images" />
</div>
</div>
<Modal v-model="ransferModal" :title="transferTitle" width="800">
<!-- <component :is="detail" :eid="curId" @on-close="cancel" @on-ok="ok" footer-hide/> -->
<div class="zhuanx">
<p class="line_p">
<Input prefix="ios-contact-outline" placeholder="请输入人员编号" style="width: auto" />
<!-- <UserSelect ref="userSelected" :multiple="true" style="width: 220px;margin:0 auto;"/> -->
</p>
<p class="line_p">
<Input prefix="ios-lock-outline" placeholder="请输入人员密码" style="width: auto" />
</p>
<Modal v-model="ransferModal" :title="transferTitle" fullscreen style="z-index:99999" :footer-hide="cardlist.length>0">
<div class="wu_bgModal">
<div class="mass_box">
<div class="mass_list">
<h2 class="btn_play tl">
选择产品({{cardlist.length}}
<Button class="button" type="primary" @click="allcheck">全选</Button>
<Button class="button" type="primary" @click="rechecked">反选</Button>
</h2>
<div class="list01 tl">
<Tag
type="dot"
:checkable="true"
class="tag_card"
size="large"
v-for="(item,index) in cardlist"
:name="item.id"
:key="index"
:checked="item.checked"
color="primary"
@on-change="changeCards"
>{{item.product_code}}</Tag>
</div>
</div>
</div>
<div class="mass_box">
<UserSelect ref="userSelected" :datas="userlist" v-model="user" v-width="300" />
</div>
</div>
<div slot="footer" >
<Button class="button" @click="ransferModal=false">取消</Button>
<Button class="button" type="primary" @click="ransOk">确定</Button>
</div>
</Modal>
</div>
......@@ -125,7 +150,13 @@ export default {
? true
: Number(this.$route.query.dispatchStatus) == 5
? true
: false
: false,
cardlist: [],
detailId: null,
nextDetailId: null,
operatorId: null,
userlist: [],
user: null
};
},
created() {
......@@ -217,6 +248,7 @@ export default {
},
transferFn() {
this.ransferModal = true;
this.getProduce();
},
load(v) {
//加载基础数据
......@@ -278,9 +310,103 @@ export default {
show() {
this.$viewer.show();
},
goPage(type,title)
{
this.$parent.changeTitle(type,title)
goPage(type, title) {
this.$parent.changeTitle(type, title);
},
getProduce() {
this.cardlist = [];
let pid = Number(this.$route.query.id); // JSON.stringify()
let params = {
id: Number(this.$route.query.id),
executeId: Number(this.$route.query.executeId)
};
Api.productsandoperators(params)
.then(res => {
if (res.success && res.result) {
this.detailId = res.result.detailId;
this.nextDetailId = res.result.nextDetailId;
let users = res.result.users;
this.userlist = [];
users.forEach(u => {
(u.value = u.id), (u.label = u.userName);
this.userlist.push(u);
});
let resoult = res.result.products;
resoult.filter(u => {
u.checked = false;
this.cardlist.push(u);
});
}
})
.catch(e => {
this.$Message.error("连接错误");
});
},
// 全选
allcheck() {
let cardslist = this.cardlist;
cardslist.map(a => {
a.checked = true;
});
},
// 反选
rechecked() {
let cardslist = this.cardlist;
cardslist.map(b => {
b.checked = !b.checked;
});
},
// 单选
changeCards(checked, name) {
let cardlist = this.cardlist;
cardlist.map((u, i) => {
if (u.id == name) {
u.checked = checked;
}
});
},
//确定转续
ransOk() {
let userInfo = this.$refs.userSelected.getSelectItems();
let cardlist = this.cardlist;
let upList = [];
cardlist.map((u, i) => {
if (u.checked) {
upList.push(u.id);
}
});
if (upList.length == 0) {
this.$Message.error("请选择转续的产品!");
return;
}
if (!userInfo || userInfo.length == 0) {
this.$Message.error("请选择人员!");
return;
}
let params = {
id: Number(this.$route.query.id),
detailId: this.detailId,
nextDetailId: this.nextDetailId,
productIds: upList,
operatorId: userInfo[0].id,
operator: userInfo[0].userName
};
Api.confirmproductsandoperator(params)
.then(res => {
if (res.success && res.result) {
this.$Message.success("转续成功");
this.ransferModal=false
}
else{
this.$Message.error("转续失败");
}
})
.catch(e => {
this.$Message.error("连接错误");
});
}
},
watch: {
......
......@@ -1067,3 +1067,6 @@ html [type=button] {
.gdShow {
box-shadow: 0px 0px 15px #333;
}
.bgDDD {
background: #DDD;
}
......@@ -41,7 +41,7 @@
}
.execute_box .gd_list {
position: absolute;
top: 40%;
top: 43%;
left: 0px;
background: #2680EB;
color: #fff;
......@@ -52,7 +52,7 @@
}
.execute_box .gn_area {
position: absolute;
top: 40%;
top: 43%;
right: 0px;
background: #515A6E;
color: #fff;
......@@ -84,13 +84,16 @@
background: #ddd;
margin: 10px 0 0 170px;
}
.execute_box .bottom_box {
height: calc(100vh - 145px);
overflow-y: auto;
padding: 15px 40px 0px;
}
.execute_box .pross_case {
padding: 5px 50px 0;
}
.execute_box .pross_case .table_box {
height: calc(100vh - 105px);
}
.execute_box .pross_case .table_box .card_box {
.execute_box .pross_case .card_box {
background: #F5F6FA;
border: 1px solid #dedede7d;
padding: 10px;
......@@ -99,12 +102,40 @@
margin: 10px 0 20px;
line-height: 30px;
}
.execute_box .pross_case .table_box .card_box i {
.execute_box .pross_case .card_box i {
font-size: 62px;
}
.execute_box .pross_case .table_box .card_box:hover {
.execute_box .pross_case .card_box:hover {
box-shadow: 4px 5px 7px #d2d2d2bd;
}
.execute_box .pros_check {
height: calc(100vh - 175px);
padding: 0;
}
.card_body {
border: 1px solid #e4e6ed;
border-radius: 4px;
margin-bottom: 30px;
}
.card_body .title_i {
padding: 0 8px;
height: 35px;
line-height: 35px;
color: #fff;
background: #a7b8cc;
font-size: 15px;
}
.card_body .btn_click {
text-align: right;
}
.card_body .down_text {
background: #a7b8cc33;
padding: 5px 8px;
line-height: 32px;
}
.card_body .down_text i {
font-size: 62px;
}
.gd_box .ivu-drawer-wrap .ivu-drawer-left {
width: 370px!important;
}
......@@ -133,7 +164,7 @@
}
.gd_box .ivu-drawer-wrap .ivu-drawer-left .ivu-drawer-content .ivu-drawer-body {
padding: 0;
height: calc(100% - 210px);
height: calc(100% - 115px);
}
.gd_box .ivu-drawer-wrap .ivu-drawer-left .ivu-drawer-content .ivu-drawer-body .order_list .select_t {
padding: 15px 20px;
......@@ -335,7 +366,7 @@
color: #fff;
}
.wu_bg {
height: calc(100vh - 100px);
height: calc(100vh - 115px);
}
.wu_bg .mass_box {
padding: 0 50px;
......@@ -354,12 +385,12 @@
.wu_bg .mass_box h2 {
height: 40px;
}
.wu_bg .mass_box .heger {
color: #2680EB;
}
.wu_bg .mass_box .rangb {
color: #515A6E;
}
.wu_bg .mass_box .hege {
color: #2680EB;
}
.wu_bg .mass_box .fanxiu {
color: #FFA000;
}
......@@ -373,6 +404,9 @@
margin: 0 30px 0 0;
color: #fff;
}
.wu_bg .mass_box .chuanse .button04 {
background: #2680EB;
}
.wu_bg .mass_box .chuanse .button01 {
background: #515A6E;
}
......@@ -390,6 +424,7 @@
}
.wu_bg .mass_box .mass_list .btn_play {
margin: 0 0 20px 0;
color: #4d5055;
}
.wu_bg .mass_box .mass_list .list01 {
min-height: 50px;
......@@ -414,6 +449,9 @@
.wu_bg .mass_box .mass_list .list02 .tag_card02 {
margin: 0 20px 15px 0;
}
.wu_bg .mass_box .hege_box .ivu-tag-dot-inner {
background: #2680EB;
}
.wu_bg .mass_box .rangbu .list02 .tag_card02 .ivu-tag-dot-inner {
background: #515a6e;
}
......@@ -439,6 +477,118 @@
position: absolute;
bottom: 1px;
}
.wu_bgModal {
height: calc(100vh - 185px);
}
.wu_bgModal .mass_box {
padding: 0 50px;
}
.wu_bgModal .footer {
width: 100%;
position: absolute;
left: 0;
bottom: -5px;
height: 60px;
line-height: 60px;
background: rgba(0, 0, 0, 0.6);
color: #fff;
padding-left: 50px;
}
.wu_bgModal .mass_box h2 {
height: 40px;
}
.wu_bgModal .mass_box .rangb {
color: #515A6E;
}
.wu_bgModal .mass_box .hege {
color: #2680EB;
}
.wu_bgModal .mass_box .fanxiu {
color: #FFA000;
}
.wu_bgModal .mass_box .feipin {
color: #FE7777;
}
.wu_bgModal .mass_box .chuanse button {
width: 88px;
height: 40px;
font-size: 16px;
margin: 0 30px 0 0;
color: #fff;
}
.wu_bgModal .mass_box .chuanse .button04 {
background: #2680EB;
}
.wu_bgModal .mass_box .chuanse .button01 {
background: #515A6E;
}
.wu_bgModal .mass_box .chuanse .button02 {
background: #FFA000;
}
.wu_bgModal .mass_box .chuanse .button03 {
background: #FE7777;
}
.wu_bgModal .mass_box .mass_list {
border: 1px solid #CACBD0;
border-radius: 4px;
padding: 10px 15px;
margin: 15px 0;
}
.wu_bgModal .mass_box .mass_list .btn_play {
margin: 0 0 20px 0;
color: #4d5055;
}
.wu_bgModal .mass_box .mass_list .list01 {
min-height: 50px;
max-height: 155px;
overflow-x: auto;
}
.wu_bgModal .mass_box .mass_list .list01 .tag_card {
cursor: pointer;
margin: 0 20px 15px 0;
}
.wu_bgModal .mass_box .mass_list .list01 .ivu-tag-checked {
border: 1px solid #2680EB !important;
}
.wu_bgModal .mass_box .mass_list .list01 .card_bor {
border: 1px solid #2680EB !important;
}
.wu_bgModal .mass_box .mass_list .list02 {
min-height: 50px;
max-height: 100px;
overflow-y: auto;
}
.wu_bgModal .mass_box .mass_list .list02 .tag_card02 {
margin: 0 20px 15px 0;
}
.wu_bgModal .mass_box .hege_box .ivu-tag-dot-inner {
background: #2680EB;
}
.wu_bgModal .mass_box .rangbu .list02 .tag_card02 .ivu-tag-dot-inner {
background: #515a6e;
}
.wu_bgModal .mass_box .fanxiu_box .list02 .tag_card02 .ivu-tag-dot-inner {
background: #FFA000;
}
.wu_bgModal .mass_box .fei_box {
width: calc(100% - 482px);
display: inline-block;
}
.wu_bgModal .mass_box .fei_box .list02 .tag_card02 .ivu-tag-dot-inner {
background: #FE7777;
}
.wu_bgModal .mass_box .fei_right {
float: right;
padding-top: 15px;
line-height: 50px;
width: 460px;
}
.wu_bgModal .futer {
width: 100%;
height: 60px;
position: absolute;
bottom: 1px;
}
.tech_box {
height: calc(100vh - 110px);
}
......@@ -548,3 +698,7 @@
display: inline-block;
color: #515a6e;
}
.zhuanx {
text-align: center;
line-height: 50px;
}
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