Commit 621b6ac4 authored by 仇晓婷's avatar 仇晓婷

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

parents 7d16e4b5 c3771843
......@@ -992,8 +992,15 @@ textarea::-webkit-input-placeholder {
.tableCommon tr td .ivu-table-cell {
padding: 0 2px;
}
.cellblock{
display:block;
line-height:30px;
padding:5px 10px;
background:#f5f6fa;
border-bottom:solid 1px #ccc;
border-left:solid 1px #ccc;
border-right:solid 1px #ccc
}
.cellInfoTitle {
padding: 0 10px;
text-align: right;
......
<template>
<div class="treeTbale">
<div class="table-content">
<div class="table-tools">
<div class="table-search">
<slot name="easySearch"></slot>
......@@ -11,126 +11,216 @@
</Button>-->
</div>
</div>
<table>
<thead>
<tr>
<th
v-for="(column, index) in columns"
:key="index"
:style="tdStyle(column)"
>
<label v-if="column.type === 'selection'">
<Checkbox
v-model="checkAll"
@on-change="checked"
:indeterminate="indeterminate"
></Checkbox>
</label>
<label v-else>
{{ renderHeader(column, index) }}
<span class="ivu-table-sort" v-if="column.sortable">
<div class="table-main" ref="main">
<div>
<table class="table-head">
<thead>
<tr>
<th
v-for="(column, index) in columns"
:key="index"
:style="tdStyle(column)"
>
<label v-if="column.type === 'selection'">
<Checkbox
v-model="checkAll"
@on-change="checked"
:indeterminate="indeterminate"
></Checkbox>
</label>
<label v-else>
{{ renderHeader(column, index) }}
<span class="ivu-table-sort" v-if="column.sortable">
<Icon
type="arrow-up-b"
:class="{ on: column._sortType === 'asc' }"
@click.native="handleSort(index, 'asc')"
/>
<Icon
type="arrow-down-b"
:class="{ on: column._sortType === 'desc' }"
@click.native="handleSort(index, 'desc')"
/>
</span>
</label>
</th>
</tr>
</thead>
</table>
</div>
<div class="table-body">
<table>
<tbody>
<tr
v-for="(item, index) in trs"
:key="item.id"
class="treetr"
:id="'tr' + index"
v-show="show(item)"
:draggable="drag && !item._drag"
@dragstart="dragstart($event, index, item)"
@drop="dragdrop($event, index, item)"
@dragenter="dragenter($event, index, item)"
@dragover="dragover($event, index, item)"
@dragleave="dragleave($event, index, item)"
>
<!-- -->
<td
v-for="(column, snum) in columns"
:key="column.key"
:style="tdStyle(column)"
>
<!-- 多选 -->
<label
v-if="column.type === 'selection'"
@click="rowChecked(item, index, $event)"
>
<Checkbox
v-model="item._checked"
:indeterminate="item._indeterminate"
></Checkbox>
</label>
<Icon
type="arrow-up-b"
:class="{ on: column._sortType === 'asc' }"
@click.native="handleSort(index, 'asc')"
v-if="column.type === 'drag'"
type="md-more"
class="drag"
/>
<Icon
type="arrow-down-b"
:class="{ on: column._sortType === 'desc' }"
@click.native="handleSort(index, 'desc')"
<DTSpan
v-if="column.type == 'date'"
:value="item[column.key]"
/>
</span>
</label>
</th>
</tr>
</thead>
<tbody>
<tr
v-for="(item, index) in trs"
:key="item.id"
class="treetr"
:id="'tr' + index"
v-show="show(item)"
:draggable="drag && !item._drag"
@dragstart="dragstart($event, index, item)"
@drop="dragdrop($event, index, item)"
@dragenter="dragenter($event, index, item)"
@dragover="dragover($event, index, item)"
@dragleave="dragleave($event, index, item)"
>
<!-- -->
<td
v-for="(column, snum) in columns"
:key="column.key"
:style="tdStyle(column)"
>
<!-- 多选 -->
<label
v-if="column.type === 'selection'"
@click="rowChecked(item, index, $event)"
>
<Checkbox
v-model="item._checked"
:indeterminate="item._indeterminate"
></Checkbox>
</label>
<div v-if="column.type == 'user'">
<User :value="item[column.key]" />
</div>
<div
v-if="
column.type == 'users' &&
item[column.key] &&
item[column.key].length > 0
"
>
<User
v-for="li in item[column.key]"
:value="li"
:key="li"
class="ml10"
/>
</div>
<state
v-if="column.code"
:code="column.code"
:value="item[column.key]"
/>
<!-- 树图标 -->
<span @click="toggle(index, item)" v-if="snum == treeColumn()">
<span class="ib" v-width="spaceWidth * item._level"></span>
<a v-if="item._count > 0" class="expand"
><Icon
:type="!item._expanded ? 'ios-add' : 'ios-remove'"
/> </a
><i v-else class="ms-tree-space"></i>
</span>
<!-- 菜单名称、排序、请求地址 -->
<label
v-if="
!column.type &&
!column.code &&
!column.render &&
!column.slot
"
>
{{ renderBody(item, column) }}
</label>
<table-expand
v-if="column.render && !column.type && !column.solt"
:row="item"
:column="column"
:index="snum"
:render="column.render"
></table-expand>
<column-slot
v-if="column.slot"
:row="item"
:column="column"
:index="snum"
></column-slot>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<Icon v-if="column.type === 'drag'" type="md-more" class="drag" />
<DTSpan v-if="column.type == 'date'" :value="item[column.key]" />
<div v-if="column.type == 'user'">
<User :value="item[column.key]" />
</div>
<div
v-if="
column.type == 'users' &&
item[column.key] &&
item[column.key].length > 0
"
>
<User
v-for="li in item[column.key]"
:value="li"
:key="li"
class="ml10"
/>
</div>
<state
v-if="column.code"
:code="column.code"
:value="item[column.key]"
<div class="table-footer">
<slot name="footer"></slot>
<Page
v-if="page"
:total="search.total"
:current="search.page"
class="fr"
show-total
size="small"
show-elevator
show-sizer
:page-size="search.pageSize"
:page-size-opts="pageSizeOpts"
@on-change="pageChange"
@on-page-size-change="pageSizeChange"
/>
</div>
<Modal
v-if="high"
v-model="modalSearch"
title="高级搜索"
draggable
width="800"
ref="search"
>
<slot name="searchForm"></slot>
<div slot="footer">
<Button @click="modalSearch = false" class="mr20">取消</Button>
<Button @click="complexSearch" type="primary" class="mr20">查询</Button>
</div>
</Modal>
<Drawer
title="列设置"
v-if="set"
v-model="config"
:scrollable="true"
placement="left"
:mask="false"
>
<div slot="header">
列设置
<a @click="undoConfig" class="ml50">
<Icon type="md-refresh" title="恢复初始设置" />
</a>
</div>
<ul class="table-columns">
<li
v-for="(li, index) in columnsCur"
:key="index"
v-dragging="{ item: li, list: columnsCur, group: 'li' }"
>
<label @click="columnChange(li, index)" :class="{ dis: li.hide }">
<Icon
:type="li.hide ? 'md-eye-off' : 'md-eye'"
size="16"
class="mr10"
/>
<!-- 树图标 -->
<span @click="toggle(index, item)" v-if="snum == treeColumn()">
<span class="ib" v-width="spaceWidth * item._level"></span>
<a v-if="item._count > 0" class="expand"
><Icon :type="!item._expanded ? 'ios-add' : 'ios-remove'" /> </a
><i v-else class="ms-tree-space"></i>
</span>
<!-- 菜单名称、排序、请求地址 -->
<label
v-if="
!column.type && !column.code && !column.render && !column.slot
"
>
{{ renderBody(item, column) }}
</label>
<table-expand
v-if="column.render && !column.type && !column.solt"
:row="item"
:column="column"
:index="snum"
:render="column.render"
></table-expand>
<column-slot
v-if="column.slot"
:row="item"
:column="column"
:index="snum"
></column-slot>
</td>
</tr>
</tbody>
</table>
<span>{{ li.title }}</span>
</label>
<Icon type="ios-move" class="move" size="18" />
</li>
</ul>
</Drawer>
<FooterToolbar v-if="batch" v-show="footerToolbar" class="ftball">
<div class="tip">已选{{ selectItems.length }}</div>
<slot name="batch"></slot>
<Button @click="cancelBatch">取消</Button>
</FooterToolbar>
</div>
</template>
<script>
......@@ -151,23 +241,66 @@ export default {
return modes.indexOf(v) > -1;
},
},
action: {
//接口地址
type: String,
border: {
//是否显示边框
type: Boolean,
default: true,
},
batch: {
//是否批量操作
type: Boolean,
default: true,
},
format: {
type: Function,
default: null,
},
initsearch: {
type: Function,
default: null,
},
level: {
//展开层级
lazy: {
//懒加载设置,设置为真时候,默认不加载数据。
type: Boolean,
default: false,
},
placeholder: {
type: String,
default: "请输入关键字",
},
height: {
type: Number,
default: 1,
default: 0,
},
query: {
//参数
type: Object,
tool: {
//是否显示工具栏
type: Boolean,
default: true,
},
dataFormater: {
//数据处理函数
type: Function,
easy: {
//是否显示简单搜索
type: Boolean,
default: true,
},
high: {
//是否显示高级搜索
type: Boolean,
default: true,
},
draggable: {
//是否可以拖拽
type: Boolean,
default: false,
},
set: {
//是否显示列设置
type: Boolean,
default: true,
},
page: {
//是否分页
type: Boolean,
default: false,
},
columns: Array,
items: {
......@@ -199,7 +332,24 @@ export default {
type: [String, Number],
default: 0,
},
action: {
//接口地址
type: String,
default: "",
},
conditions: {
//查询条件
type: Object,
default: function () {
return {
keys: {
op: "name",
value: "",
default: true,
},
};
},
},
iconName: false,
drag: {
//拖拽
......@@ -211,6 +361,10 @@ export default {
type: Number,
default: 20,
},
exportTitle: {
type: String,
default: "",
},
},
provide() {
return {
......@@ -221,9 +375,25 @@ export default {
return {
color: "#19be6b",
checkAll: false,
keys: "",
selectItems: [],
modalSearch: false,
footerToolbar: false,
search: {
pageIndex: 1,
pageSize: 20,
sortBy: "id",
isDesc: true,
conditions: [],
},
searchConditions: this.search,
pageSizeOpts: [20, 50, 100],
tableHeight: 0,
firstY: 0,
config: false,
logs: [],
trs: [], // 处理后数据数组
cloneColumns: [], // 处理后的表头数据
columnsCur: [], // 处理后的表头数据
checkGroup: [], // 复选框数组
checks: false, // 全选
tdsWidth: 0, // td总宽
......@@ -234,10 +404,10 @@ export default {
},
computed: {
indeterminate() {
var checkeds=this.trs.filter(u=>{
var checkeds = this.trs.filter((u) => {
return u._checked;
}).length;
return 0<checkeds && checkeds<this.trs.length;
return 0 < checkeds && checkeds < this.trs.length;
},
},
watch: {
......@@ -255,7 +425,7 @@ export default {
data(v) {},
columns: {
handler() {
this.cloneColumns = this.makeColumns();
this.columnsCur = this.makeColumns();
},
deep: true,
},
......@@ -266,7 +436,7 @@ export default {
mounted() {
if (this.items && this.items.length > 0) {
this.trs = this.treeToList(this.items);
this.cloneColumns = this.makeColumns();
this.columnsCur = this.makeColumns();
this.checkGroup = this.renderCheck(this.items);
if (this.checkGroup.length == this.dataLength) {
this.checks = true;
......@@ -276,6 +446,16 @@ export default {
}
},
methods: {
load() {},
complexSearch() {
var search = this.$refs.search.$children.filter((u) => {
return u.condition;
});
if (search) {
var conditions = search[0].condition;
this.reload(conditions);
}
},
slots() {
return this.$scopedSlots;
},
......@@ -349,16 +529,16 @@ export default {
},
// 排序事件
handleSort(index, type) {
this.cloneColumns.forEach((col) => (col._sortType = "normal"));
if (this.cloneColumns[index]._sortType === type) {
this.cloneColumns[index]._sortType = "normal";
this.columnsCur.forEach((col) => (col._sortType = "normal"));
if (this.columnsCur[index]._sortType === type) {
this.columnsCur[index]._sortType = "normal";
} else {
this.cloneColumns[index]._sortType = type;
this.columnsCur[index]._sortType = type;
}
this.$emit(
"on-sort-change",
this.cloneColumns[index].key,
this.cloneColumns[index]._sortType
this.columnsCur[index].key,
this.columnsCur[index]._sortType
);
},
// 点击某一行事件
......@@ -440,29 +620,31 @@ export default {
// 点击check勾选框,判断是否有children节点 如果有就一并勾选
rowChecked(data, index, event) {
var boys = this.getChildrens(data);
this.trs.forEach((u, i) => {
var items = boys.filter((b) => {
return b[this.keyname] == u[this.keyname];
});
if (items.length == 1) {
this.$set(this.trs[i], "_checked", !data._checked);
}
this.trs.forEach((u, i) => {
var items = boys.filter((b) => {
return b[this.keyname] == u[this.keyname];
});
if (items.length == 1) {
this.$set(this.trs[i], "_checked", !data._checked);
}
});
this.checkAll= this.trs.length>this.trs.filter(u=>{
return !u._checked;
}).length
this.checkAll =
this.trs.length >
this.trs.filter((u) => {
return !u._checked;
}).length;
},
getChildrens(data) {
var childrens = [];
var that=this;
var that = this;
getChildren(data);
function getChildren(f) {
that.trs.forEach(u=>{
if(u[that.upname]==f[that.keyname]){
that.trs.forEach((u) => {
if (u[that.upname] == f[that.keyname]) {
childrens.push(u);
getChildren(u);
}
})
});
}
return childrens;
},
......@@ -520,7 +702,7 @@ export default {
let copy = that.$u.clone(u);
copy._count = 0;
copy._level = level;
copy._expanded = copy._expanded || that.level>level;
copy._expanded = copy._expanded || that.level > level;
copy._show = true;
copy._indeterminate = false;
copy._checked = copy._checked || false;
......@@ -554,6 +736,44 @@ export default {
});
return arr;
},
//分页选择
pageChange(page) {
this.search.page = page;
this.search.pageIndex = page;
this.load();
},
pageSizeChange(size) {
this.search.pageSize = size;
this.search.pageIndex = 1;
this.load();
},
columnChange(item, i) {
item.hide = !item.hide;
this.$set(this.columnsCur, item, i);
this.saveUserconfig();
},
selectionChange(items) {
this.$emit("on-selection-change", items);
this.selectItems = items;
this.footerToolbar = items.length > 0;
},
onSelect(rows, row) {
this.$emit("on-change", rows, row);
},
allChange(items) {
this.$emit("all-change", items);
},
undoConfig() {
//列设置恢复初始化
this.columnsCur = this.$u.clone(this.columns);
// this.saveUserconfig();
},
//批量取消
cancelBatch() {
this.footerToolbar = false;
this.$refs.table.selectAll(false);
},
},
};
</script>
......@@ -564,9 +784,12 @@ export default {
@table_line_height: 50px;
@table_hover: #f2f8fe;
@table_border: #accef7;
.treeTbale {
overflow: 0 auto;
width: 100% !important;
.table-content {
position: relative;
height: 100%;
display: flex;
flex-direction: column;
.table-tools {
line-height: 40px;
background: @right-header-bg;
......
......@@ -39,7 +39,7 @@
<Search />
</template>
<template slot="buttons">
<Button type="primary" @click="addModal=true">创建</Button>
<Button type="primary" @click="addModal=true">新增</Button>
</template>
<template slot="batch">
<Button type="primary" class="mr10 ml10" @click="openSendViewModal" v-if="this.wfstatu==1">订单送审</Button>
......
......@@ -33,7 +33,7 @@
</Col>
<Col span="12">
<FormItem label="分解数量" style="width:100%" prop="splitQuantity">
<InputNumber :min="0" v-model="orderForm.splitQuantity" style="width:180px"></InputNumber>
<InputNumber :min="2" :max="orderForm.quantity" v-model="orderForm.splitQuantity" style="width:180px"></InputNumber>
<Button type="primary" @click="addSplitOrder" v-noClick>确定</Button>
</FormItem>
</Col>
......@@ -41,13 +41,16 @@
</Form>
<Table :loading="loading" border :columns="columns1" :data="dataList" class="tableCommon">
<template slot-scope="{ row, index }" slot="slotPlanQ">
<Input type="text" v-model="row.quantity" @on-change="inputOrderCat(row,index)" />
<InputNumber :min="0" :max="amountMax" v-model="row.quantity" @on-change="inputOrderCat(row,index)" @on-focus="inputFocus(row,index)" />
</template>
<template slot-scope="{ row, index }" slot="slotTime">
<DatePicker v-model="row.demandDate" type="daterange" placeholder="请选择日期" style="width:240px" :transfer="true" :options="optionsDate" @on-change="inputOrderCat(row,index)"></DatePicker>
</template>
</Table>
<p v-show="false">剩余数量:{{amount}}</p>
<div class="cellblock">
<p>剩余产品数量:{{amount}}</p>
</div>
</div>
</template>
......@@ -134,6 +137,7 @@ export default {
}]
},
amount: 0,
amountMax: this.amount,
};
},
props: {
......@@ -217,10 +221,9 @@ export default {
splitAmount = Number(splitAmount) + Number(el.quantity)
})
this.amount = this.orderForm.quantity - splitAmount
// setTimeout(() => {
// this.amount = this.orderForm.quantity - splitAmount
// }, 1000);
},
inputFocus(row, index) {
this.amountMax = this.amount + row.quantity
},
getFormatDate(dates) {
const d = new Date(dates);
......
......@@ -7,7 +7,10 @@
<span class="">{{ topInfoShow.name }}</span>&nbsp;&nbsp;&nbsp;&nbsp; 派工数量:
<span class="">{{ topInfoShow.count }}</span>&nbsp;&nbsp;&nbsp;&nbsp; 绩效单件:
<span class="">{{ topInfoShow.performanceHours }}</span>&nbsp;&nbsp;&nbsp;&nbsp; 绩效准结:
<span class="">{{ topInfoShow.performanceWorkingHours }}</span>
<span class="">{{ topInfoShow.performanceWorkingHours }}</span>&nbsp;&nbsp;&nbsp;&nbsp; 工时提交状态:
<span class="">
<state code="orderList.workHourStatus" ref="state" :value=" topInfoShow.subWorkHourStatus" type="text"></state>
</span>
</div>
<div class="gs_top">
<div class="gs_top_box total_time">
......
......@@ -31,13 +31,15 @@
<DropdownMenu slot="list">
<DropdownItem name="saveTemplate">存为模版</DropdownItem>
<DropdownItem name="useTemplate">导入模版</DropdownItem>
<DropdownItem name="down">
<DropdownItem name="down" disabled>
<Icon
type="md-cloud-download"
class="mr10"
/>导出Excel</DropdownItem
>
<DropdownItem name="importExcel"
disabled
><Icon
type="md-cloud-upload"
class="mr10"
......
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