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() this.closeRowDrop()
} }
}) })
//
if(this.primarySearchOption && this.primarySearchOption.length > 0){this.headerFilterClick()}
}, },
methods: { methods: {
// //
@ -266,29 +269,32 @@ export default {
this.$emit('rowDrop',data) this.$emit('rowDrop',data)
this.isUpdate = !this.isUpdate 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) { topbutton (val,item) {
// + table + // + table +
if(val=="filter"){ if(val=="filter"){
this.showSearchOverall = !this.showSearchOverall this.headerFilterClick()
//
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)
}
})
}
} }
// //
else if (val == 'field') { 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="selectionTable" fixed="left" type="selection" :reserve-selection="true" />
<u-table-column v-if="isShowIndex" type="index" fixed="left" label="序号" width="50" /> <u-table-column v-if="isShowIndex" type="index" fixed="left" label="序号" width="50" />
<template v-for="(item, index) in TableSize"> <template v-for="(item, index) in TableSize">
<u-table-column <u-table-column
:key="index" :key="index"
:prop="item.showProp ? item.prop + '.' + item.showProp : item.prop" :prop="item.showProp ? item.prop + '.' + item.showProp : item.prop"
:sortable="item.sortable" :sortable="item.sortable"
:fixed="setItemFixed(item,index)" :fixed="setItemFixed(item,index)"
:show-overflow-tooltip="showOverflowTooltip" :show-overflow-tooltip="showOverflowTooltip"
:width="item.width" :width="item.width"
:align="item.tableAlign || tableAlign" :align="item.tableAlign || tableAlign"
:header-align="item.tableHeaderAlign || tableHeaderAlign" :header-align="item.tableHeaderAlign || tableHeaderAlign"
v-if="item.istrue==null?true:item.istrue" v-if="item.istrue==null?true:item.istrue"
> >
<template #header> <template #header>
<span>{{ item.label }}</span> <span>{{ item.label }}</span>
<i style="color: #f56c6c" v-if="item.rules && requiredRules">*</i> <i style="color: #f56c6c" v-if="item.rules && requiredRules">*</i>
</template> </template>
<template slot-scope="scope"> <template slot-scope="scope">
<el-form> <el-form>
<el-form-item <el-form-item
v-if="item.type == 'input'" v-if="item.type == 'input'"
:onkeyup="itemOnKeyUp(item,searchData[item.prop])" :onkeyup="itemOnKeyUp(item,searchData[item.prop])"
:prop="'details.' + scope.$index + '.' + item.prop" :prop="'details.' + scope.$index + '.' + item.prop"
:rules="item.rules" :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
> >
</el-input> <el-input
</el-form-item> :placeholder="'请输入' + item.label"
<!-- 输入框(数字) onkeyup: 正则表达式用于前端输入校验工作--> :disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
<el-form-item v-model="scope.row[item.prop]"
v-if="item.type == 'inputNumber'" @blur="
:prop="'details.' + scope.$index + '.' + item.prop" inputPlaceholder($event, item, 'blur',scope.row)
:rules="item.rules" "
> @focus="inputPlaceholder($event, item, 'focus')"
<el-input clearable
v-model="searchData[item.prop]" >
:maxlength="item.maxlength" </el-input>
:onkeyup="typeNumberOnkeyup(item,searchData[item.prop])" </el-form-item>
clearable <!-- 输入框(数字) onkeyup: 正则表达式用于前端输入校验工作-->
:disabled="Boolean(item.disabled)" <el-form-item
:placeholder="'请输入' + item.label" v-if="item.type == 'inputNumber'"
:prefix-icon="item.icon" :prop="'details.' + scope.$index + '.' + item.prop"
:show-password="item.showPassword" :rules="item.rules"
@change="changeInput(item.prop,$event)" >
@clear="clearInput(item.prop,$event)" <el-input
@blur=" v-model="searchData[item.prop]"
inputPlaceholder($event, item, 'blur',searchData) :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')" :rules="item.rules"
></el-input> >
</el-form-item> <el-input
<el-form-item :placeholder="'请输入' + item.label"
v-if="item.type == 'objectInput'" v-model="scope.row[item.prop][item.showProp]"
:prop=" :disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
'details.' + scope.$index + '.' + item.prop + '.' + item.showProp @blur="
" inputPlaceholder($event, item, 'blur', scope.row)
:rules="item.rules" "
> @focus="inputPlaceholder($event, item, 'focus')"
<el-input 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" :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]" v-model="scope.row[item.prop][item.showProp]"
:loading="selectLoading"
:clearable="item.clearable"
:multiple="item.multiple"
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])" :disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
@blur=" :filterable="item.filterable"
inputPlaceholder($event, item, 'blur', scope.row) :allow-create="item.allowCreate"
"
@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"
style="width: 100%" 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" :placeholder="'请输入' + item.label"
@select="handleSelect($event, item, scope)"
> >
<!-- <template slot-scope="{item}"> <el-option
<div class="name" style="color:green">{{item.value = item.name}}</div> v-for="(op, index) in selectOptions(item.options) ||
<div class="name" >{{item.address = item.code}}</div> searchOptions['options']"
</template> --> :label="op[item.optionsLabel] || op.label"
<el-button :value="op[item.optionsValue] || op.value"
v-if="item.click" :key="index"
slot="append" ></el-option>
icon="el-icon-search" </el-select>
@click="item.click({ scope, item })" <!--查询下拉-->
style="color: #1890ff; background-color: #ffffff" <el-form-item
></el-button> v-if="item.type === 'autocomplete'"
</el-autocomplete> :prop="'details.' + scope.$index + '.' + item.prop"
</el-form-item> :rules="item.rules"
<!-- 对象查询下拉 --> >
<el-form-item <el-autocomplete
v-if="item.type === 'objectAutocomplete'" class="inline-input"
:prop=" style="width: 100%"
'details.' + scope.$index + '.' + item.prop + '.' + item.showProp :disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
" v-model="scope.row[item.prop]"
:rules="item.rules" :fetch-suggestions="
> (queryString, cb) => {
<el-autocomplete querySearch(queryString, cb, item, scope);
class="inline-input" }
style="width: 100%" "
:disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])" :placeholder="'请输入' + item.label"
v-model="scope.row[item.prop][item.showProp]" @select="handleSelect($event, item, scope)"
:fetch-suggestions=" >
(queryString, cb) => { <!-- <template slot-scope="{item}">
querySearch(queryString, cb, item, scope); <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" :rules="item.rules"
@select="handleSelect($event, item, scope)"
> >
<!-- <template slot-scope="{item}"> <el-autocomplete
<div class="name" style="color:green">{{item.value = item.name}}</div> class="inline-input"
<div class="name" >{{item.address = item.code}}</div> style="width: 100%"
</template> --> :disabled="Boolean(item.disabled) || Boolean(scope.row['disabled'])"
<el-button v-model="scope.row[item.prop][item.showProp]"
v-if="item.click" :fetch-suggestions="
slot="append" (queryString, cb) => {
icon="el-icon-search" querySearch(queryString, cb, item, scope);
@click="item.click({ scope, item })" }
style="color: #1890ff; background-color: #ffffff" "
></el-button> :placeholder="'请输入' + item.label"
</el-autocomplete> @select="handleSelect($event, item, scope)"
</el-form-item> >
<!-- <el-form-item v-if="item.type == 'inputEnum'" :prop="item.prop"> <!-- <template slot-scope="{item}">
<el-input <div class="name" style="color:green">{{item.value = item.name}}</div>
placeholder="请输入内容" <div class="name" >{{item.address = item.code}}</div>
v-model="scope.row[item.prop]" </template> -->
clearable <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-date-picker
</el-form-item> --> 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 <!-- table表添加操作列 -->
v-if="item.type == 'dateTimeInput'" <div v-if="item.type == 'buttonOperation'">
: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'">
<el-button <el-button
v-if="item.hasButton ? item.hasButton(scope,item) : true" class="buttonOperation-btn"
v-show="item.alwaysShow ? true : ((scope.row[item.prop]==undefined || scope.row[item.prop] == '' || !scope.row[item.prop])?false:true)" v-for="(itemButton, indexButton) in item.buttonText.split('|')"
type="primary" :key="indexButton"
type="text"
size="mini" size="mini"
@click="buttonClick(scope.row, scope.$index, item.label,item)" @click="buttonOperationClick(scope.row, item.buttonName.split('|')[indexButton])"
>{{item.buttonName || item.label}}</el-button> >{{itemButton}}</el-button>
</div> </div>
<!-- </el-form-item> --> <span v-if="item.type == 'object'">
{{ scope.row[item.prop] ? scope.row[item.prop][item.showProp] : "" }}
<!-- table表添加操作列 --> </span>
<div v-if="item.type == 'buttonOperation'"> <span v-if="item.type == 'objectDateTime'">
<el-button {{ scope.row[item.prop]? scope.row[item.prop][item.showProp]: "" | formatDate }}
class="buttonOperation-btn" </span>
v-for="(itemButton, indexButton) in item.buttonText.split('|')" <span v-if="item.type == 'dateTime'">
:key="indexButton" {{ scope.row[item.prop] | formatDate }}
type="text" </span>
size="mini" <!-- 调用主表信息 -->
@click="buttonOperationClick(scope.row, item.buttonName.split('|')[indexButton])" <span v-else-if="item.type && item.type == 'outerMainFilter'">
>{{itemButton}}</el-button> {{ propsData[item.showProp] }}
</div> </span>
<span v-if="item.type == 'object'"> <el-tag
{{ scope.row[item.prop] ? scope.row[item.prop][item.showProp] : "" }} v-if="item.type == 'tagFilter'"
</span> :effect="'dark'"
<span v-if="item.type == 'objectDateTime'"> size="medium"
{{ scope.row[item.prop]? scope.row[item.prop][item.showProp]: "" | formatDate }} class="tagFilterTypeDarkItem"
</span> :color="scope.row[item.prop] | trigger(item.filters, 'background')"
<span v-if="item.type == 'dateTime'"> >
{{ scope.row[item.prop] | formatDate }} {{ scope.row[item.prop] | trigger(item.filters, "label") }}
</span> </el-tag>
<!-- 调用主表信息 --> <span
<span v-else-if="item.type && item.type == 'outerMainFilter'"> v-if="item.type == 'filter'"
{{ propsData[item.showProp] }} :style="scope.row[item.prop]"
</span> >
<el-tag {{ scope.row[item.prop] | trigger(item.filters, "label", item.dictType) }}
v-if="item.type == 'tagFilter'" </span>
:effect="'dark'" <span
size="medium" v-if="item.type == 'objectFilter'"
class="tagFilterTypeDarkItem" :style="scope.row[item.prop][item.showProp]"
:color="scope.row[item.prop] | trigger(item.filters, 'background')" >
> {{ scope.row[item.prop][item.showProp] | trigger(item.filters, "label") }}
{{ scope.row[item.prop] | trigger(item.filters, "label") }} </span>
</el-tag> <span v-else-if="item.type == 'filterList'" >
<span {{ scope.row[item.prop] | triggerList(item.filters, "label") }}
v-if="item.type == 'filter'" </span>
:style="scope.row[item.prop]" <!-- 可点出详情 -->
> <span
{{ scope.row[item.prop] | trigger(item.filters, "label", item.dictType) }} v-if="item.type == 'showDetail'"
</span> @click="showDetailInfo(scope.row[item.prop])"
<span style="cursor: pointer;"
v-if="item.type == 'objectFilter'" :title="'点击查看详情'"
:style="scope.row[item.prop][item.showProp]" :class="{ showDetailHover: item.type == 'showDetail' }"
> >{{ scope.row[item.prop] ? scope.row[item.prop] + "" : scope.row[item.prop] }}</span>
{{ scope.row[item.prop][item.showProp] | trigger(item.filters, "label") }} <!-- 可点出json转换的table弹窗 -->
</span> <span
<span v-else-if="item.type == 'filterList'" > v-if="item.type == 'showJsonTable'"
{{ scope.row[item.prop] | triggerList(item.filters, "label") }} @click="showJsonTable(scope.row[item.prop])"
</span> style="cursor: pointer;"
<!-- 可点出详情 --> :title="'点击查看详情'"
<span :class="{ showDetailHover: item.type == 'showJsonTable' }"
v-if="item.type == 'showDetail'" >{{ scope.row[item.prop] ? scope.row[item.prop] + "" : scope.row[item.prop] }}</span>
@click="showDetailInfo(scope.row[item.prop])" <span
style="cursor: pointer;" v-if="item.type == 'name' || !item.type"
:title="'点击查看详情'" @click="item.type == 'name' && inlineDialog(scope.row)"
:class="{ showDetailHover: item.type == 'showDetail' }" :class="{ spamHover: item.type == 'name' }"
>{{ scope.row[item.prop] ? scope.row[item.prop] + "" : scope.row[item.prop] }}</span> >{{ scope.row[item.prop] ? scope.row[item.prop] + "" : scope.row[item.prop] }}</span>
<!-- 可点出json转换的table弹窗 --> </el-form>
<span </template>
v-if="item.type == 'showJsonTable'" </u-table-column>
@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> </template>
<slot></slot> <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: '/', path: '/',
component: Layout, component: Layout,
@ -281,7 +297,7 @@ export const constantRoutes = [
name: 'IssueRequestZS', name: 'IssueRequestZS',
meta: { meta: {
keepAlive : true, keepAlive : true,
title: '人工发料申请(注塑)', title: '人工注塑申请',
icon: '成品发运任务', icon: '成品发运任务',
} }
}] }]
@ -297,7 +313,7 @@ export const constantRoutes = [
name: 'IssueJobZS', name: 'IssueJobZS',
meta: { meta: {
keepAlive : true, keepAlive : true,
title: '人工发料任务(注塑)', title: '人工注塑任务',
icon: '成品发运任务', icon: '成品发运任务',
} }
}] }]
@ -313,7 +329,7 @@ export const constantRoutes = [
name: 'IssueNoteZS', name: 'IssueNoteZS',
meta: { meta: {
keepAlive : true, keepAlive : true,
title: '人工发料记录(注塑)', title: '人工注塑记录',
icon: '成品发运任务', 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: '/', path: '/',
component: Layout, component: Layout,

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

@ -1,6 +1,30 @@
// 示例配置 primarySearchOptionExample // 示例配置 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
{ type: "input", label: "物品编码", prop: "code", action:"Like"}, { type: "input", label: "物品编码", prop: "code", action:"Like"},
// type == select 枚举options(filters/status.js) // type == select 枚举options(filters/status.js)

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

@ -701,6 +701,15 @@ export const TransactionType = [
// fixed: "right" // 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 // 车间信息 20230328
export const Workshop = [ export const Workshop = [
{ {
@ -1018,7 +1027,6 @@ export const StdCostPriceSheet = [
width:"200px" width:"200px"
}, },
{ label: "标准成本价格", prop: "stdCostPrice" }, { label: "标准成本价格", prop: "stdCostPrice" },
{ label: "价格单描述", prop: "description" },
{ label: "创建时间", prop: "creationTime", type:'dateTime' }, { label: "创建时间", prop: "creationTime", type:'dateTime' },
{ label: "上次修改时间", prop: "lastModificationTime", type:'dateTime' }, { label: "上次修改时间", prop: "lastModificationTime", type:'dateTime' },
{ label: "备注", prop: "remark" }, { label: "备注", prop: "remark" },
@ -2743,7 +2751,7 @@ export const InventoryBalance = [
{ label: "库存数量", prop: "qty",isNumber:true }, { label: "库存数量", prop: "qty",isNumber:true },
{ label: "计量单位", prop: "uom" }, { label: "计量单位", prop: "uom" },
{ label: "标准成本单价", prop: "stdCostPrice" }, { label: "标准成本单价", prop: "stdCostPrice" },
{ label: "标准成本价格", prop: "stdCost" }, { label: "标准成本金额", prop: "stdCost" },
{ label: "批次", prop: "lot" }, { label: "批次", prop: "lot" },
{ label: "库位代码", prop: "locationCode" }, { label: "库位代码", prop: "locationCode" },
{ label: "库存状态", type: "filter", filters: "inventoryStage", prop: "status" }, { label: "库存状态", type: "filter", filters: "inventoryStage", prop: "status" },
@ -4247,7 +4255,44 @@ export const completDumpNoteZP = [
{ label: "上次修改时间", prop: 'lastModificationTime', type: "dateTime" }, { 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 = [ export const IssueRequestZS = [
{ {
label: "叫料申请编号", label: "叫料申请编号",
@ -4277,7 +4322,7 @@ export const IssueRequestZS = [
// { label: "事务ID", prop: "tenantId" }, // { label: "事务ID", prop: "tenantId" },
// ************** 确认隐藏 ************************ // ************** 确认隐藏 ************************
] ]
// 人工发料任务(注塑) // 人工注塑任务
export const IssueJobZS = [ export const IssueJobZS = [
{ {
label: "发料任务编号", label: "发料任务编号",
@ -4316,7 +4361,7 @@ export const IssueJobZS = [
// { label: "完成者", prop: 'completeUserId' }, // { label: "完成者", prop: 'completeUserId' },
// ************** 确认隐藏 ************************ // ************** 确认隐藏 ************************
] ]
// 人工发料记录(注塑) // 人工注塑记录
export const IssueNoteZS = [ export const IssueNoteZS = [
{ {
label: "发料记录单号", label: "发料记录单号",
@ -4688,6 +4733,9 @@ export const customerReturnNote = [
{ label: _Public.creationTime, prop: "creationTime", type: "dateTime" }, { label: _Public.creationTime, prop: "creationTime", type: "dateTime" },
{ label: _Public.lastModificationTime, prop: "lastModificationTime", type: "dateTime" }, { label: _Public.lastModificationTime, prop: "lastModificationTime", type: "dateTime" },
] ]
// 字段说明 // 字段说明
// showProp: true //隐藏该字段的高级筛选+列表排序 // showProp: true //隐藏该字段的高级筛选+列表排序
// sortable: false //隐藏该字段的列表排序 // sortable: false //隐藏该字段的列表排序

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

@ -520,6 +520,14 @@ export const TransactionType = [
// { label: "ID", prop: 'id' }, // { 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 // 车间信息 20230328
export const Workshop = [ export const Workshop = [
{ label: "车间代码", prop: "code" }, { label: "车间代码", prop: "code" },
@ -767,7 +775,6 @@ export const StdCostPriceSheet = [
width:"200px" width:"200px"
}, },
{ label: "标准成本价格", prop: "stdCostPrice" }, { label: "标准成本价格", prop: "stdCostPrice" },
{ label: "价格单描述", prop: "description" },
{ label: "创建时间", prop: "creationTime", type:'dateTime' }, { label: "创建时间", prop: "creationTime", type:'dateTime' },
{ label: "上次修改时间", prop: "lastModificationTime", type:'dateTime' }, { label: "上次修改时间", prop: "lastModificationTime", type:'dateTime' },
{ label: "备注", prop: "remark" }, { label: "备注", prop: "remark" },
@ -1946,6 +1953,8 @@ export const InventoryInitialNote = [
{ label: "物品描述", prop: "itemDesc1" }, { label: "物品描述", prop: "itemDesc1" },
{ label: "物品描述2", prop: "itemDesc2" }, { label: "物品描述2", prop: "itemDesc2" },
{ label: "标包数量", prop: 'stdPackQty' }, { label: "标包数量", prop: 'stdPackQty' },
{ label: "标准成本单价", prop: "stdCostPrice" },
{ label: "标准成本金额", prop: "stdCost" },
{ label: "供应商批次", prop: 'supplierBatch' }, { label: "供应商批次", prop: 'supplierBatch' },
{ label: "事务ID", prop: "tenantId" }, { label: "事务ID", prop: "tenantId" },
{ label: "序号", prop: "serialNumber" }, { 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