采购、装配

This commit is contained in:
hedekun
2018-11-14 09:22:04 +08:00
parent f7eb22e5bb
commit 666c65dd0f
101 changed files with 14504 additions and 266 deletions

View File

@@ -0,0 +1,595 @@
<template>
<div class="app-container">
<el-card>
<el-form ref="form1" :model="form1" label-position="right" label-width="110px" class="searchForm">
<el-row>
<el-col :span="6">
<el-form-item label="合同号">
<el-select v-model="contractNumValue" placeholder="合同号" filterable clearable size="small" @change="stipulateArrivalTime='';searchTable1()">
<el-option
v-for="item in contractNum"
:key="item.value"
:label="item.label"
:value="item.value">
<div style="float: left">{{ item.label }}</div>
<div style="float: right; color: #8492a6; font-size: 13px">{{ item.supplierName }}</div>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="合同名称">
<el-input v-model="contractName" size="small"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="规定到货时间">
<el-date-picker
v-model="stipulateArrivalTime"
:picker-options="endDateOpt"
:disabled="Boolean(!contractNumValue)"
size="small"
type="date"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
placeholder="选择日期"
@change="searchDemo();calcDay()"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="付款方式">
<el-select v-model="payMethodValue" placeholder="付款方式" size="small" @change="searchDemo();payMethodChange()">
<el-option
v-for="item in payMethod"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="第1次付款时间">
<el-select v-model="payTime1Value" placeholder="请选择" size="small" clearable>
<el-option
v-for="item in payTime"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="第2次付款时间">
<el-select v-model="payTime2Value" :disabled="disable2" placeholder="请选择" size="small" clearable>
<el-option
v-for="item in payTime"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="第3次付款时间">
<el-select v-model="payTime3Value" :disabled="disable3" placeholder="请选择" size="small" clearable>
<el-option
v-for="item in payTime"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="第4次付款时间">
<el-select v-model="payTime4Value" :disabled="disable4" placeholder="请选择" size="small" clearable>
<el-option
v-for="item in payTime"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="第5次付款时间">
<el-select v-model="payTime5Value" :disabled="disable5" placeholder="请选择" size="small" clearable>
<el-option
v-for="item in payTime"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="运费">
<el-input v-model="freight" size="small"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="税率">
<el-input v-model="taxRate" size="small"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="币种">
<el-select v-model="currencyValue" placeholder="币种" size="small" clearable>
<el-option
v-for="item in currency"
:key="item.value"
:label="item.label"
:value="item.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<el-card>
<el-table v-loading="" :data="tableData1" border style="width: 100%;max-height: 300px;" height="300px" size="mini">
<el-table-column label="参考价格" align="center" width="100">
<template slot-scope="scope">
{{ scope.row.参考价格 }}
</template>
</el-table-column>
<el-table-column label="单价" align="center" width="100">
<template slot-scope="scope">
<el-input v-model="scope.row.最低单价" size="mini" style="width:70px"/>
</template>
</el-table-column>
<el-table-column label="发货天数" align="center" width="100">
<template slot-scope="scope">
<el-input v-model="deliveryDay[scope.$index]" size="mini" style="width:70px"/>
</template>
</el-table-column>
<el-table-column label="物料计划到货时间" align="center" width="150">
<template slot-scope="scope">
{{ scope.row.物料计划到货时间.split(' ')[0] }}
</template>
</el-table-column>
<el-table-column label="物料名称" align="center" min-width="200">
<template slot-scope="scope">
{{ scope.row.物料名称 }}
</template>
</el-table-column>
<el-table-column label="物料型号" align="center" min-width="100">
<template slot-scope="scope">
{{ scope.row.物料型号 }}
</template>
</el-table-column>
<el-table-column label="物料规格" align="center" width="200">
<template slot-scope="scope">
{{ scope.row.零件数量 }}
</template>
</el-table-column>
<el-table-column label="订货数量" align="center" width="100">
<template slot-scope="scope">
{{ scope.row.订货数量 }}
</template>
</el-table-column>
<el-table-column label="金额" align="center" width="100">
<template slot-scope="scope">
{{ scope.row.金额 }}
</template>
</el-table-column>
</el-table>
<el-button
type="primary"
size="small"
icon=""
style="margin-top:10px"
@click="calculateContractSum">计算合同总额</el-button>
<span>合同总额:</span>
<el-input v-model="contractSum" size="small"/>
</el-card>
<el-card>
<el-table
:data="tableData2"
:show-header="false"
highlight-current-row
border
height="280px"
style="width: 250px;display:inline-block;max-height: 280px;"
size="mini"
@row-click="searchDemo">
<el-table-column align="center" label="合同模板名称">
<template slot-scope="scope">
{{ scope.row.合同模板名称 }}
</template>
</el-table-column>
</el-table>
<el-input :rows="20" v-model="textArea" type="textarea" style="width:calc(99% - 250px);float:right;margin-bottom: 20px" resize="none"/>
<!--将新一般处理页添加至通讯服务器-->
<el-upload
ref="upload"
:before-upload="beforeUpload"
:file-list="fileList"
:auto-upload="false"
style="display: inline-block;width:250px"
class="upload-demo"
action="http://localhost:8022/submit/uploadFile0.ashx"
list-type="picture">
<el-button slot="trigger" size="small" type="primary" style="margin:10px 10px 0 10px">添加图纸附件</el-button>
<el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">生成采购合同</el-button>
</el-upload>
</el-card>
<!--<el-button style="margin-left: 10px;" size="small" type="success" @click="test">test</el-button>-->
</div>
</template>
<script>
import { searchInquirySheet, searchSheetContract, initPayMethod, initPayTimeNode, searchContractDemo, doneContract, insertFile } from '@/api/PurchasingCenter/CreateContract'
import { mapGetters } from 'vuex'
export default {
inject: ['reload'],
data() {
return {
fileName: '',
hasFile: 0,
searchView: '',
fileList: [],
minDate: null,
endDateOpt: { // 为了让规定到货时间早于物料计划到货时间
disabledDate: (time) => {
if (this.minDate) {
return time.getTime() > this.minDate
}
}
},
form1: {},
contractNumValue: '', // 合同流水号
contractNum: [],
contractNameNum: '', // 合同编号/询价单号
contractName: '产品购销合同', // 合同名称
supplierName: '', // 供应商名称
stipulateArrivalTime: '', // 规定到货时间
payMethodValue: '', // 付款方式流水号
payMethodName: '', // 付款方式名称
payMethod: [],
payTime: [],
payTime1Value: '', // 付款时间
payTime2Value: '', // 付款时间
payTime3Value: '', // 付款时间
payTime4Value: '', // 付款时间
payTime5Value: '', // 付款时间
payTime6Value: '', // 付款时间
freight: '', // 运费
taxRate: '', // 税率
currencyValue: '', // 币种
currency: [
{
label: '人民币',
value: 1
}, {
label: '美元',
value: 2
}, {
label: '英镑',
value: 3
}, {
label: '欧元',
value: 4
}
], // 币种
calculateWayValue: [], // 计算方式(不要了)
calculateWay: [
{
label: '个数',
value: 1
}, {
label: '重量',
value: 2
}
],
weight: [], // 重量(不要了)
disable2: true,
disable3: true,
disable4: true,
disable5: true,
disable6: true,
tableData1: [], // 物料表
contractSum: '', // 合同总额
deliveryDay: [], // 发货天数
tableData2: [], // 合同模板表
textArea: '',
paramRow: '', // 参数row
materialGroup: '', // 物料流水号组
numberGroup: '', // 数量组
priceGroup: '', // 单价组
dayGroup: '', // 发货天数组
payGroup: '', // 付款方式组
planGroup: '', // 计划付款时间组
taxGroup: '', // 税率组
currencyGroup: '', // 币种组
groupPartGroup: '', // 组件零件流水号组
calculateWayGroup: '', // 计算方式组(不要了)
weightGroup: '', // 重量组(不要了)
supplierValue: '',
groupNum1: [] // 防止渲染不出来的中间变量
}
},
computed: {
...mapGetters([
'sidebar',
'avatar',
'name',
'id'
])
},
created() {
this.fetchData()
},
methods: {
test() {
this.$refs.upload.submit() // 图片传本地
},
beforeUpload(file) { // 传成功前
this.fileName = file.name
},
submitUpload() { // 生成采购合同+传图片附件
for (let i = 0; i < this.contractNum.length; i++) { // 在生成合同处也有
if (this.contractNum[i].value === this.contractNumValue) {
this.contractNameNum = this.contractNum[i].label // 获取询价单号
this.supplierValue = this.contractNum[i].supplierValue // 获取供应商流水号
}
}
this.$refs.upload.submit() // 图片传本地
if (this.fileName !== '') { // 有附件,先向数据库中插入一条记录(记录合同编号及文件名)
insertFile(this.fileName, this.contractNameNum).then(response => {
if (response.data[0].result === '1') {
this.doneContract()
} else {
this.$message.error('附件名插入数据库失败')
}
})
} else { // 无附件,直接执行生成合同
this.doneContract()
}
this.contractNameNum = ''
this.fileName = ''
},
fetchData() {
searchInquirySheet(0, 0, 0, 0, 1, this.id).then(response => { // 初始化询价单号
for (let i = 0; i < response.data.length; i++) {
this.contractNum.push({
value: response.data[i].询价单流水号,
label: response.data[i].询价单编号,
supplierName: response.data[i].供应商名称,
supplierValue: response.data[i].供应商流水号
})
}
})
searchContractDemo().then(response => { // 初始化合同模板
this.tableData2 = response.data
})
initPayMethod().then(response => { // 初始化付款方式
for (let i = 0; i < response.data.length; i++) {
this.payMethod.push({
label: response.data[i].付款方式内容,
value: response.data[i].付款方式流水号
})
}
})
initPayTimeNode().then(response => {
for (let i = 0; i < response.data.length; i++) {
this.payTime.push({
label: response.data[i].付款时间节点名称,
value: response.data[i].付款时间节点流水号
})
}
})
},
payMethodChange() { // 付款方式改变
for (let i = 0; i < this.payMethod.length; i++) {
if (this.payMethod[i].value === this.payMethodValue) {
this.payMethodName = this.payMethod[i].label
}
}
const payTimeNum = this.payMethodName.split(':')
switch (payTimeNum.length) {
case 1:
this.disable2 = true
this.disable3 = true
this.disable4 = true
this.disable5 = true
this.disable6 = true
break
case 2:
this.disable2 = false
this.disable3 = true
this.disable4 = true
this.disable5 = true
this.disable6 = true
break
case 3:
this.disable2 = false
this.disable3 = false
this.disable4 = true
this.disable5 = true
this.disable6 = true
break
case 4:
this.disable2 = false
this.disable3 = false
this.disable4 = false
this.disable5 = true
this.disable6 = true
break
case 5:
this.disable2 = false
this.disable3 = false
this.disable4 = false
this.disable5 = false
this.disable6 = true
break
case 6:
this.disable2 = false
this.disable3 = false
this.disable4 = false
this.disable5 = false
this.disable6 = false
break
}
},
searchTable1() {
const numGroup = [] // 空数组,放物料的计划到货时间
searchSheetContract(this.contractNumValue).then(response => {
this.tableData1 = response.data
this.calcDay() // 先给表置0
for (let i = 0; i < response.data.length; i++) {
this.tableData1[i].金额 = parseFloat(this.tableData1[i].最低单价) * parseFloat(this.tableData1[i].订货数量)
numGroup.push(Date.parse(this.tableData1[i].物料计划到货时间))
}
this.minDate = new Date(Math.min(...numGroup))
}).then(() => {
this.groupNum1 = this.tableData1 // 给中间变量需要时重新push
})
this.calcDay() // 先给表置0
},
searchDemo(row = this.paramRow) {
for (let i = 0; i < this.payMethod.length; i++) {
if (this.payMethod[i].value === this.payMethodValue) {
this.payMethodName = this.payMethod[i].label
}
}
this.paramRow = row
searchContractDemo(this.paramRow.合同模板流水号).then(response => {
this.textArea = response.data[0].合同模板内容.replace('stipulateArrivalTime', this.stipulateArrivalTime).replace('payMethodName', this.payMethodName)
})
},
calcDay() { // 计算发货天数
this.deliveryDay = []
for (let i = 0; i < this.tableData1.length; i++) {
this.stipulateArrivalTime
? (this.deliveryDay[i] = parseInt((Date.parse(this.stipulateArrivalTime) - new Date()) / (1000 * 60 * 60 * 24)))
: (this.deliveryDay[i] = 0)
}
},
calculateContractSum() {
this.contractSum = 0
this.tableData1 = []
for (let i = 0; i < this.groupNum1.length; i++) {
this.groupNum1[i].金额 = parseFloat(this.groupNum1[i].最低单价) * parseFloat(this.groupNum1[i].订货数量)
this.contractSum += parseFloat(this.groupNum1[i].金额)
this.tableData1.push(this.groupNum1[i])
}
},
doneContract() { // 生成采购合同
for (let i = 0; i < this.contractNum.length; i++) {
if (this.contractNum[i].value === this.contractNumValue) {
this.contractNameNum = this.contractNum[i].label // 获取询价单号
this.supplierValue = this.contractNum[i].supplierValue // 获取供应商流水号
}
}
if (this.contractNum === '' || this.contractNum === null) {
this.$message.error('请选择生成合同的询价单')
} else if (this.stipulateArrivalTime === '' || this.stipulateArrivalTime === null) {
this.$message.error('请选择规定到货时间!')
} else {
for (let i = 0; i < this.deliveryDay.length; i++) {
if (parseInt(this.deliveryDay[i]) < 0) {
this.$message.error('规定到货日期不可小于当前日期')
return
}
}
this.materialGroup = ''
this.numberGroup = ''
this.priceGroup = ''
this.dayGroup = ''
this.payGroup = ''
this.planGroup = ''
this.taxGroup = ''
this.currencyGroup = ''
this.groupPartGroup = ''
for (let i = 0; i < this.tableData1.length; i++) {
this.materialGroup += this.tableData1[i].物料流水号 + ','
this.numberGroup += this.tableData1[i].订货数量 + ','
this.priceGroup += this.tableData1[i].最低单价 + ','
this.dayGroup += this.deliveryDay[i] + ','
this.taxGroup += this.taxRate + ','
this.currencyGroup += this.currencyValue + ','
this.groupPartGroup += this.tableData1[i].组件零件流水号 + ',' // fucking
}
for (let i = 0; i < this.payMethod.length; i++) {
if (this.payMethod[i].value === this.payMethodValue) {
this.payMethodName = this.payMethod[i].label
}
}
const payTimeNum = this.payMethodName.split(':')
if (payTimeNum.length > 1) {
for (let i = 0; i < payTimeNum.length; i++) {
switch (i) {
case 0:
this.planGroup += this.payTime1Value + ','
break
case 1:
this.planGroup += this.payTime2Value + ','
break
case 2:
this.planGroup += this.payTime3Value + ','
break
case 3:
this.planGroup += this.payTime4Value + ','
break
case 4:
this.planGroup += this.payTime5Value + ','
break
case 5:
this.planGroup += this.payTime6Value + ','
break
}
this.payGroup += payTimeNum[i] + ',' // 付款比例 付款方式 付款计划
}
} else {
this.payGroup = '10,' // 付款比例 付款方式 付款计划
this.planGroup = this.payTime1Value + ',' // 付款时间
}
this.materialGroup = this.materialGroup.substr(0, this.materialGroup.length - 1)
this.numberGroup = this.numberGroup.substr(0, this.numberGroup.length - 1)
this.priceGroup = this.priceGroup.substr(0, this.priceGroup.length - 1)
this.dayGroup = this.dayGroup.substr(0, this.dayGroup.length - 1)
this.payGroup = this.payGroup.substr(0, this.payGroup.length - 1)
this.planGroup = this.planGroup.substr(0, this.planGroup.length - 1)
this.taxGroup = this.taxGroup.substr(0, this.taxGroup.length - 1)
this.currencyGroup = this.currencyGroup.substr(0, this.currencyGroup.length - 1)
this.groupPartGroup = this.groupPartGroup.substr(0, this.groupPartGroup.length - 1)
doneContract(this.contractNameNum, this.contractName, this.stipulateArrivalTime, this.stipulateArrivalTime, this.payMethodName, this.supplierValue, this.textArea, this.freight, this.materialGroup, this.numberGroup, this.priceGroup, this.dayGroup, this.payGroup, this.planGroup, this.taxGroup, this.currencyGroup, this.calculateWayGroup, this.weightGroup, this.id, this.groupPartGroup).then(response => {
if (response.data[0].result === '1') {
this.$message.success('生成合同成功')
this.reload()
} else { this.$message.error('生成合同失败') }
})
}
}
}
}
</script>
<style scoped>
.el-card{
margin-bottom: 15px;
}
.el-date-editor{
width:200px
}
.el-select{
width:200px
}
.el-input{
width:200px
}
span{
margin: 10px 0 10px 10px;
}
.searchForm .el-form-item{
margin-bottom: 5px;
}
</style>