Commit b0f47e09 authored by 周远喜's avatar 周远喜

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

parents 2c88e795 f98ce9c7
......@@ -54,6 +54,9 @@ div::-webkit-scrollbar{
.fc-a{
justify-content: space-around;
}
.fc-ev{
justify-content: space-evenly;
}
.fd{
flex-direction: column;
}
......@@ -868,6 +871,7 @@ textarea::-webkit-input-placeholder {
background: #F6F8FB;
}
}
.tableCommon tr td {
line-height: 25px;
font-size: 14px;
......@@ -1345,4 +1349,8 @@ html [type=button] {
.ivu-input-number{
width: 100%;
}
}
\ No newline at end of file
}
//显示富文本框时的图片
.tohtml img{
max-width: 95%;
}
\ No newline at end of file
......@@ -20,10 +20,14 @@
<p>将文件拖到此处,或点击上传</p>
</div>
<Button icon="ios-cloud-upload-outline" v-if="!cloudIco">上传文件</Button>
<span style="font-size:10px;color:#aaa" v-if="fileFormat">文件格式:{{JSON.stringify(formatList).replace('[', '').replace(']', '').replace(/\"/g, '')}};文件最大:{{maxSize}}k</span>
<span
style="font-size:10px;color:#aaa"
v-if="fileFormat"
>文件格式:{{JSON.stringify(formatList).replace('[', '').replace(']', '').replace(/\"/g, '')}};文件最大:{{maxSize}}k</span>
</Upload>
<Progress :percent="per" :stroke-width="5" v-show="vshowPro" />
<Tag
v-if="Photo"
v-for="(item,index) in nameList"
:key="index"
:name="item.id"
......@@ -33,10 +37,28 @@
>
<a :href="fileUrlPath" @click="downFile(item.filePath)" target="_blank">{{item.fileName}}</a>
</Tag>
<div class="upload-body" v-else>
<div
class="demo-upload-list"
v-for="(item,index) in nameList"
:key="index"
:closable="!unClosable"
@click="listData(item,index)"
:class="isactive == index ? 'addclass' : '' "
>
<template>
<img :src="downUrl+item.filePath" />
</template>
<div class="demo-upload-list-cover">
<Icon type="ios-eye" @click.native="seeFile(item.filePath)"></Icon>
<Icon type="ios-trash-outline" @click.native="handleClose2($event,item.id)"></Icon>
</div>
</div>
</div>
</div>
</template>
<script>
import util from '@/libs/util';
import util from "@/libs/util";
export default {
name: "files",
model: {
......@@ -49,12 +71,14 @@ export default {
fileUrlPath: "",
nameList: [],
hbaseFileListNew: [],
formatList: ["jpg","gif","png"],
formatList: ["jpg", "gif", "png"],
multiple: true,
postUrl: "",
style: "",
per: 0,
vshowPro: false
vshowPro: false,
Photo: true,
isactive: 0
};
},
created() {},
......@@ -64,7 +88,8 @@ export default {
type: Boolean,
default: false
},
singleFile: {//上传单文件
singleFile: {
//上传单文件
type: Boolean,
default: false
},
......@@ -84,12 +109,21 @@ export default {
type: Boolean,
default: false
},
fileFormat:{
fileFormat: {
type: Boolean,
default: false
},
Photos: {
type: Boolean,
default: false
}
},
methods: {
listData(li, index) {
this.$emit("clickItem", this.downUrl + li.filePath);
this.isactive = index;
},
onProgress(event, file, fileList) {
this.per = 0;
this.vshowPro = true;
......@@ -99,6 +133,11 @@ export default {
// },
//上传成功文件
uploadSuccess(response, file, fileList) {
if (this.Photos) {
this.Photo = false;
} else {
this.Photo = true;
}
this.per = 60;
this.vshowPro = true;
const hbaseFileList = [];
......@@ -113,6 +152,7 @@ export default {
objImag.id = file.response.data.id;
filesList.push(objImag);
this.nameList = this.nameList.concat(filesList);
console.log(this.nameList);
this.per = 100;
setTimeout(() => {
this.per = 0;
......@@ -158,6 +198,10 @@ export default {
downFile(path) {
this.fileUrlPath = this.downUrl + path;
},
seeFile(path) {
this.fileUrlPath = this.downUrl + path;
window.open(this.fileUrlPath, "_blank");
},
formatL() {
if (this.files) {
this.formatList = [
......@@ -169,7 +213,7 @@ export default {
"doc",
"xls",
"xlsx",
"txt",
"txt"
];
}
return this.formatList;
......@@ -186,7 +230,7 @@ export default {
this.postUrl =
fileUrl +
"/upload/?token=Bearer " +
util.cookies.get('token') +
util.cookies.get("token") +
"&" +
this.convertObj(this.parms);
//是否显示上传按钮
......@@ -279,4 +323,49 @@ export default {
};
</script>
<style lang="less">
.upload-body {
width: 100%;
border: 1px solid #eee;
margin-top: 10px;
.demo-upload-list {
display: inline-block;
width: 60px;
height: 60px;
text-align: center;
line-height: 60px;
border: 1px solid transparent;
border-radius: 4px;
overflow: hidden;
background: #fff;
position: relative;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
margin: 10px 10px 0 10px;
cursor: pointer;
}
.demo-upload-list img {
width: 100%;
height: 100%;
}
.demo-upload-list-cover {
display: none;
position: absolute;
top: -20px;
right: 0;
// background: rgba(0, 0, 0, 0.6);
}
.demo-upload-list:hover .demo-upload-list-cover {
display: block;
// border: 1px solid #eee;
}
.demo-upload-list-cover i {
color: #000;
font-size: 20px;
cursor: pointer;
margin: 0 2px;
}
.addclass {
border: 1px solid #2680eb;
}
}
</style>
\ No newline at end of file
<template>
<Select v-model="dep" :placeholder="placeholdeinfo" clearable @on-clear="onClear">
<Option
v-for="(item,index) in list"
:key="index"
:value="item.value"
style="display:none"
:label="item.label"
></Option>
<Tree key="mytree" :data="data1" ref="mytree" :render="renderContent"></Tree>
</Select>
</template>
<script>
import Api from "../../pages/technology/productMix/productTree/api";
export default {
name: "Add",
model: {
prop: "value",
event: "on-change"
},
data() {
return {
dep: "",
list: [],
data1: [],
selectdata: [],
placeholdeinfo: "请选择",
orderSearchForm: {
productId: null, //层级id
productName: "" //层级名称
}
};
},
props: {
value: [String, Number, Array],
placeholder: {
type: String,
default: "请选择部门"
},
multiple: {
type: Boolean,
default: false
},
disabled: {
type: Boolean,
default: false
}
},
mounted() {},
created() {
this.dep = this.value | "";
this.loadTree();
},
methods: {
renderContent(h, { root, node, data }) {
//渲染树的样式
return h(
"span",
{
// style: {
// color: data.isProduct != "1" ? "#249E91" : "#333", //根据选中状态设置样式
// cursor: "pointer"
// },
on: {
click: () => {
let arrTree = [];
arrTree.push(data);
this.handleSelect(arrTree); //手动选择树节点
}
}
},
data.name
);
},
handleSelect(data) {
console.log(data);
if (data.length > 0) {
this.list = [];
this.list.push({
label: data[0].name,
value: data[0].id
});
this.orderSearchForm.productName = data[0].name;
this.orderSearchForm.productId = data[0].id;
let listData = this.$u.clone(this.data1);
let result = [];
var nodeId = data.id;
// //传入参数:需要遍历的json,需要匹配的id
function findPnodeId(listData, nodeId) {
//设置结果
if (!listData) {
return; //如果data传空,直接返回
}
for (var i = 0; i < listData.children.length; i++) {
let item = listData.children[i];
if (item.id == nodeId) {
result.unshift(data.name);
//找到id相等的则返回父id
return result;
} else if (!!item.children) {
findPnodeId(item.children, nodeId);
}
}
//如果执行循环中都没有return,则在此return
return result;
}
console.log(result);
this.$emit("on-change", this.orderSearchForm);
}
},
loadTree() {
//打开新增订单窗口加载产品
var sumData = [];
Api.getleveltree().then(r => {
if (r.result) {
this.data1 = r.result;
} else {
this.$Message.error("加载产品树失败!");
}
});
},
onClear() {
this.list = [];
this.placeholdeinfo = "请选择";
this.$emit("on-change", this.orderSearchForm);
}
},
watch: {
value: {
handler(v, o) {
this.dep = v | "";
Api.getleveltree().then(res => {
if (res.result) {
let temData = this.$u.clone(this.data1);
this.list = [];
if (v != "" && v != null) {
let dataTemp = this.$u.treeToList(temData);
dataTemp.forEach(data => {
if (data.id == this.dep) {
this.list.push({ label: data.name, value: data.id });
}
});
}
} else {
this.$Message.error("加载产品树失败!");
}
});
},
deep: true
}
}
};
</script>
......@@ -1092,13 +1092,13 @@ export default {
put_into_qty: '投产数量',
plan_start: '计划排产开始',
plan_finish: '计划排产结束',
setup_time: '准备工时',
setup_time: '排产准结工时',
run_time: '单件工时',
transport_time: '转运时间',
check_time: '检验时间',
efficiency_value: '效率系数',
singleout: '单件产出',
first_equip: '设备编号',
first_equip: '首选资源',
equip_type: '设备类型',
cal_id: '连班策略',
machine_rule: '设备优先规则',
......@@ -1425,5 +1425,29 @@ export default {
check_person:'校对人',
executive_branch:'执行部门',
},
product_info:{
mmcode:'物料编号',
drawingNo:'图号',
name:'名称',
productCode:'产品编号',
status:'',
remark:'备注',
madeCompany:'主承制单位',
extend:'',
productUrl:'产品图像url',
productUrlList:'产品图象列表',
},
order_list:{
mesCode:'订单编号',
status:'工单状态',
productName:'产品名称',
drawnNumber:'图号',
quantity:'生产数量',
beginTime:'开始时间',
endTime:'结束时间',
planEndTime:'计划结束时间',
action:'操作'
}
}
......@@ -40,6 +40,10 @@ export default {
return Api.post(`${apsUrl}/apspoolappservices/recoveryoptasksimluate`, params);
},
//移出排产池前判断
beforeshiftoutapspool(params) {
return Api.post(`${apsUrl}/apspoolappservices/beforeshiftoutapspool`, params);
},
//移出排产池
shiftoutapspool(params) {
return Api.post(`${apsUrl}/apspoolappservices/shiftoutapspool`, params);
......
......@@ -60,7 +60,7 @@
<Modal v-model="addModalTemp" title="自定义排序模板" footer-hide width="1000" class="tempModal">
<Temp :data="listTemp" ref="tempRef"></Temp>
</Modal>
<Modal v-model="modalDuration" title="外协任务" footer-hide width="1000" >
<Modal v-model="modalDuration" title="外协任务" footer-hide width="1000">
<Duration ref="durationRef"></Duration>
</Modal>
<Modal v-model="addModal" title="工序参数设置" footer-hide width="1000">
......@@ -76,6 +76,9 @@
<Modal v-model="apsModal" title="确定APS排产" @on-ok="apsOk" @on-cancel="cancel">
<p>确定进行APS排产?</p>
</Modal>
<Modal v-model="apsCheckModal" title="确定APS排产" @on-ok="apsCheckOk" @on-cancel="cancel">
<p>已有排产方案,是否移出排产池?</p>
</Modal>
<Modal v-model="circleModal" title footer-hide :mask-closable="false">
<div slot="close"></div>
<Row>
......@@ -123,6 +126,8 @@ export default {
addModalTemp: false,
modalDuration: false,
insertlModal1: false,
apsCheckModal: false,
tempParams: null,
insertTItle1: "插单",
rowIndex1: null,
list: [],
......@@ -197,7 +202,8 @@ export default {
color: params.row.insert_flag == 1 ? "#2680EB" : "#aaa"
},
on: {
click: () => this.changeFlag1(params.row.part_task_pk, params.index)
click: () =>
this.changeFlag1(params.row.part_task_pk, params.index)
}
})
]
......@@ -431,6 +437,7 @@ export default {
},
remove(partPkId) {
//移出排产池
this.tempParams = null;
let paramsArry = [];
if (partPkId.constructor == Array) {
paramsArry = partPkId;
......@@ -440,17 +447,45 @@ export default {
let params = {
partPks: paramsArry
};
Api.shiftoutapspool(params).then(r => {
if (r.success) {
this.$Message.success("移出排产池操作成功");
this.loadList();
//移出排产后将aps对应的store数量去掉
this.$store.commit(
"setCountAps",
this.$store.state.countAps - paramsArry.length
);
}
});
Api.beforeshiftoutapspool(params)
.then(res => {
if (res.success) {
if (res.result) {
this.checkapspool(params);
} else {
this.tempParams = null;
this.tempParams = params;
this.apsCheckModal = true;
}
} else {
this.$Message.error("校验失败");
}
})
.catch(err => {
this.$Message.error("连接错误1");
});
},
apsCheckOk() {
this.checkapspool(this.tempParams);
},
checkapspool(params) {
Api.shiftoutapspool(params)
.then(r => {
if (r.success) {
this.$Message.success("移出排产池操作成功");
this.loadList();
//移出排产后将aps对应的store数量去掉
this.$store.commit(
"setCountAps",
this.$store.state.countAps - params.partPks.length
);
} else {
this.$Message.error("移出排产池操作失败");
}
})
.catch(err => {
this.$Message.error("连接失败2");
});
},
onSelect(a, b) {
//批量选择
......@@ -474,6 +509,7 @@ export default {
this.editModal = false;
this.deletedlModal = false;
this.apsModal = false;
this.apsCheckModal = false;
},
onDragDrop(a, b) {
//拖拽排序
......@@ -650,7 +686,7 @@ export default {
},
//外协工期修改end
//插单start
//插单事件start----
//插单事件start----
changeFlag1(id, index) {
this.rowIndex1 = index;
if (this.list[this.rowIndex1].insert_flag == 1) {
......@@ -663,7 +699,10 @@ export default {
insertOk1() {
if (this.list[this.rowIndex1].insert_flag == 1) {
//根据插单数据状态进行插单或取消插单操作
let params1 = { partTaskPks: [this.list[this.rowIndex1].part_task_pk], opTaskPks: [] };
let params1 = {
partTaskPks: [this.list[this.rowIndex1].part_task_pk],
opTaskPks: []
};
Api.cancelinsertorder(params1)
.then(res => {
if (res.success) {
......@@ -677,7 +716,10 @@ export default {
this.$Message.error("数据异常!");
});
} else {
let params = { partTaskPks: [this.list[this.rowIndex1].part_task_pk], opTaskPks: [] };
let params = {
partTaskPks: [this.list[this.rowIndex1].part_task_pk],
opTaskPks: []
};
Api.saveinsertorder(params)
.then(res => {
if (res.success) {
......@@ -692,7 +734,7 @@ export default {
});
}
this.insertlModal1 = false;
},
}
//插单end
}
};
......
......@@ -59,7 +59,7 @@
</RadioGroup>
</FormItem>
<FormItem v-if="formItem.radio==0">
<UserSelect v-model="user" :multiple="true" theme="list" />
<UserSelect v-model="user" :multiple="true" />
</FormItem>
<FormItem label="班组" v-if="formItem.radio==1">
<Select v-model="formItem.shopId" placeholder="请选择" style="width:300px">
......
......@@ -24,7 +24,7 @@
style="width:300px"
:multiple="true"
/>-->
<UserSelect v-model="formItem.userIds" :multiple="true" theme="list" />
<UserSelect v-model="formItem.userIds" :multiple="true" />
</FormItem>
<FormItem label="班组" v-if="mode==2" prop="shopId">
<Select v-model="formItem.shopId" placeholder="请选择" style="width:300px">
......
......@@ -5,7 +5,7 @@
<Form ref="formInline" :model="easySearch" inline>
<FormItem prop="keys">
<Input
placeholder="请输入关键字客户名称/客户简称/邮政地址/负责人/办公电话/手机/客户类型/客户区域/备注/客户编码/行业"
placeholder="请输入关键字客户名称/办公电话"
v-model="easySearch.keys.value"
search
enter-button
......@@ -55,7 +55,7 @@ export default {
easySearch: {
keys: {
op:
'name,abbre,address,principal,telephone,mobile,type,area,notes,code,trade',
'name,telephone',
value: null
}
},
......
......@@ -39,7 +39,7 @@
</Col>
<Col span="12">
<FormItem label="分解数量" style="width:100%" prop="splitQuantity">
<InputNumber :min="1" v-model="orderForm.splitQuantity" :step="1" style="width:180px"></InputNumber>
<InputNumber :min="0" v-model="orderForm.splitQuantity" style="width:180px"></InputNumber>
<Button type="primary" @click="addSplitOrder">确定</Button>
</FormItem>
</Col>
......@@ -177,6 +177,11 @@ export default {
},
//确定增加数量
addSplitOrder() {
if (this.orderForm.splitQuantity < 2||this.orderForm.splitQuantity==undefined) {
this.dataList = [];
return;
}
if (this.orderForm.quantity >= this.orderForm.splitQuantity) {
this.dataListRetrun.items = [];
this.$refs["formValidate"].validate(valid => {
......@@ -267,7 +272,7 @@ export default {
this.orderForm = this.$u.clone(this.row);
this.orderForm.planStartTime = this.orderForm.demandStartDate;
this.orderForm.planEndTime = this.orderForm.demandFinishDate;
this.orderForm.splitQuantity = 2;
//this.orderForm.splitQuantity = 2;
this.dataListRetrun.id = this.orderForm.id;
this.dataListRetrun.quantity = this.orderForm.quantity;
this.dataListRetrun.mesCode = this.orderForm.mesCode;
......
......@@ -299,7 +299,7 @@
<td class="tl">{{item5.taskseq}}</td>
<td class="tl">{{item5.name}}</td>
<td class="tl">
<div v-html="item5.task_content" ></div>
<div v-html="item5.task_content" class="tohtml"></div>
</td>
<td class="tl">{{item5.operator}}</td>
<td class="tl">{{item5.proofreader}}</td>
......@@ -308,7 +308,7 @@
<td class="tl">{{item6.taskseq}}</td>
<td class="tl">{{item6.name}}</td>
<td class="tl">
<div v-html="item6.task_content" ></div>
<div v-html="item6.task_content" class="tohtml"></div>
</td>
<td class="tl">{{item6.operator}}</td>
<td class="tl">{{item6.proofreader}}</td>
......
......@@ -292,7 +292,7 @@
<td class="tl">{{item5.taskseq}}</td>
<td class="tl">{{item5.name}}</td>
<td class="tl">
<div v-html="item5.task_content" ></div>
<div v-html="item5.task_content" class="tohtml"></div>
</td>
<td class="tl">{{item5.operator}}</td>
<td class="tl">{{item5.proofreader}}</td>
......@@ -301,7 +301,7 @@
<td class="tl">{{item6.taskseq}}</td>
<td class="tl">{{item6.name}}</td>
<td class="tl">
<div v-html="item6.task_content" ></div>
<div v-html="item6.task_content" class="tohtml"></div>
</td>
<td class="tl">{{item6.operator}}</td>
<td class="tl">{{item6.proofreader}}</td>
......
import Api from '@/plugins/request'
export default {
index: `${PlanUrl}/orderexecutenew/paged_img`,
paged(params) {
return Api.post(`${PlanUrl}/orderexecutenew/paged_img`, params);
},
}
......@@ -2,7 +2,7 @@
<template>
<div class="addd">
<ul>
<li><a @click="gnFunto(0,'进度汇报')" :class="{active:gnFlag == 0}"><Icon type="ios-clipboard" /> 进度汇报</a></li>
<!-- <li><a @click="gnFunto(0,'进度汇报')" :class="{active:gnFlag == 0}"><Icon type="ios-clipboard" /> 进度汇报</a></li>
<li><a @click="gnFunto(1,'物料领用')" :class="{active:gnFlag == 1}"><Icon type="ios-cube" /> 物料领用</a></li>
<li><a @click="gnFunto(2,'产品装配')" :class="{active:gnFlag == 2}"><Icon type="md-build" /> 产品装配</a></li>
<li><a @click="gnFunto(3,'工时分配')" :class="{active:gnFlag == 3}"><Icon type="ios-time" /> 工时分配</a></li>
......@@ -11,7 +11,29 @@
<li><a @click="gnFunto(6,'工艺案例')" :class="{active:gnFlag == 6}"><Icon type="ios-paper" /> 工艺案例</a></li>
<li><a @click="gnFunto(7,'质量判定')" :class="{active:gnFlag == 7}"><Icon type="ios-medal" /> 质量判定</a></li>
<li><a @click="gnFunto(8,'数据填报')" :class="{active:gnFlag == 8}"><Icon type="ios-create" /> 数据填报</a></li>
<li><a @click="gnFunto(9,'测试数据')" :class="{active:gnFlag == 9}"><Icon type="logo-codepen" /> 测试数据</a></li>
<li><a @click="gnFunto(9,'测试数据')" :class="{active:gnFlag == 9}"><Icon type="logo-codepen" /> 测试数据</a></li> -->
<li><a @click="gnFunto(0,'进度汇报')" :class="{active:gnFlag == 0}">
<img src="@/assets/imgicon/execute/ex01.png" alt=""/>
进度汇报</a></li>
<li><a @click="gnFunto(1,'物料领用')" :class="{active:gnFlag == 1}">
<img src="@/assets/imgicon/execute/ex02.png" alt=""/>
物料领用</a></li>
<li><a @click="gnFunto(2,'产品装配')" :class="{active:gnFlag == 2}">
<img src="@/assets/imgicon/execute/ex03.png" alt=""/> 产品装配</a></li>
<li><a @click="gnFunto(3,'工时分配')" :class="{active:gnFlag == 3}">
<img src="@/assets/imgicon/execute/ex04.png" alt=""/> 工时分配</a></li>
<li><a @click="gnFunto(4,'生产准备')" :class="{active:gnFlag == 4}">
<img src="@/assets/imgicon/execute/ex05.png" alt=""/> 生产准备</a></li>
<li><a @click="gnFunto(5,'工艺查看')" :class="{active:gnFlag == 5}">
<img src="@/assets/imgicon/execute/ex06.png" alt=""/> 工艺查看</a></li>
<li><a @click="gnFunto(6,'工艺案例')" :class="{active:gnFlag == 6}">
<img src="@/assets/imgicon/execute/ex07.png" alt=""/> 工艺案例</a></li>
<li><a @click="gnFunto(7,'质量判定')" :class="{active:gnFlag == 7}">
<img src="@/assets/imgicon/execute/ex08.png" alt=""/> 质量判定</a></li>
<li><a @click="gnFunto(8,'数据填报')" :class="{active:gnFlag == 8}">
<img src="@/assets/imgicon/execute/ex09.png" alt=""/> 数据填报</a></li>
<li><a @click="gnFunto(9,'测试数据')" :class="{active:gnFlag == 9}">
<img src="@/assets/imgicon/execute/ex10.png" alt=""/> 测试数据</a></li>
</ul>
</div>
</template>
......
......@@ -23,36 +23,6 @@
<p><Icon type="ios-pricetags" />{{item.gongxu}}</p>
<p>{{item.time}}</p>
</Card>
<!-- <Card class="card_order">
<p slot="title">CJ_181212_002_001 <span class="fr">未开工</span></p>
<p class="order_tit">发动机</p>
<p><Icon type="ios-pricetags" />工序1:领料</p>
<p>2018-12-12 ~ 2018-12-30</p>
</Card>
<Card class="card_order">
<p slot="title">CJ_181212_002_001 <span class="fr">执行中</span></p>
<p class="order_tit">发动机</p>
<p><Icon type="ios-pricetags" />工序1:领料</p>
<p>2018-12-12 ~ 2018-12-30</p>
</Card>
<Card class="card_order">
<p slot="title">CJ_181212_002_001 <span class="fr">暂停中</span></p>
<p class="order_tit">发动机</p>
<p><Icon type="ios-pricetags" />工序1:领料</p>
<p>2018-12-12 ~ 2018-12-30</p>
</Card>
<Card class="card_order">
<p slot="title">CJ_181212_002_001 <span class="fr">交检中</span></p>
<p class="order_tit">发动机</p>
<p><Icon type="ios-pricetags" />工序1:领料</p>
<p>2018-12-12 ~ 2018-12-30</p>
</Card>
<Card class="card_order">
<p slot="title">CJ_181212_002_001 <span class="fr">已完成</span></p>
<p class="order_tit">发动机</p>
<p><Icon type="ios-pricetags" />工序1:领料</p>
<p>2018-12-12 ~ 2018-12-30</p>
</Card> -->
</div>
</div>
</template>
......
......@@ -189,6 +189,10 @@
}
}
.addd{
ul li a img{
vertical-align: middle;
margin: 0 7px 3px 0;
}
a.active{
background: #2680EB;
}
......@@ -359,29 +363,88 @@
.rangb{ color: #515A6E;}
.fanxiu{ color: #FFA000;}
.feipin{ color: #FE7777;}
.chuanse{
button{
width: 88px;
height: 40px;
font-size: 16px;
margin: 0 30px 0 0;
color: #fff;
}
.button01{ background: #515A6E; }
.button02{ background: #FFA000; }
.button03{ background: #FE7777; }
}
.mass_list{
border: 1px solid #CACBD0;
border-radius: 4px;
padding: 16px 20px;
padding: 10px 15px;
margin: 15px 0;
.btn_play{
margin: 0 0 20px 0;
}
.list01{
.file_card{
.ivu-checkbox{ display: none;}
.file{
float: left;
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;
.tag_card02{
margin: 0 20px 15px 0;
}
}
}
.rangbu{
.list02{
.tag_card02{
.ivu-tag-dot-inner{
background: #515a6e;
}
.hege{ i{color: #2680EB;} }
.rang{ i{color: #515A6E;} }
.fanxiu{ i{color: #FFA000;} }
.feipin{ i{color: #FE7777;} }
}
.ivu-checkbox-wrapper{
margin: 0 24px 0 0;
}
}
.fanxiu_box{
.list02{
.tag_card02{
.ivu-tag-dot-inner{
background: #FFA000;
}
}
}
}
.fei_box{
width: calc(100% - 520px);
display: inline-block;
.list02{
.tag_card02{
.ivu-tag-dot-inner{
background: #FE7777;
}
}
}
}
.fei_right{
float: right;
line-height: 50px;
width: 460px;
}
}
.futer{
width: 100%;
height: 60px;
position: absolute;
bottom: 1px;
}
}
......
This diff is collapsed.
This diff is collapsed.
......@@ -28,7 +28,7 @@
<Filed :span="12" :name="l('efficiencyValue')">{{entity.efficiencyValue}}</Filed>
<Filed :span="12" :name="l('singleOut')">{{entity.singleOut}}</Filed>
<Filed :span="24" :name="l('taskContent')" >
<div v-html="entity.taskContent" class="html"></div>
<div v-html="entity.taskContent" class="tohtml"></div>
</Filed>
</Row>
</div>
......
......@@ -3,7 +3,7 @@
<Row>
<Filed :span="12" :name="l('stepSeq')">{{entity.stepSeq}}</Filed>
<Filed :span="12" :name="l('name')">{{entity.name}}</Filed>
<Filed :span="24" :name="l('stepContent')"><div v-html="entity.stepContent" class="html"></div></Filed>
<Filed :span="24" :name="l('stepContent')"><div v-html="entity.stepContent" class="tohtml"></div></Filed>
<Filed :span="12" :name="l('creationTime')">{{entity.creationTime}}</Filed>
<Filed :span="12" :name="l('creatorUserId')"><User :value="entity.creatorUserId"></User></Filed>
</Row>
......
......@@ -17,10 +17,10 @@
<!-- <Filed :span="12" :name="l('handlingOpinionsId')">{{entity.handlingOpinionsId}}</Filed> -->
<Filed :span="12" :name="l('handlingOpinions')">{{entity.handlingOpinions}}</Filed>
<Filed :span="24" :name="l('beforeChangeContent')">
<div v-html="entity.beforeChangeContent"></div>
<div v-html="entity.beforeChangeContent" class="tohtml"></div>
</Filed>
<Filed :span="24" :name="l('afterChangeContent')">
<div v-html="entity.afterChangeContent"></div>
<div v-html="entity.afterChangeContent" class="tohtml"></div>
</Filed>
<Filed :span="12" :name="l('changeorderCode')">{{entity.changeorderCode}}</Filed>
<Filed :span="24" :name="l('changeReason')">{{entity.changeReason}}</Filed>
......
......@@ -168,7 +168,7 @@
<td class="tl">{{item5.taskseq}}</td>
<td class="tl">{{item5.name}}</td>
<td class="tl">
<div v-html="item5.task_content" class="html"></div>
<div v-html="item5.task_content" class="tohtml"></div>
</td>
<td class="tl">{{item5.operator}}</td>
<td class="tl">{{item5.proofreader}}</td>
......@@ -177,7 +177,7 @@
<td class="tl">{{item6.taskseq}}</td>
<td class="tl">{{item6.name}}</td>
<td class="tl">
<div v-html="item6.task_content" class="html"></div>
<div v-html="item6.task_content" class="tohtml"></div>
</td>
<td class="tl">{{item6.operator}}</td>
<td class="tl">{{item6.proofreader}}</td>
......@@ -347,5 +347,6 @@ export default {
position: relative;
border: 0px solid #eee;
}
</style>
<template>
<div class="product-mix">
<Layout>
<Sider width="300">
<!-- <h4>产品列表</h4> -->
<div class="p-list">
<!-- <Input search enter-button placeholder="请输入产品名称" /> -->
<ProductTree @on-hide="onHide" @on-select="productSearch" />
</div>
</Sider>
<Content>
<Product :parent="parent" />
</Content>
</Layout>
</div>
</template>
<script>
import ProductTree from "./productTree";
import Product from "./product";
export default {
components: {
ProductTree,
Product
},
data() {
return {
parent: {
id: null,
parentName: "",
ids: ""
}
};
},
methods: {
productSearch(id, item, ids) {
this.parent.parentName = item.title;
this.parent.id = id;
this.parent.ids = ids;
// let where = { productId: { op: "In", value: ids } };
// this.$refs.grid.reload(where);
},
onHide() {
// this.$Message.info("收起左侧树")
this.showMenu = false;
}
}
};
</script>
<style lang="less" >
.product-mix {
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);
h4 {
height: 30px;
line-height: 30px;
background: #eee;
padding-left: 10px;
}
.p-list {
padding: 10px;
height: 85vh;
overflow: auto;
}
}
.ivu-layout-content {
margin-left: 5px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);
height: 88vh;
overflow: auto;
padding: 10px;
}
}
</style>
\ No newline at end of file
<template>
<Layout>
<Sider width="300">
<div class="add-list">
<img :src="img" width="100%" height="100%" />
</div>
</Sider>
<Content>
<Form ref="form" :model="entity" :rules="rules" :label-width="120">
<Row>
<Col :span="12">
<FormItem label="上级所属" prop="parentName">
<!-- <Input v-model="entity.parentName" disabled></Input> -->
<productSelect1 v-model="entity.levelId" @on-change="proChange"/>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('productCode')" prop="productCode">
<Input v-model="entity.productCode"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('mmcode')" prop="mmcode">
<Input v-model="entity.mmcode"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('drawingNo')" prop="drawingNo">
<Input v-model="entity.drawingNo"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('name')" prop="name">
<Input v-model="entity.name"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('madeCompany')" prop="madeCompany">
<Input v-model="entity.madeCompany"></Input>
</FormItem>
</Col>
<!-- <Col :span="24">
<FormItem :label="l('remark')" prop="remark">
<Input v-model="entity.remark"></Input>
</FormItem>
</Col>-->
<Col :span="24">
<FormItem :label="l('productUrlList')" prop="productUrlList">
<!-- <InputFile v-model="entity.productUrl"></InputFile> -->
<files ref="refFile" :parms="parms" fileFormat :Photos="true" @clickItem="clickData" />
</FormItem>
</Col>
<!-- <Col :span="24">
<FormItem :label="l('productUrlList')" prop="productUrlList">-->
<!-- <Input v-model="entity.productUrlList" type="textarea" :rows="5"></Input> -->
<!-- <filesList v-model="entity.productUrlList"></filesList>
</FormItem>
</Col>-->
</Row>
<FormItem>
<Button type="primary" @click="handleSubmit" :disabled="disabled">保存</Button>
<Button @click="handleClose" class="ml20">取消</Button>
</FormItem>
</Form>
</Content>
</Layout>
</template>
<script>
import Api from "./api";
export default {
name: "Add",
data() {
return {
disabled: false,
entity: {
mmcode: "",
drawingNo: "",
name: "",
productCode: "",
// status: null,
remark: "",
madeCompany: "",
extend: "",
productUrl: "",
productUrlList: "",
levelId: null,
parentName: this.parents.parentName
},
rules: {
name: [{ required: true, message: "必填", trigger: "blur" }]
},
parms: {
app: "technology",
eid: null,
name: "",
field: ""
},
img: ""
};
},
props: {
v: Object,
eid: Number,
parents: {
parentName: String,
parentId: Number
}
},
mounted() {
if (this.eid > 0) {
this.load(this.eid);
}
this.parms.eid = this.$u.guid();
this.$refs.refFile.intFiles();
},
methods: {
clickData(data) {
this.img = data;
},
handleSubmit() {
this.$refs.form.validate(v => {
if (v) {
this.disabled = true;
if (this.$refs.refFile.nameList.length > 0) {
this.entity.productUrlList = this.parms.eid;
this.entity.productUrl = this.img;
} else {
this.entity.productUrlList = "";
}
this.entity.levelId = this.parents.parentId;
Api.create(this.entity)
.then(r => {
this.disabled = false;
if (r.success) {
this.$Message.success("保存成功");
this.$emit("on-ok");
} else {
this.$Message.error("保存失败");
}
})
.catch(err => {
this.disabled = false;
this.$Message.error("保存失败");
console.warn(err);
});
}
});
},
handleClose() {
this.$emit("on-close");
},
load(v) {
Api.get({ id: v }).then(r => {
this.entity = r.result;
this.entity.id = 0;
});
},
proChange(items) {
this.entity.levelId = items.productId;
},
l(key) {
key = "product_info" + "." + key;
return this.$t(key);
}
},
watch: {
v() {
this.entity = this.$u.clone(this.v);
},
eid(v) {
if (v > 0) {
this.load(v);
}
}
}
};
</script>
<style lang="less">
.ivu-layout-sider {
background: rgba(255, 255, 255, 1);
margin-right: 10px;
box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);
.add-list {
width: 100%;
height: 300px;
overflow: hidden;
}
}
</style>
\ No newline at end of file
import Api from '@/plugins/request'
export default {
index:`${technologyUrl}productinfo/paged`,
paged(params){
return Api.post(`${technologyUrl}productinfo/paged`,params);
},
get(params){
return Api.get(`${technologyUrl}productinfo/get`,params);
},
create(params){
return Api.post(`${technologyUrl}productinfo/create`,params);
},
update(params){
return Api.post(`${technologyUrl}productinfo/update`,params);
},
delete(id) {
return Api.delete(`${technologyUrl}productinfo/delete`,{params:{id:id}});
},
deletes(params) {
return Api.post(`${technologyUrl}productinfo/batchdelete`,params);
}
}
\ No newline at end of file
<template>
<div class="detail">
<Row>
<Filed :span="12" :name="l('mmcode')">{{entity.mmcode}}</Filed>
<Filed :span="12" :name="l('drawingNo')">{{entity.drawingNo}}</Filed>
<Filed :span="12" :name="l('name')">{{entity.name}}</Filed>
<!-- <Filed :span="12" :name="l('productCode')">{{entity.productCode}}</Filed> -->
<!-- <Filed :span="12" :name="l('status')">{{entity.status}}</Filed> -->
<!-- <Filed :span="24" :name="l('remark')">{{entity.remark}}</Filed> -->
<Filed :span="12" :name="l('madeCompany')">{{entity.madeCompany}}</Filed>
<!-- <Filed :span="12" :name="l('extend')">{{entity.extend}}</Filed> -->
<Filed :span="24" :name="l('productUrl')">{{entity.productUrl}}</Filed>
<Filed :span="24" :name="l('productUrlList')">{{entity.productUrlList}}</Filed>
</Row>
</div>
</template>
<script>
import Api from "./api";
export default {
name: "Add",
data() {
return {
entity: {},
rules: {
name: [{ required: true, message: "必填", trigger: "blur" }],
code: [{ required: true, message: "必填", trigger: "blur" }]
}
};
},
props: {
eid: Number
},
mounted() {
if (this.eid > 0) {
this.load(this.eid);
}
},
methods: {
load(v) {
Api.get({ id: v }).then(r => {
this.entity = r.result;
this.$emit("on-load");
});
},
handleClose() {
this.$emit("on-close");
},
l(key) {
key = "product_info" + "." + key;
return this.$t(key);
}
},
watch: {
eid(v) {
if (v > 0) {
this.load(v);
}
}
}
};
</script>
\ No newline at end of file
<template>
<Form ref="form" :model="entity" :rules="rules" :label-width="120">
<Row>
<Col :span="12">
<FormItem :label="l('mmcode')" prop="mmcode">
<Input v-model="entity.mmcode"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('drawingNo')" prop="drawingNo">
<Input v-model="entity.drawingNo"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('name')" prop="name">
<Input v-model="entity.name"></Input>
</FormItem>
</Col>
<Col :span="12">
<FormItem :label="l('madeCompany')" prop="madeCompany">
<Input v-model="entity.madeCompany"></Input>
</FormItem>
</Col>
<Col :span="24">
<FormItem :label="l('productUrl')" prop="productUrl">
<files ref="refFile" :parms="parms" fileFormat :Photos="true" @clickItem="clickData" />
</FormItem>
</Col>
</Row>
<FormItem>
<Button type="primary" @click="handleSubmit" :disabled="disabled">保存</Button>
<Button @click="handleClose" class="ml20">取消</Button>
</FormItem>
</Form>
</template>
<script>
import Api from "./api";
export default {
name: "Edit",
data() {
return {
disabled: false,
entity: {},
rules: {
name: [{ required: true, message: "必填", trigger: "blur" }]
}
};
},
props: {
eid: Number
},
mounted() {
if (this.eid > 0) {
this.load(this.eid);
}
},
methods: {
load(v) {
Api.get({ id: v }).then(r => {
this.entity = r.result;
});
},
handleSubmit() {
this.$refs.form.validate(v => {
if (v) {
this.disabled = true;
Api.update(this.entity)
.then(r => {
this.disabled = false;
if (r.success) {
this.$Message.success("保存成功");
this.$emit("on-ok");
} else {
this.$Message.error("保存失败");
}
})
.catch(err => {
this.disabled = false;
this.$Message.error("保存失败");
console.warn(err);
});
}
});
},
handleClose() {
this.$emit("on-close");
},
l(key) {
key = "product_info" + "." + key;
return this.$t(key);
}
},
watch: {
eid(v) {
if (v != 0) {
this.load(v);
}
}
}
};
</script>
\ No newline at end of file
<template>
<div class="product-m">
<DataGrid
:columns="columns"
ref="grid"
:action="action"
type="card"
:high="false"
:span="6"
:lazy="true"
>
<template slot="easySearch">
<Form ref="formInline" :model="easySearch" inline>
<FormItem prop="keys">
<Input placeholder="请输入物料编号/名称" v-model="easySearch.keys.value" />
</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>
<template slot="card" slot-scope="{row}">
<div class="body-card">
<Row class="title-i">
<Col :span="12">名称:{{row.name}}</Col>
<Col :span="12" class="btn-click">物料编号:{{row.mmcode}}</Col>
</Row>
<Row class="row-down">
<Col span="7">
<div class="img-i">图片</div>
</Col>
<Col span="17" class="c">
<div>产品分类:{{row.productClass}}</div>
<div>图号:{{row.drawingNo}}</div>
<div>主制单位:{{row.madeCompany}}</div>
<p class="a-icon">
<a @click="edit(row.id)">
<Icon type="md-create" />编辑
</a>&nbsp;
<a @click="remove(row.id)">
<Icon type="ios-trash" />删除
</a>&nbsp;
<a @click="view(row.id)">
<Icon type="md-document" />详情
</a>
</p>
</Col>
</Row>
</div>
</template>
</DataGrid>
<Modal v-model="modal" :title="title" width="1200" footer-hide>
<component :is="detail" :eid="curId" @on-close="cancel" @on-ok="ok" :parents="parents" />
</Modal>
</div>
</template>
<script>
import Api from "./api";
import Search from "./search";
export default {
name: "list",
components: {
Search
},
head: {
title: "",
author: "henq",
description: "product_info 5/20/2020 3:13:51 PM"
},
props: {
parent: {
id: Number,
parentName: String,
ids: String
}
},
data() {
return {
action: Api.index,
easySearch: {
keys: { op: "mmcode,name,productCode", value: null }
},
modal: false,
title: "新增",
detail: null,
curId: 0,
columns: [
{
key: "id",
title: this.$t("id"),
hide: true,
align: "left",
high: true
}
],
parents: {
parentId: null,
parentName: ""
}
};
},
mounted() {
this.$refs.grid.reload();
console.log(this);
},
async fetch({ store, params }) {
await store.dispatch("loadDictionary"); // 加载数据字典
},
methods: {
ok() {
this.$refs.grid.load();
this.modal = false;
this.curId = 0;
},
search() {
this.$refs.grid.reload(this.easySearch);
},
add() {
this.curId = 0;
this.title = "新增";
this.detail = () => import("./add");
this.modal = true;
this.parents.parentId = this.parent.id;
this.parents.parentName = this.parent.parentName;
},
copy(id) {
this.curId = id;
this.title = "克隆";
this.detail = () => import("./add");
this.modal = true;
},
view(id) {
this.curId = id;
this.title = "详情";
this.detail = () => import("./detail");
this.modal = true;
},
edit(id) {
this.curId = id;
this.title = "编辑";
this.detail = () => import("./edit");
this.modal = true;
},
remove(id) {
Api.delete(id).then(r => {
if (r.success) {
this.$refs.grid.load();
this.$Message.success("删除成功");
}
});
},
cancel() {
this.curId = 0;
this.modal = false;
},
l(key) {
/*
product_info:{
mmcode:'物料编号',
drawingNo:'图号',
name:'名称',
productCode:'',
status:'',
remark:'',
madeCompany:'主承制单位',
extend:'',
productUrl:'产品图像url',
productUrlList:'产品图象列表',
}
*/
let vkey = "product_info" + "." + key;
return this.$t(vkey) || key;
}
},
watch: {
"parent.id"(v) {
if (v) {
let data = { levelId: { op: "In", value: this.parent.ids } };
this.$refs.grid.reload(data);
}
}
}
};
</script>
<style lang="less">
.product-m {
.body-card {
border: 1px solid rgba(38, 128, 235, 1);
margin: 10px;
border-radius: 4px;
.title-i {
border-bottom: 1px solid #2680eb;
padding: 0 10px;
height: 35px;
line-height: 35px;
background: rgba(38, 128, 235, 0.2);
color: #2680eb;
.btn-click {
text-align: right;
}
}
.row-down {
padding: 10px;
.img-i {
background: #eee;
height: 90px;
margin-right: 15px;
}
.c div {
margin-bottom: 8px;
}
.a-icon {
text-align: right;
margin-bottom: -5px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<Form ref="form" :model="condition" :label-width="90">
<Row>
<Col :span="12" :v-if="condition.id.show"><FormItem :label="$t('id')" prop="id"> <Input v-model="condition.id.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.creationTime.show"><FormItem :label="$t('creationTime')" prop="creationTime"> <DatePicker type="daterange" v-model="condition.creationTime.value"></DatePicker>
</FormItem></Col>
<Col :span="12" :v-if="condition.creatorUserId.show"><FormItem :label="$t('creatorUserId')" prop="creatorUserId"> <Input v-model="condition.creatorUserId.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.lastModificationTime.show"><FormItem :label="$t('lastModificationTime')" prop="lastModificationTime"> <DatePicker type="daterange" v-model="condition.lastModificationTime.value"></DatePicker>
</FormItem></Col>
<Col :span="12" :v-if="condition.lastModifierUserId.show"><FormItem :label="$t('lastModifierUserId')" prop="lastModifierUserId"> <Input v-model="condition.lastModifierUserId.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.mmcode.show"><FormItem :label="l('mmcode')" prop="mmcode"> <Input v-model="condition.mmcode.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.drawingNo.show"><FormItem :label="l('drawingNo')" prop="drawingNo"> <Input v-model="condition.drawingNo.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.name.show"><FormItem :label="l('name')" prop="name"> <Input v-model="condition.name.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.productCode.show"><FormItem :label="l('productCode')" prop="productCode"> <Input v-model="condition.productCode.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.status.show"><FormItem :label="l('status')" prop="status"> <Input v-model="condition.status.value"> </Input>
</FormItem></Col>
<Col :span="24" :v-if="condition.remark.show"><FormItem :label="l('remark')" prop="remark"> <Input v-model="condition.remark.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.madeCompany.show"><FormItem :label="l('madeCompany')" prop="madeCompany"> <Input v-model="condition.madeCompany.value"> </Input>
</FormItem></Col>
<Col :span="24" :v-if="condition.productUrl.show"><FormItem :label="l('productUrl')" prop="productUrl"> <Input v-model="condition.productUrl.value"> </Input>
</FormItem></Col>
<Col :span="24" :v-if="condition.productUrlList.show"><FormItem :label="l('productUrlList')" prop="productUrlList"> <Input v-model="condition.productUrlList.value"> </Input>
</FormItem></Col>
</Row>
</Form>
</template>
<script>
import Api from './api'
export default {
name: 'Add',
data() {
return {
condition: {
id:{op:"Equal",value:null,show:true},
creationTime:{op:"Range",value:null,show:true},
creatorUserId:{op:"Equal",value:null,show:true},
lastModificationTime:{op:"Range",value:null,show:true},
lastModifierUserId:{op:"Equal",value:null,show:true},
mmcode:{op:"Equal",value:null,show:true},
drawingNo:{op:"Equal",value:null,show:true},
name:{op:"Equal",value:null,show:true},
productCode:{op:"Equal",value:null,show:true},
status:{op:"Equal",value:null,show:true},
remark:{op:"Equal",value:null,show:true},
madeCompany:{op:"Equal",value:null,show:true},
productUrl:{op:"Equal",value:null,show:true},
productUrlList:{op:"Equal",value:null,show:true},
},
}
},
methods: {
handleClose() {
this.$emit('on-close')
},
l(key) {
key = "product_info" + "." + key;
return this.$t(key)
}
}
}
</script>
\ No newline at end of file
<template>
<Form ref="form" :model="entity" :rules="rules" :label-width="90">
<Row>
<Col :span="12"><FormItem :label="l('name')" prop="name"> <Input v-model="entity.name"> </Input>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('upId')" prop="upId"> <InputNumber v-model="entity.upId"></InputNumber>
</FormItem></Col>
</Row>
<FormItem>
<Button type="primary" @click="handleSubmit" :disabled="disabled">保存</Button>
<Button @click="handleClose" class="ml20">取消</Button>
</FormItem>
</Form>
</template>
<script>
import Api from './api'
export default {
name: 'Add',
data() {
return {
disabled: false,
entity: {name: "",
upId: null},
rules: {
name: [{ required: true, message: '必填', trigger: 'blur' }]
}
}
},
props: {
v: Object,
eid: Number
},
mounted() {
if (this.eid > 0) {
this.load(this.eid);
}
},
methods: {
handleSubmit() {
this.$refs.form.validate((v) => {
if (v) {
this.disabled = true;
Api.create(this.entity).then((r) => {
this.disabled = false;
if (r.success) {
this.$Message.success('保存成功')
this.$emit('on-ok')
} else {
this.$Message.error('保存失败')
}
}).catch(err => {
this.disabled = false;
this.$Message.error('保存失败')
console.warn(err)
})
}
})
},
handleClose() {
this.$emit('on-close')
},
load(v) {
Api.get({ id: v }).then(r => {
this.entity = r.result;
this.entity.id = 0;
});
},
l(key) {
key = "product_level" + "." + key;
return this.$t(key)
}
},
watch: {
v() {
this.entity = this.$u.clone(this.v)
},
eid(v) {
if (v > 0) {
this.load(v);
}
}
}
}
</script>
\ No newline at end of file
import Api from '@/plugins/request'
export default {
index:`${technologyUrl}productlevel/getleveltree`,
getleveltree(params){
return Api.get(`${technologyUrl}productlevel/getleveltree`,params);
},
get(params){
return Api.get(`${technologyUrl}productlevel/get`,params);
},
create(params){
return Api.post(`${technologyUrl}productlevel/create`,params);
},
update(params){
return Api.post(`${technologyUrl}productlevel/update`,params);
},
delete(id) {
return Api.delete(`${technologyUrl}productlevel/delete`,{params:{id:id}});
},
deletes(params) {
return Api.post(`${technologyUrl}productlevel/batchdelete`,params);
}
}
\ No newline at end of file
<template>
<div class="detail">
<Row>
<Filed :span="12" :name="l('name')">{{entity.name}}</Filed>
<Filed :span="12" :name="l('upId')">{{entity.upId}}</Filed>
</Row>
</div>
</template>
<script>
import Api from './api'
export default {
name: 'Add',
data() {
return {
entity: {},
rules: {
name: [{ required: true, message: '必填', trigger: 'blur' }],
code: [{ required: true, message: '必填', trigger: 'blur' }]
}
}
},
props: {
eid: Number
},
mounted() {
if (this.eid > 0) {
this.load(this.eid);
}
},
methods: {
load(v) {
Api.get({ id: v }).then(r => {
this.entity = r.result;
this.$emit('on-load')
})
},
handleClose() {
this.$emit('on-close')
},
l(key) {
key = "product_level" + "." + key;
return this.$t(key)
}
},
watch: {
eid(v) {
if (v > 0) {
this.load(v);
}
}
}
}
</script>
\ No newline at end of file
<template>
<Form ref="form" :model="entity" :rules="rules" :label-width="90">
<Row>
<Col :span="12"><FormItem :label="l('name')" prop="name"> <Input v-model="entity.name"> </Input>
</FormItem></Col>
<Col :span="12"><FormItem :label="l('upId')" prop="upId"> <InputNumber v-model="entity.upId"></InputNumber>
</FormItem></Col>
</Row>
<FormItem>
<Button type="primary" @click="handleSubmit" :disabled="disabled">保存</Button>
<Button @click="handleClose" class="ml20">取消</Button>
</FormItem>
</Form>
</template>
<script>
import Api from './api'
export default {
name: 'Edit',
data() {
return {
disabled: false,
entity: {
},
rules: {
name: [{ required: true, message: '必填', trigger: 'blur' }]
}
}
},
props: {
eid: Number
},
mounted() {
if (this.eid > 0) {
this.load(this.eid);
}
},
methods: {
load(v) {
Api.get({ id: v }).then(r => {
this.entity = r.result;
})
},
handleSubmit() {
this.$refs.form.validate((v) => {
if (v) {
this.disabled = true;
Api.update(this.entity).then((r) => {
this.disabled = false;
if (r.success) {
this.$Message.success('保存成功')
this.$emit('on-ok')
} else {
this.$Message.error('保存失败')
}
}).catch(err => {
this.disabled = false;
this.$Message.error('保存失败')
console.warn(err)
})
}
})
},
handleClose() {
this.$emit('on-close')
},
l(key) {
key = "product_level" + "." + key;
return this.$t(key)
}
},
watch: {
eid(v) {
if (v != 0) {
this.load(v);
}
}
}
}
</script>
\ No newline at end of file
<template>
<div class="flex fd tree-menu">
<h3>
产品列表
<div class="fr mr10 mt10">
<ButtonGroup class="fr" size="small">
<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"></Tree>
</div>
</div>
</div>
</template>
<script>
import Api from "./api";
export default {
name: "",
data() {
return {
keys: "",
expand: false,
list: []
};
},
created() {
this.loadTree();
},
methods: {
loadTree() {
Api.getleveltree().then(r => {
setTree(r.result);
function setTree(data) {
data.map(u => {
u.title = u.name;
u.value = u.id;
if (u.children) {
setTree(u.children);
}
});
}
var data = r.result;
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.$emit("on-hide");
}
},
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">
.tree-menu {
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:0;
overflow: auto;
padding-left: 10px;
}
.tree {
height: calc(100vh - 215px);
overflow: auto;
}
}
</style>
\ No newline at end of file
<template>
<Form ref="form" :model="condition" :label-width="90">
<Row>
<Col :span="12" :v-if="condition.id.show"><FormItem :label="$t('id')" prop="id"> <Input v-model="condition.id.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.creationTime.show"><FormItem :label="$t('creationTime')" prop="creationTime"> <DatePicker type="daterange" v-model="condition.creationTime.value"></DatePicker>
</FormItem></Col>
<Col :span="12" :v-if="condition.creatorUserId.show"><FormItem :label="$t('creatorUserId')" prop="creatorUserId"> <Input v-model="condition.creatorUserId.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.lastModificationTime.show"><FormItem :label="$t('lastModificationTime')" prop="lastModificationTime"> <DatePicker type="daterange" v-model="condition.lastModificationTime.value"></DatePicker>
</FormItem></Col>
<Col :span="12" :v-if="condition.lastModifierUserId.show"><FormItem :label="$t('lastModifierUserId')" prop="lastModifierUserId"> <Input v-model="condition.lastModifierUserId.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.name.show"><FormItem :label="l('name')" prop="name"> <Input v-model="condition.name.value"> </Input>
</FormItem></Col>
<Col :span="12" :v-if="condition.upId.show"><FormItem :label="l('upId')" prop="upId"> <Input v-model="condition.upId.value"> </Input>
</FormItem></Col>
</Row>
</Form>
</template>
<script>
import Api from './api'
export default {
name: 'Add',
data() {
return {
condition: {
id:{op:"Equal",value:null,show:true},
creationTime:{op:"Range",value:null,show:true},
creatorUserId:{op:"Equal",value:null,show:true},
lastModificationTime:{op:"Range",value:null,show:true},
lastModifierUserId:{op:"Equal",value:null,show:true},
name:{op:"Equal",value:null,show:true},
upId:{op:"Equal",value:null,show:true},
},
}
},
methods: {
handleClose() {
this.$emit('on-close')
},
l(key) {
key = "product_level" + "." + key;
return this.$t(key)
}
}
}
</script>
\ No newline at end of file
......@@ -43,6 +43,7 @@ import User from '@/components/page/user.vue'
import op from '@/components/page/opration.vue'
import ProductNumberSelect from '@/components/page/productNumberSelect.vue'
import ProductSelect from '@/components/page/productSelect.vue'
import ProductSelect1 from '@/components/page/productSelect1.vue'
import DTSpan from '@/components/page/dtSpan.vue'
import DTSearch from '@/components/page/dtSearch.vue'
import InputTime from '@/components/page/inputTime.vue'
......@@ -96,6 +97,7 @@ Vue.component("op", op) //DepartmentSelect
Vue.component("DepartmentSelect", DepartmentSelect)
Vue.component("ProductNumberSelect", ProductNumberSelect)
Vue.component("ProductSelect", ProductSelect)
Vue.component("ProductSelect1", ProductSelect1)
Vue.component("DTSpan", DTSpan)
Vue.component("DTSearch", DTSearch)
Vue.component("InputTime", InputTime)
......
......@@ -8,6 +8,29 @@ html body {
#__layout {
height: 100%;
}
ul,
li {
list-style: none;
}
div::-webkit-scrollbar {
width: 10px;
height: 10px;
/**/
}
div::-webkit-scrollbar-track {
background: #efefef;
border-radius: 2px;
}
div::-webkit-scrollbar-thumb {
background: rgba(38, 128, 235, 0.5);
border-radius: 10px;
}
div::-webkit-scrollbar-thumb:hover {
background: rgba(38, 128, 235, 0.8);
}
div::-webkit-scrollbar-corner {
background: #2680eb;
}
/*flex*/
.flex {
display: flex;
......@@ -15,6 +38,9 @@ html body {
.fc-m {
justify-content: center;
}
.fa-m {
align-items: center;
}
.fc-e {
justify-content: flex-end;
}
......@@ -30,6 +56,9 @@ html body {
.fg {
flex-grow: 1;
}
.fs {
flex-shrink: 0;
}
.fg2 {
flex-grow: 2;
}
......@@ -615,13 +644,15 @@ textarea::-webkit-input-placeholder {
background: #f5f6fa;
}
.tableCommon .tableCommon tr th {
line-height: 30px;
line-height: 24px;
font-size: 14px;
background: #EEEDF0;
}
.tableCommon .tableCommon tr td {
border: none;
border-bottom: 1px solid #E4E6ED;
padding: 0 2px;
background: #D5E6FB;
background: #F6F8FB;
}
.tableCommon tr td {
line-height: 25px;
......@@ -707,8 +738,20 @@ html [type=button] {
font-weight: bold;
}
.action a {
margin: 0 5px;
color: #1890FF;
background: transparent;
}
.action a span {
padding: 4px;
}
.action a i {
font-size: 16px;
padding: 4px;
border-radius: 3px;
}
.action a i:hover {
background: #1890FF;
color: #fff;
}
.action a.detail {
color: #1890FF;
......@@ -716,19 +759,18 @@ html [type=button] {
.action a.add {
color: #249E91;
}
.action a.add:hover {
color: #27AB9D;
}
.action a.edit {
color: #0693d4;
}
.action a.edit:hover {
color: #35BD90;
}
.action a.remove,
.action a.delete {
color: #FF7A8B;
}
.action a.remove i:hover,
.action a.delete i:hover {
background: #FF7A8B;
color: #fff;
}
.action a.delete {
color: #FF7A8B;
}
......@@ -752,14 +794,6 @@ html [type=button] {
font-weight: bold;
font-size: 18px;
}
.action a.icon:hover {
background: #27AB9D;
color: #fff;
}
.action a.icon:active {
background: #229185;
color: #fff;
}
.icon_box a.icon {
display: inline-grid;
width: 28px;
......@@ -977,3 +1011,53 @@ html [type=button] {
.detail .ivu-row .filed-col p .html p {
margin: 0 10px 0 0;
}
.con_bord {
margin: 10px 20px;
}
.lay100 {
height: calc(100vh - 105px);
background-color: #f5f6fa;
background: #f5f6fa;
}
.lay100 .con {
padding: 5px 5px 0px 10px;
}
.lay100 .con_bord {
margin: 10px 20px;
box-shadow: #c7c7c7 1px 2px 7px 3px;
}
.menu_side {
background: #fff !important;
margin: 5px 0 0 0!important;
border: 1px solid #dcdee2 !important;
}
.show_menu {
width: 30px;
height: 30px;
position: fixed;
top: 100px;
left: 0;
z-index: 9;
}
.show_menu .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;
}
.show_menu .menu_play:hover {
background-color: #2d8cf0;
color: white;
}
.details .ivu-input-number {
width: 100%;
}
.tohtml img {
max-width: 95%;
}
......@@ -1559,4 +1559,7 @@ img.imglogo {
height: 150px;
padding: 5px;
border-bottom: 2px solid #333;
}
.tohtml img{
max-width: 95%;
}
\ No newline at end of file
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