Browse Source

【nev-pc】暂存

ag_report_nev
安虹睿 1 year ago
parent
commit
8c2b2d130e
  1. 106
      fe/PC/src/components/tableDrawer/tableDrawer.vue
  2. 44
      fe/PC/src/components/tablePagination/index.vue
  3. 590
      fe/PC/src/components/umyTable/index.vue
  4. 70
      fe/PC/src/router/index.js
  5. 26
      fe/PC/src/utils/primarySearchOption/index.js
  6. 58
      fe/PC/src/utils/tableColumns/index.js
  7. 11
      fe/PC/src/utils/tabsDesTions/index.js
  8. 94
      fe/PC/src/views/basicData/WarehouseManage/InventoryBilling.vue
  9. 271
      fe/PC/src/views/materialIssueManage/ZS/IssuePlanZS.vue

106
fe/PC/src/components/tableDrawer/tableDrawer.vue

@ -0,0 +1,106 @@
<template>
<el-drawer
:size="size"
:title="title"
:visible="show"
:direction="direction"
@close="close"
>
<div class="tableDrawerContent">
<umyTable
:tableBorder="true"
:tableData="tableData"
:tableColumns="tableColumns"
:selectionTable="selectionTable"
:requiredRules="false"
:setUTableHeight="260"
@sortChange="sortChange"
@handleSelectionChange="handleSelectionChange"
>
<template>
<slot></slot>
</template>
</umyTable>
</div>
</el-drawer>
</template>
<script>
import { LoadingMixins } from "@/mixins/LoadingMixins"
export default {
name: "tableDrawer",
mixins: [
LoadingMixins,
],
watch:{
isShow(n,o){
this.show = n;
},
},
data () {
return {
show:false,
};
},
props:{
size:{
type: String,
default: "40%",
},
isShow:{
type: Boolean,
default: false,
},
//
title: {
type: String,
default: "详情",
},
//
direction: {
type: String,
default: "rtl",
},
//
tableData: {
type: Array,
default: () => {
return [];
},
},
//
tableColumns: {
type: Array,
default: () => {
return [];
},
},
//
selectionTable: {
type: Boolean,
default: false,
},
},
mounted () {
},
methods:{
close(){
this.show=false
this.$emit("setClose",this.show)
},
//
sortChange (data) {
this.$emit('sortChange', data)
},
//selection
handleSelectionChange (val) {
this.$emit("handleSelectionChange", val)
},
}
};
</script>
<style lang="scss" scoped>
.tableDrawerContent{
padding:0 20px
}
</style>

44
fe/PC/src/components/tablePagination/index.vue

@ -256,6 +256,9 @@ export default {
this.closeRowDrop()
}
})
//
if(this.primarySearchOption && this.primarySearchOption.length > 0){this.headerFilterClick()}
},
methods: {
//
@ -266,29 +269,32 @@ export default {
this.$emit('rowDrop',data)
this.isUpdate = !this.isUpdate
},
headerFilterClick(){
this.showSearchOverall = !this.showSearchOverall
//
if(this.primarySearchOption && this.primarySearchOption.length > 0){
this.$nextTick(()=>{
let _search_height = this.$refs.searchOverallRef.getSearchPrimaryHeight()
if(this.showSearchOverall){
let _margin = 20
this.uTableOuterHeight = this.uTableOuterHeight_init - _search_height - _margin
setTimeout(()=>{
this.uTableTopHeight += _search_height + _margin
},0)
}else{
this.uTableOuterHeight = this.uTableOuterHeight_init
setTimeout(()=>{
this.uTableTopHeight = 165
},0)
}
})
}
},
//
topbutton (val,item) {
// + table +
if(val=="filter"){
this.showSearchOverall = !this.showSearchOverall
//
if(this.primarySearchOption && this.primarySearchOption.length > 0){
this.$nextTick(()=>{
let _search_height = this.$refs.searchOverallRef.getSearchPrimaryHeight()
if(this.showSearchOverall){
let _margin = 20
this.uTableOuterHeight = this.uTableOuterHeight_init - _search_height - _margin
setTimeout(()=>{
this.uTableTopHeight += _search_height + _margin
},0)
}else{
this.uTableOuterHeight = this.uTableOuterHeight_init
setTimeout(()=>{
this.uTableTopHeight = 165
},0)
}
})
}
this.headerFilterClick()
}
//
else if (val == 'field') {

590
fe/PC/src/components/umyTable/index.vue

@ -24,316 +24,316 @@
<u-table-column v-if="selectionTable" fixed="left" type="selection" :reserve-selection="true" />
<u-table-column v-if="isShowIndex" type="index" fixed="left" label="序号" width="50" />
<template v-for="(item, index) in TableSize">
<u-table-column
:key="index"
:prop="item.showProp ? item.prop + '.' + item.showProp : item.prop"
:sortable="item.sortable"
:fixed="setItemFixed(item,index)"
:show-overflow-tooltip="showOverflowTooltip"
:width="item.width"
:align="item.tableAlign || tableAlign"
:header-align="item.tableHeaderAlign || tableHeaderAlign"
v-if="item.istrue==null?true:item.istrue"
>
<template #header>
<span>{{ item.label }}</span>
<i style="color: #f56c6c" v-if="item.rules && requiredRules">*</i>
</template>
<template slot-scope="scope">
<el-form>
<el-form-item
v-if="item.type == 'input'"
:onkeyup="itemOnKeyUp(item,searchData[item.prop])"
:prop="'details.' + scope.$index + '.' + item.prop"
:rules="item.rules"
>
<el-input
:placeholder="'请输入' + item.label"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
v-model="scope.row[item.prop]"
@blur="
inputPlaceholder($event, item, 'blur',scope.row)
"
@focus="inputPlaceholder($event, item, 'focus')"
clearable
<u-table-column
:key="index"
:prop="item.showProp ? item.prop + '.' + item.showProp : item.prop"
:sortable="item.sortable"
:fixed="setItemFixed(item,index)"
:show-overflow-tooltip="showOverflowTooltip"
:width="item.width"
:align="item.tableAlign || tableAlign"
:header-align="item.tableHeaderAlign || tableHeaderAlign"
v-if="item.istrue==null?true:item.istrue"
>
<template #header>
<span>{{ item.label }}</span>
<i style="color: #f56c6c" v-if="item.rules && requiredRules">*</i>
</template>
<template slot-scope="scope">
<el-form>
<el-form-item
v-if="item.type == 'input'"
:onkeyup="itemOnKeyUp(item,searchData[item.prop])"
:prop="'details.' + scope.$index + '.' + item.prop"
:rules="item.rules"
>
</el-input>
</el-form-item>
<!-- 输入框(数字) onkeyup: 正则表达式用于前端输入校验工作-->
<el-form-item
v-if="item.type == 'inputNumber'"
:prop="'details.' + scope.$index + '.' + item.prop"
:rules="item.rules"
>
<el-input
v-model="searchData[item.prop]"
:maxlength="item.maxlength"
:onkeyup="typeNumberOnkeyup(item,searchData[item.prop])"
clearable
:disabled="Boolean(item.disabled)"
:placeholder="'请输入' + item.label"
:prefix-icon="item.icon"
:show-password="item.showPassword"
@change="changeInput(item.prop,$event)"
@clear="clearInput(item.prop,$event)"
@blur="
inputPlaceholder($event, item, 'blur',searchData)
<el-input
:placeholder="'请输入' + item.label"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
v-model="scope.row[item.prop]"
@blur="
inputPlaceholder($event, item, 'blur',scope.row)
"
@focus="inputPlaceholder($event, item, 'focus')"
clearable
>
</el-input>
</el-form-item>
<!-- 输入框(数字) onkeyup: 正则表达式用于前端输入校验工作-->
<el-form-item
v-if="item.type == 'inputNumber'"
:prop="'details.' + scope.$index + '.' + item.prop"
:rules="item.rules"
>
<el-input
v-model="searchData[item.prop]"
:maxlength="item.maxlength"
:onkeyup="typeNumberOnkeyup(item,searchData[item.prop])"
clearable
:disabled="Boolean(item.disabled)"
:placeholder="'请输入' + item.label"
:prefix-icon="item.icon"
:show-password="item.showPassword"
@change="changeInput(item.prop,$event)"
@clear="clearInput(item.prop,$event)"
@blur="
inputPlaceholder($event, item, 'blur',searchData)
"
@focus="inputPlaceholder($event, item, 'focus')"
></el-input>
</el-form-item>
<el-form-item
v-if="item.type == 'objectInput'"
:prop="
'details.' + scope.$index + '.' + item.prop + '.' + item.showProp
"
@focus="inputPlaceholder($event, item, 'focus')"
></el-input>
</el-form-item>
<el-form-item
v-if="item.type == 'objectInput'"
:prop="
'details.' + scope.$index + '.' + item.prop + '.' + item.showProp
"
:rules="item.rules"
>
<el-input
:rules="item.rules"
>
<el-input
:placeholder="'请输入' + item.label"
v-model="scope.row[item.prop][item.showProp]"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
@blur="
inputPlaceholder($event, item, 'blur', scope.row)
"
@focus="inputPlaceholder($event, item, 'focus')"
clearable
>
</el-input>
</el-form-item>
<!-- 下拉框 -->
<el-select
v-if="item.type === 'select'"
v-model="scope.row[item.prop]"
:loading="selectLoading"
:clearable="item.clearable"
:multiple="item.multiple"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
:filterable="item.filterable"
:allow-create="item.allowCreate"
style="width: 100%"
:placeholder="'请输入' + item.label"
>
<el-option
v-for="(op, index) in selectOptions(item.options) ||
searchOptions['options']"
:label="op[item.optionsLabel] || op.label"
:value="op[item.optionsValue] || op.value"
:key="index"
></el-option>
</el-select>
<!--对象下拉框 -->
<el-select
v-if="item.type === 'objectSelect'"
v-model="scope.row[item.prop][item.showProp]"
:loading="selectLoading"
:clearable="item.clearable"
:multiple="item.multiple"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
@blur="
inputPlaceholder($event, item, 'blur', scope.row)
"
@focus="inputPlaceholder($event, item, 'focus')"
clearable
>
</el-input>
</el-form-item>
<!-- 下拉框 -->
<el-select
v-if="item.type === 'select'"
v-model="scope.row[item.prop]"
:loading="selectLoading"
:clearable="item.clearable"
:multiple="item.multiple"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
:filterable="item.filterable"
:allow-create="item.allowCreate"
style="width: 100%"
:placeholder="'请输入' + item.label"
>
<el-option
v-for="(op, index) in selectOptions(item.options) ||
searchOptions['options']"
:label="op[item.optionsLabel] || op.label"
:value="op[item.optionsValue] || op.value"
:key="index"
></el-option>
</el-select>
<!--对象下拉框 -->
<el-select
v-if="item.type === 'objectSelect'"
v-model="scope.row[item.prop][item.showProp]"
:loading="selectLoading"
:clearable="item.clearable"
:multiple="item.multiple"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
:filterable="item.filterable"
:allow-create="item.allowCreate"
style="width: 100%"
:placeholder="'请输入' + item.label"
>
<el-option
v-for="(op, index) in selectOptions(item.options) ||
searchOptions['options']"
:label="op[item.optionsLabel] || op.label"
:value="op[item.optionsValue] || op.value"
:key="index"
></el-option>
</el-select>
<!--查询下拉-->
<el-form-item
v-if="item.type === 'autocomplete'"
:prop="'details.' + scope.$index + '.' + item.prop"
:rules="item.rules"
>
<el-autocomplete
class="inline-input"
:filterable="item.filterable"
:allow-create="item.allowCreate"
style="width: 100%"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
v-model="scope.row[item.prop]"
:fetch-suggestions="
(queryString, cb) => {
querySearch(queryString, cb, item, scope);
}
"
:placeholder="'请输入' + item.label"
@select="handleSelect($event, item, scope)"
>
<!-- <template slot-scope="{item}">
<div class="name" style="color:green">{{item.value = item.name}}</div>
<div class="name" >{{item.address = item.code}}</div>
</template> -->
<el-button
v-if="item.click"
slot="append"
icon="el-icon-search"
@click="item.click({ scope, item })"
style="color: #1890ff; background-color: #ffffff"
></el-button>
</el-autocomplete>
</el-form-item>
<!-- 对象查询下拉 -->
<el-form-item
v-if="item.type === 'objectAutocomplete'"
:prop="
'details.' + scope.$index + '.' + item.prop + '.' + item.showProp
"
:rules="item.rules"
>
<el-autocomplete
class="inline-input"
style="width: 100%"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
v-model="scope.row[item.prop][item.showProp]"
:fetch-suggestions="
(queryString, cb) => {
querySearch(queryString, cb, item, scope);
}
<el-option
v-for="(op, index) in selectOptions(item.options) ||
searchOptions['options']"
:label="op[item.optionsLabel] || op.label"
:value="op[item.optionsValue] || op.value"
:key="index"
></el-option>
</el-select>
<!--查询下拉-->
<el-form-item
v-if="item.type === 'autocomplete'"
:prop="'details.' + scope.$index + '.' + item.prop"
:rules="item.rules"
>
<el-autocomplete
class="inline-input"
style="width: 100%"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
v-model="scope.row[item.prop]"
:fetch-suggestions="
(queryString, cb) => {
querySearch(queryString, cb, item, scope);
}
"
:placeholder="'请输入' + item.label"
@select="handleSelect($event, item, scope)"
>
<!-- <template slot-scope="{item}">
<div class="name" style="color:green">{{item.value = item.name}}</div>
<div class="name" >{{item.address = item.code}}</div>
</template> -->
<el-button
v-if="item.click"
slot="append"
icon="el-icon-search"
@click="item.click({ scope, item })"
style="color: #1890ff; background-color: #ffffff"
></el-button>
</el-autocomplete>
</el-form-item>
<!-- 对象查询下拉 -->
<el-form-item
v-if="item.type === 'objectAutocomplete'"
:prop="
'details.' + scope.$index + '.' + item.prop + '.' + item.showProp
"
:placeholder="'请输入' + item.label"
@select="handleSelect($event, item, scope)"
:rules="item.rules"
>
<!-- <template slot-scope="{item}">
<div class="name" style="color:green">{{item.value = item.name}}</div>
<div class="name" >{{item.address = item.code}}</div>
</template> -->
<el-button
v-if="item.click"
slot="append"
icon="el-icon-search"
@click="item.click({ scope, item })"
style="color: #1890ff; background-color: #ffffff"
></el-button>
</el-autocomplete>
</el-form-item>
<!-- <el-form-item v-if="item.type == 'inputEnum'" :prop="item.prop">
<el-input
placeholder="请输入内容"
v-model="scope.row[item.prop]"
clearable
<el-autocomplete
class="inline-input"
style="width: 100%"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
v-model="scope.row[item.prop][item.showProp]"
:fetch-suggestions="
(queryString, cb) => {
querySearch(queryString, cb, item, scope);
}
"
:placeholder="'请输入' + item.label"
@select="handleSelect($event, item, scope)"
>
<!-- <template slot-scope="{item}">
<div class="name" style="color:green">{{item.value = item.name}}</div>
<div class="name" >{{item.address = item.code}}</div>
</template> -->
<el-button
v-if="item.click"
slot="append"
icon="el-icon-search"
@click="item.click({ scope, item })"
style="color: #1890ff; background-color: #ffffff"
></el-button>
</el-autocomplete>
</el-form-item>
<!-- <el-form-item v-if="item.type == 'inputEnum'" :prop="item.prop">
<el-input
placeholder="请输入内容"
v-model="scope.row[item.prop]"
clearable
>
</el-input>
</el-form-item> -->
<el-form-item
v-if="item.type == 'dateTimeInput'"
:prop="'details.' + scope.$index + '.' + item.prop"
:rules="item.rules"
>
<el-date-picker
type="datetime"
v-model="scope.row[item.prop]"
placeholder="选择日期"
style="width: 100%"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
value-format="yyyy-MM-ddTHH:mm:ss.sssZ"
format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<el-form-item
v-if="item.type == 'objectDateTimeInput'"
:prop="'details.' + scope.$index + '.' + item.prop + '.' + item.showProp"
:rules="item.rules"
>
</el-input>
</el-form-item> -->
<el-date-picker
type="datetime"
v-model="scope.row[item.prop][item.showProp]"
placeholder="选择日期"
style="width: 100%"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
value-format="yyyy-MM-ddTHH:mm:ss.sssZ"
format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<!-- table表添加按钮事件 v-show="scope.row.number == 'PRJ202210060001'" -->
<!-- <el-form-item v-if="item.type == 'button'" > -->
<!-- v-show="scope.row[item.prop]==undefined?true:false" -->
<div v-if="item.type == 'button'">
<el-button
v-if="item.hasButton ? item.hasButton(scope,item) : true"
v-show="item.alwaysShow ? true : ((scope.row[item.prop]==undefined || scope.row[item.prop] == '' || !scope.row[item.prop])?false:true)"
type="primary"
size="mini"
@click="buttonClick(scope.row, scope.$index, item.label,item)"
>{{item.buttonName || item.label}}</el-button>
</div>
<!-- </el-form-item> -->
<el-form-item
v-if="item.type == 'dateTimeInput'"
:prop="'details.' + scope.$index + '.' + item.prop"
:rules="item.rules"
>
<el-date-picker
type="datetime"
v-model="scope.row[item.prop]"
placeholder="选择日期"
style="width: 100%"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
value-format="yyyy-MM-ddTHH:mm:ss.sssZ"
format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<el-form-item
v-if="item.type == 'objectDateTimeInput'"
:prop="'details.' + scope.$index + '.' + item.prop + '.' + item.showProp"
:rules="item.rules"
>
<el-date-picker
type="datetime"
v-model="scope.row[item.prop][item.showProp]"
placeholder="选择日期"
style="width: 100%"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
value-format="yyyy-MM-ddTHH:mm:ss.sssZ"
format="yyyy-MM-dd"
></el-date-picker>
</el-form-item>
<!-- table表添加按钮事件 v-show="scope.row.number == 'PRJ202210060001'" -->
<!-- <el-form-item v-if="item.type == 'button'" > -->
<!-- v-show="scope.row[item.prop]==undefined?true:false" -->
<div v-if="item.type == 'button'">
<!-- table表添加操作列 -->
<div v-if="item.type == 'buttonOperation'">
<el-button
v-if="item.hasButton ? item.hasButton(scope,item) : true"
v-show="item.alwaysShow ? true : ((scope.row[item.prop]==undefined || scope.row[item.prop] == '' || !scope.row[item.prop])?false:true)"
type="primary"
class="buttonOperation-btn"
v-for="(itemButton, indexButton) in item.buttonText.split('|')"
:key="indexButton"
type="text"
size="mini"
@click="buttonClick(scope.row, scope.$index, item.label,item)"
>{{item.buttonName || item.label}}</el-button>
@click="buttonOperationClick(scope.row, item.buttonName.split('|')[indexButton])"
>{{itemButton}}</el-button>
</div>
<!-- </el-form-item> -->
<!-- table表添加操作列 -->
<div v-if="item.type == 'buttonOperation'">
<el-button
class="buttonOperation-btn"
v-for="(itemButton, indexButton) in item.buttonText.split('|')"
:key="indexButton"
type="text"
size="mini"
@click="buttonOperationClick(scope.row, item.buttonName.split('|')[indexButton])"
>{{itemButton}}</el-button>
</div>
<span v-if="item.type == 'object'">
{{ scope.row[item.prop] ? scope.row[item.prop][item.showProp] : "" }}
</span>
<span v-if="item.type == 'objectDateTime'">
{{ scope.row[item.prop]? scope.row[item.prop][item.showProp]: "" | formatDate }}
</span>
<span v-if="item.type == 'dateTime'">
{{ scope.row[item.prop] | formatDate }}
</span>
<!-- 调用主表信息 -->
<span v-else-if="item.type && item.type == 'outerMainFilter'">
{{ propsData[item.showProp] }}
</span>
<el-tag
v-if="item.type == 'tagFilter'"
:effect="'dark'"
size="medium"
class="tagFilterTypeDarkItem"
:color="scope.row[item.prop] | trigger(item.filters, 'background')"
>
{{ scope.row[item.prop] | trigger(item.filters, "label") }}
</el-tag>
<span
v-if="item.type == 'filter'"
:style="scope.row[item.prop]"
>
{{ scope.row[item.prop] | trigger(item.filters, "label", item.dictType) }}
</span>
<span
v-if="item.type == 'objectFilter'"
:style="scope.row[item.prop][item.showProp]"
>
{{ scope.row[item.prop][item.showProp] | trigger(item.filters, "label") }}
</span>
<span v-else-if="item.type == 'filterList'" >
{{ scope.row[item.prop] | triggerList(item.filters, "label") }}
</span>
<!-- 可点出详情 -->
<span
v-if="item.type == 'showDetail'"
@click="showDetailInfo(scope.row[item.prop])"
style="cursor: pointer;"
:title="'点击查看详情'"
:class="{ showDetailHover: item.type == 'showDetail' }"
>{{ scope.row[item.prop] ? scope.row[item.prop] + "" : scope.row[item.prop] }}</span>
<!-- 可点出json转换的table弹窗 -->
<span
v-if="item.type == 'showJsonTable'"
@click="showJsonTable(scope.row[item.prop])"
style="cursor: pointer;"
:title="'点击查看详情'"
:class="{ showDetailHover: item.type == 'showJsonTable' }"
>{{ scope.row[item.prop] ? scope.row[item.prop] + "" : scope.row[item.prop] }}</span>
<span
v-if="item.type == 'name' || !item.type"
@click="item.type == 'name' && inlineDialog(scope.row)"
:class="{ spamHover: item.type == 'name' }"
>{{ scope.row[item.prop] ? scope.row[item.prop] + "" : scope.row[item.prop] }}</span>
</el-form>
</template>
</u-table-column>
<span v-if="item.type == 'object'">
{{ scope.row[item.prop] ? scope.row[item.prop][item.showProp] : "" }}
</span>
<span v-if="item.type == 'objectDateTime'">
{{ scope.row[item.prop]? scope.row[item.prop][item.showProp]: "" | formatDate }}
</span>
<span v-if="item.type == 'dateTime'">
{{ scope.row[item.prop] | formatDate }}
</span>
<!-- 调用主表信息 -->
<span v-else-if="item.type && item.type == 'outerMainFilter'">
{{ propsData[item.showProp] }}
</span>
<el-tag
v-if="item.type == 'tagFilter'"
:effect="'dark'"
size="medium"
class="tagFilterTypeDarkItem"
:color="scope.row[item.prop] | trigger(item.filters, 'background')"
>
{{ scope.row[item.prop] | trigger(item.filters, "label") }}
</el-tag>
<span
v-if="item.type == 'filter'"
:style="scope.row[item.prop]"
>
{{ scope.row[item.prop] | trigger(item.filters, "label", item.dictType) }}
</span>
<span
v-if="item.type == 'objectFilter'"
:style="scope.row[item.prop][item.showProp]"
>
{{ scope.row[item.prop][item.showProp] | trigger(item.filters, "label") }}
</span>
<span v-else-if="item.type == 'filterList'" >
{{ scope.row[item.prop] | triggerList(item.filters, "label") }}
</span>
<!-- 可点出详情 -->
<span
v-if="item.type == 'showDetail'"
@click="showDetailInfo(scope.row[item.prop])"
style="cursor: pointer;"
:title="'点击查看详情'"
:class="{ showDetailHover: item.type == 'showDetail' }"
>{{ scope.row[item.prop] ? scope.row[item.prop] + "" : scope.row[item.prop] }}</span>
<!-- 可点出json转换的table弹窗 -->
<span
v-if="item.type == 'showJsonTable'"
@click="showJsonTable(scope.row[item.prop])"
style="cursor: pointer;"
:title="'点击查看详情'"
:class="{ showDetailHover: item.type == 'showJsonTable' }"
>{{ scope.row[item.prop] ? scope.row[item.prop] + "" : scope.row[item.prop] }}</span>
<span
v-if="item.type == 'name' || !item.type"
@click="item.type == 'name' && inlineDialog(scope.row)"
:class="{ spamHover: item.type == 'name' }"
>{{ scope.row[item.prop] ? scope.row[item.prop] + "" : scope.row[item.prop] }}</span>
</el-form>
</template>
</u-table-column>
</template>
<slot></slot>

70
fe/PC/src/router/index.js

@ -270,6 +270,22 @@ export const constantRoutes = [
// }
// }]
// },
{
path: '/',
component: Layout,
redirect: '/gridlayout',
hidden: true,
children: [{
path: 'IssuePlanZS',
component: () => import('@/views/materialIssueManage/ZS/IssuePlanZS.vue'),
name: 'IssuePlanZS',
meta: {
keepAlive : true,
title: '注塑计划',
icon: '成品发运任务',
}
}]
},
{
path: '/',
component: Layout,
@ -281,7 +297,7 @@ export const constantRoutes = [
name: 'IssueRequestZS',
meta: {
keepAlive : true,
title: '人工发料申请(注塑)',
title: '人工注塑申请',
icon: '成品发运任务',
}
}]
@ -297,7 +313,7 @@ export const constantRoutes = [
name: 'IssueJobZS',
meta: {
keepAlive : true,
title: '人工发料任务(注塑)',
title: '人工注塑任务',
icon: '成品发运任务',
}
}]
@ -313,7 +329,7 @@ export const constantRoutes = [
name: 'IssueNoteZS',
meta: {
keepAlive : true,
title: '人工发料记录(注塑)',
title: '人工注塑记录',
icon: '成品发运任务',
}
}]
@ -462,54 +478,6 @@ export const constantRoutes = [
}
}]
},
{
path: '/',
component: Layout,
redirect: '/gridlayout',
hidden: true,
children: [{
path: 'StdCostPriceSheet',
component: () => import('@/views/basicData/priceManage/StdCostPriceSheet.vue'),
name: 'StdCostPriceSheet',
meta: {
keepAlive : true,
title: '标准成本价格单',
icon: '成品发运任务',
}
}]
},
{
path: '/',
component: Layout,
redirect: '/gridlayout',
hidden: true,
children: [{
path: 'PurchasePriceSheet',
component: () => import('@/views/basicData/priceManage/PurchasePriceSheet.vue'),
name: 'PurchasePriceSheet',
meta: {
keepAlive : true,
title: '采购价格单',
icon: '成品发运任务',
}
}]
},
{
path: '/',
component: Layout,
redirect: '/gridlayout',
hidden: true,
children: [{
path: 'SalePriceSheet',
component: () => import('@/views/basicData/priceManage/SalePriceSheet.vue'),
name: 'SalePriceSheet',
meta: {
keepAlive : true,
title: '销售价格单',
icon: '成品发运任务',
}
}]
},
{
path: '/',
component: Layout,

26
fe/PC/src/utils/primarySearchOption/index.js

@ -1,6 +1,30 @@
// 示例配置 primarySearchOptionExample
export const ItemBasic = [
// export const ItemBasic = [
// // type == input
// { type: "input", label: "物品编码", prop: "code", action:"Like"},
// // type == select 枚举options(filters/status.js)
// { type: "select", label: "状态", prop: "status", options: "itemStatus"},
// // type == select 自定义options(使用userOptions参数)
// // { type: "select", label: "制造件", prop: 'canMake', userOptions: [
// // { "label": "是", id:'1', "value": true, },
// // { "label": "不是", id:'2',"value": false,}]
// // },
// // //type == date
// // { type: "date", label: "日期", prop: "date",},
// // // type == time
// // { type: "time", label: "时间", prop: "time",},
// // // type == dateTime
// // { type: "dateTime", label: "日期时间", prop: "dateTime",},
// // // type == dateTimelimit 选择范围:当前天及以后
// // { type: "dateTimelimit", label: "当前天及以后", prop: "dateTimelimit",},
// // 其他参数(以上方式通用):
// // 1、 value 添加默认值(默认为空),如:value:"111",默认值只为回显数据,不做查询处理
// // 如需要查询默认值,请在获取界面数据的paging()中配置
// // 2、 noClearable 去掉清除按钮(默认显示清除按钮)
// ]
export const IssuePlanZS = [
// type == input
{ type: "input", label: "物品编码", prop: "code", action:"Like"},
// type == select 枚举options(filters/status.js)

58
fe/PC/src/utils/tableColumns/index.js

@ -701,6 +701,15 @@ export const TransactionType = [
// fixed: "right"
// },
]
// 库存开账
export const InventoryBilling = [
{ label: "物品代码", prop: "itemCode", type: "name" },
{ label: "ERP系统库位代码", prop: "erpLocationCode",width:"180px" },
{ label: "创建时间", prop: "creationTime", type:'dateTime' },
{ label: "上次修改时间", prop: "lastModificationTime", type:'dateTime' },
{ label: "备注", prop: "remark" },
]
// 车间信息 20230328
export const Workshop = [
{
@ -1018,7 +1027,6 @@ export const StdCostPriceSheet = [
width:"200px"
},
{ label: "标准成本价格", prop: "stdCostPrice" },
{ label: "价格单描述", prop: "description" },
{ label: "创建时间", prop: "creationTime", type:'dateTime' },
{ label: "上次修改时间", prop: "lastModificationTime", type:'dateTime' },
{ label: "备注", prop: "remark" },
@ -2743,7 +2751,7 @@ export const InventoryBalance = [
{ label: "库存数量", prop: "qty",isNumber:true },
{ label: "计量单位", prop: "uom" },
{ label: "标准成本单价", prop: "stdCostPrice" },
{ label: "标准成本价格", prop: "stdCost" },
{ label: "标准成本金额", prop: "stdCost" },
{ label: "批次", prop: "lot" },
{ label: "库位代码", prop: "locationCode" },
{ label: "库存状态", type: "filter", filters: "inventoryStage", prop: "status" },
@ -4247,7 +4255,44 @@ export const completDumpNoteZP = [
{ label: "上次修改时间", prop: 'lastModificationTime', type: "dateTime" },
]
// 人工发料申请(注塑)
// 注塑计划
export const IssuePlanZS = [
{
label: _Names.itemCode,
prop: "code",
fixed: "left",
},
{ label: _Names.itemName, prop: "name" },
{ label: _Names.itemDesc1, prop: "desc1" },
{ label: _Names.itemDesc2, prop: "desc2" },
{ label: _Public.status, prop: "status", type: "filter", filters: "itemStatus" },
{ label: _Public.type, prop: 'type', type: "filter", filters: "ItemTypeBasic" },
{ label: _Names.abcClass, prop: 'abcClass', type: "filter", filters: "abcClass" },
{ label: _Names.canMake, prop: 'canMake', type: "filter", filters: "whetherOrNot" },
{ label: _Names.canBuy, prop: 'canBuy', type: "filter", filters: "whetherOrNot" },
{ label: _Names.canOutsourcing, prop: 'canOutsourcing', type: "filter", filters: "whetherOrNot" },
{ label: _Names.isRecycled, prop: 'isRecycled', type: "filter", filters: "whetherOrNot" },
{ label: _Names.isPhantom, prop: "isPhantom", type: "filter", filters: "whetherOrNot" },
{ label: _Names.productLine, prop: 'productLine' },
{ label: _Names.elevel, prop: 'elevel' },
{ label: _Names.color, prop: "color" },
// ---------------------------------------
{ label: _Public.creationTime, prop: "creationTime", type: "dateTime" },
{ label: _Public.lastModificationTime, prop: "lastModificationTime", type: "dateTime" },
{ label: _Names.category, prop: "category" },
{ label: _Names.group, prop: "group" },
{ label: _Names.configuration, prop: "configuration" },
{ label: _Names.basicUom, prop: "basicUom" },
{ label: _Names.stdPackQty, prop: "stdPackQty",isNumber:true },
{ label: _Names.project, prop: "project" },
{ label: _Names.version, prop: "version" },
{ label: _Names.eco, prop: "eco" },
{ label: _Names.validity, prop: "validity" },
{ label: _Names.validityUnit, prop: "validityUnit", type: "filter", filters: "validityUnit" },
{ label: _Names.manageType, prop: "manageType", type: "filter", filters: "manageType" },
{ label: _Public.remark, prop: "remark" },
]
// 人工注塑申请
export const IssueRequestZS = [
{
label: "叫料申请编号",
@ -4277,7 +4322,7 @@ export const IssueRequestZS = [
// { label: "事务ID", prop: "tenantId" },
// ************** 确认隐藏 ************************
]
// 人工发料任务(注塑)
// 人工注塑任务
export const IssueJobZS = [
{
label: "发料任务编号",
@ -4316,7 +4361,7 @@ export const IssueJobZS = [
// { label: "完成者", prop: 'completeUserId' },
// ************** 确认隐藏 ************************
]
// 人工发料记录(注塑)
// 人工注塑记录
export const IssueNoteZS = [
{
label: "发料记录单号",
@ -4688,6 +4733,9 @@ export const customerReturnNote = [
{ label: _Public.creationTime, prop: "creationTime", type: "dateTime" },
{ label: _Public.lastModificationTime, prop: "lastModificationTime", type: "dateTime" },
]
// 字段说明
// showProp: true //隐藏该字段的高级筛选+列表排序
// sortable: false //隐藏该字段的列表排序

11
fe/PC/src/utils/tabsDesTions/index.js

@ -520,6 +520,14 @@ export const TransactionType = [
// { label: "ID", prop: 'id' },
// ************** 确认隐藏 ************************
]
// 库存开账
export const InventoryBilling = [
{ label: "物品代码", prop: "itemCode", type: "name" },
{ label: "ERP系统库位代码", prop: "erpLocationCode" },
{ label: "创建时间", prop: "creationTime", type:'dateTime' },
{ label: "上次修改时间", prop: "lastModificationTime", type:'dateTime' },
{ label: "备注", prop: "remark" },
]
// 车间信息 20230328
export const Workshop = [
{ label: "车间代码", prop: "code" },
@ -767,7 +775,6 @@ export const StdCostPriceSheet = [
width:"200px"
},
{ label: "标准成本价格", prop: "stdCostPrice" },
{ label: "价格单描述", prop: "description" },
{ label: "创建时间", prop: "creationTime", type:'dateTime' },
{ label: "上次修改时间", prop: "lastModificationTime", type:'dateTime' },
{ label: "备注", prop: "remark" },
@ -1946,6 +1953,8 @@ export const InventoryInitialNote = [
{ label: "物品描述", prop: "itemDesc1" },
{ label: "物品描述2", prop: "itemDesc2" },
{ label: "标包数量", prop: 'stdPackQty' },
{ label: "标准成本单价", prop: "stdCostPrice" },
{ label: "标准成本金额", prop: "stdCost" },
{ label: "供应商批次", prop: 'supplierBatch' },
{ label: "事务ID", prop: "tenantId" },
{ label: "序号", prop: "serialNumber" },

94
fe/PC/src/views/basicData/WarehouseManage/InventoryBilling.vue

@ -0,0 +1,94 @@
<template>
<div class="page-box" v-loading="Loading.appMainLoading">
<tablePagination
:currenButtonData="currenButtonData"
:tableData="tableData"
:tableLoading="Loading.tableLoading"
:tableColumns="tableColumns"
@rowDrop="rowDrop"
:totalCount="totalCount"
:multipleSelection="multipleSelection"
:MaxResultCount="PageListParams.MaxResultCount"
@topbutton="topbutton"
@inlineDialog="inlineDialog"
@sortChange="sortChange"
@alertoldSkipCount="alertoldSkipCount"
@alterResultCount="alterResultCount"
@handleSelectionChange="handleSelectionChange"
:currentPageProps="oldSkipCount"
:quicklySearchOption="quicklySearchOption"
@quicklySearchClick="quicklySearchClick"
@quicklySearchClear="quicklySearchClear"
:primarySearchOption="primarySearchOption"
@overallSearchFormClick="overallSearchFormClick"
:httpOverallSearchData="httpOverallSearchData"
>
</tablePagination>
<curren-Drawer
:title="tableColumns"
:DrawerLoading="Loading.DrawerLoading"
:drawer="displayDialog.detailsDialog"
:propsData="propsData"
:tabsDesTions="tabsDesTions"
:Butttondata="[]"
@drawerShut="(val) => (displayDialog.detailsDialog = val)"
@drawerbutton="drawerbutton"
@close-value="closeValue"
:currenButtonData="currenButtonData"
:tableColumns="detailsTableColumns"
:totalCount="totalCountDetails"
:MaxResultCount="MaxResultCountDetails"
@alterResultCountDetails="alterResultCountDetails"
@alertoldSkipCountDetails="alertoldSkipCountDetails"
></curren-Drawer>
</div>
</template>
<script>
import { materialRequestByType,processRequest,getDetailed } from "@/api/wms-api"
import { tableMixins } from "@/mixins/TableMixins"
import { LoadingMixins } from "@/mixins/LoadingMixins"
import { drawerMixins } from "@/mixins/drawerMixins"
import { TableHeaderMixins } from "@/mixins/TableHeaderMixins"
import { mixins } from "@/mixins/mixins"
import { requestData } from "@/utils/processButtonData"
import requestDataNames from "@/utils/processButtonData"
export default {
name: "InventoryBilling",
mixins: [
tableMixins,
LoadingMixins,
drawerMixins,
TableHeaderMixins,
mixins,
],
computed: {
editDialog: {
get: function () {
return this.displayDialog.newDialog || this.displayDialog.editDialog;
},
},
},
data () {
let _this = this;
return {
URL: 'basedata/erpLocation-item',
tableLoading: false,
handleMultipleSelection: [],
//
currenButtonData: [
this.defaultExportBtn(),//
// this.defaultImportBtn(),//
this.defaultFieldSettingBtn(),//
this.defaultFreshBtn(),//
this.defaultFilterBtn(),//
],
};
},
mounted () {
this.paging()
},
};
</script>
<style lang="scss" scoped>
@import "../../../styles/basicData.scss";
</style>

271
fe/PC/src/views/materialIssueManage/ZS/IssuePlanZS.vue

@ -0,0 +1,271 @@
<template>
<div class="page-box" v-loading="Loading.appMainLoading">
<tablePagination
ref="tablePagination_Ref"
:currenButtonData="currenButtonData"
:tableData="tableData"
:tableLoading="Loading.tableLoading"
:tableColumns="tableColumns"
@rowDrop="rowDrop"
:totalCount="totalCount"
:multipleSelection="multipleSelection"
:MaxResultCount="PageListParams.MaxResultCount"
@topbutton="topbutton"
@inlineDialog="inlineDialog"
@sortChange="sortChange"
@alertoldSkipCount="alertoldSkipCount"
@alterResultCount="alterResultCount"
@handleSelectionChange="handleSelectionChange"
@buttonOperationClick="buttonOperationClick"
:currentPageProps="oldSkipCount"
:quicklySearchOption="quicklySearchOption"
@quicklySearchClick="quicklySearchClick"
@quicklySearchClear="quicklySearchClear"
:primarySearchOption="primarySearchOption"
@overallSearchFormClick="overallSearchFormClick"
:httpOverallSearchData="httpOverallSearchData"
>
<!-- <div slot="tableTopSlot">
上方按钮插槽位置预留
</div>
<div slot="searchPrimarySlot">
普通初级搜索插槽位置预留
</div> -->
<template>
<u-table-column
fixed="right"
label="查看"
align="center"
width="200"
>
<template slot-scope="scope">
<!-- 不使用el-button是因为固定左右时候行高度会窜行 -->
<span class="controlBarButton" @click="showDrawer('parent',scope)">总成汇总</span>
<span class="controlBarButton" @click="showDrawer('son',scope)">子物料汇总</span>
</template>
</u-table-column>
<u-table-column
fixed="right"
label="操作"
align="center"
width="100"
>
<template slot-scope="scope">
<!-- todo:v-if参数确定 -->
<span class="controlBarButton" v-if="scope.row.status == 1" @click="operationHandel('close',scope)">关闭</span>
<span class="controlBarButton" v-if="scope.row.status == 2" @click="operationHandel('handle',scope)">执行</span>
</template>
</u-table-column>
</template>
</tablePagination>
<!-- 搜索按钮窗体组件 -->
<searchPage
ref="searchTable"
:tableLoading="Loading.autoTableLoading"
:advancedFilter="advancedFilter()"
:filterPageListParams="filterPageListParams"
:formTitle="searchTitle"
:displayDialog="displayDialog.AddNewDialog"
:searchTableData="searchData"
:searchTableColumns="searchColumns"
:searchTotalCount="searchTotalCount"
:supplierItemPage="searchPageListParams"
@handleSelectionChange="prepareFormData"
@SizeChange="searchAlterResultCount($event, searchPageListParams)"
@CurrentChange="searchAlertoldSkipCount($event, searchPageListParams)"
@tableButtonClick="searchSubmit(arguments)"
></searchPage>
<!-- 总成弹窗 -->
<tableDrawer
:title="currentTitle"
:isShow="isShow_parent"
@setClose="closeDrawer('parent')"
:tableData="tableData_parent"
:tableColumns="tableColumns_parent"
>
<template>
<u-table-column
fixed="right"
label="操作"
align="center"
width="120"
>
<template slot-scope="scope">
<!-- 不使用el-button是因为固定左右时候行高度会窜行 -->
<span class="controlBarButton" @click="showDrawer('bom',scope)">查看bom</span>
</template>
</u-table-column>
</template>
</tableDrawer>
<!-- 子物料弹窗 -->
<tableDrawer
:title="currentTitle"
:isShow="isShow_son"
@setClose="closeDrawer('son')"
:tableData="tableData_son"
:tableColumns="tableColumns_son"
></tableDrawer>
<!-- bom弹窗 -->
<tableDrawer
:size="'30%'"
:title="currentTitle"
:isShow="isShow_bom"
@setClose="closeDrawer('bom')"
:tableData="tableData_bom"
:tableColumns="tableColumns_bom"
></tableDrawer>
</div>
</template>
<script>
import { tableMixins } from "@/mixins/TableMixins"
import { LoadingMixins } from "@/mixins/LoadingMixins"
import { TableHeaderMixins } from "@/mixins/TableHeaderMixins"
import { mixins } from "@/mixins/mixins"
import { filterSelectMixins } from '@/mixins/filter-Select'
import tableDrawer from "@/components/tableDrawer/tableDrawer.vue"
export default {
name: "IssuePlanZS",
mixins: [
tableMixins,
LoadingMixins,
TableHeaderMixins,
mixins,
filterSelectMixins,
],
components:{
tableDrawer
},
data () {
return {
URL: 'basedata/item-basic',
//
currenButtonData: [
this.defaultFieldSettingBtn(),//
this.defaultFreshBtn(),//
this.defaultFilterBtn(),//
],
currentTitle:null,
//
isShow_parent:false,
//
tableColumns_parent:[
{ label: "总成号", prop: "number",width:'auto' },
{ label: "数量", prop: "qty",width:'auto' },
],
//
tableData_parent:[],
//
isShow_son:false,
//
tableColumns_son:[
{ label: "son总成号", prop: "number",width:'auto' },
{ label: "son数量", prop: "qty",width:'auto' },
],
//
tableData_son:[],
// bom
isShow_bom:false,
// bom
tableColumns_bom:[
{ label: "bom总成号", prop: "number",width:'auto' },
{ label: "bom数量", prop: "qty",width:'auto' },
],
// bom
tableData_bom:[],
};
},
mounted () {
this.paging();
},
methods:{
//
showDrawer(type,scope){
console.log(type,scope)
//
if(type == "parent"){
// todo:
this.currentTitle="parent"
this.tableData_parent = [
{number:'number1',qty:1},
{number:'number2',qty:2},
]
this.isShow_parent = true
}
//
if(type == "son"){
// todo:
this.currentTitle="son"
this.tableData_son = [
{number:'sonnumber1',qty:11},
{number:'sonnumber2',qty:22},
]
this.isShow_son = true
}
// -bom
if(type == "bom"){
// todo:
this.currentTitle="bom"
this.tableData_bom = [
{number:'bomnumber1',qty:11},
{number:'bomnumber2',qty:22},
]
this.isShow_bom = true
}
},
//
closeDrawer(type){
console.log(type)
//
if(type == "parent"){
this.isShow_parent = false
}
//
if(type == "son"){
this.isShow_son = false
}
//
if(type == "bom"){
this.isShow_bom = false
}
},
//
operationHandel(type,data){
//
if(type == "close"){
this.$confirm('您确定要关闭吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
}).catch(() => {
});
}
//
if(type == "handle"){
this.$confirm('您确定要执行吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
}).catch(() => {
});
}
console.log(type,data)
}
}
};
</script>
<style lang="scss" scoped>
@import "../../../styles/basicData.scss";
.controlBarButton{
color:#409EFF;
cursor:pointer;
user-select: none;
margin:0 10px;
}
</style>
Loading…
Cancel
Save