| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373 |
- <template>
- <el-form ref="form" :model="form" :rules="rules" :disabled="disabled">
- <ele-pro-table
- ref="table"
- :needPage="false"
- :columns="columns"
- :toolkit="[]"
- :datasource="form.datasource"
- cache-key="systemRoleTable17"
- class="time-form"
-
- @header-dragend="handleHeaderDragend">
- <!-- 表头工具栏 -->
- <template v-slot:toolbar>
- <!-- <div class="headbox">
- <el-button
- v-if="isShowAdd"
- size="small"
- type="primary"
- icon="el-icon-plus"
- class="ele-btn-icon"
- @click="handlAdd"
- >
- 新增
- </el-button>
- </div> -->
- </template>
- <template v-slot:technicalDrawings="{ row, $index }">
- <el-form-item :prop="'datasource.' + $index + '.technicalDrawings'">
- <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
- <!-- <div v-if="row.technicalDrawings && row.technicalDrawings?.length">-->
- <!-- <el-link-->
- <!-- v-for="link in row.technicalDrawings"-->
- <!-- :key="link.id"-->
- <!-- type="primary"-->
- <!-- :underline="false"-->
- <!-- @click="download(link)"-->
- <!-- >-->
- <!-- {{ link.name }}-->
- <!-- </el-link>-->
- <!-- </div>-->
- </el-form-item>
- </template>
- <template v-slot:remark="{ row, $index }">
- <el-form-item :prop="'datasource.' + $index + '.remark'">
- <el-input
- clearable
- v-model="row.remark"
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </template>
- <!-- 编码:本行编码 + 所替代的原物品编码,一眼看清替的是哪个物料 -->
- <template v-slot:productCode="{ row, $index }">
- <div
- v-for="(origin, originIndex) in [getOriginInfo(row)]"
- :key="(origin && origin.id) || 'code-' + $index + '-' + originIndex"
- class="replace-code-cell"
- >
- <span class="code-text" :title="row.productCode">{{
- row.productCode || '-'
- }}</span>
- <el-tooltip v-if="origin" placement="top" effect="dark">
- <div class="replace-origin-code">
- <el-tag type="warning" size="mini" effect="dark">替</el-tag>
- <span class="origin-code-text">{{
- origin.productCode || '-'
- }}</span>
- </div>
- <div slot="content" class="relation-tip">
- <div>替原物品名称:{{ origin.productName || '-' }}</div>
- <div>替原物品编码:{{ origin.productCode || '-' }}</div>
- <div>规格:{{ origin.specification || '-' }}</div>
- <div v-if="origin.orderNo">订单编码:{{ origin.orderNo }}</div>
- </div>
- </el-tooltip>
- <span v-else class="relation-empty">未关联</span>
- </div>
- </template>
- <template v-slot:stockLedger="scope">
- <el-form-item>
- <el-popover
- @hide="() => (selection = [])"
- placement="right"
- width="60%"
- trigger="hover"
- >
- <ele-pro-table
- :ref="'childrenTable' + scope.$index"
- row-key="id"
- max-height="300px"
- :selection.sync="selection"
- :needPage="false"
- :columns="sub1ChildrenColumns"
- :toolkit="[]"
- :datasource="scope.row.sendProductDetail"
- cache-key="stockLedgerRoleTable"
- class="time-form"
- @header-dragend="onSub1HeaderDragend">
- <!-- 表头工具栏 -->
- <template v-slot:toolbar="childrenScope">
- <div class="headbox">
- <el-button
- size="small"
- type="primary"
- icon="el-icon-plus"
- class="ele-btn-icon"
- @click="stockLedgerSelect(scope.row, scope.$index)"
- >
- 选择
- </el-button>
- <el-button
- size="small"
- type="danger"
- icon="el-icon-delete"
- class="ele-btn-icon"
- :disabled="!selection.length"
- @click="stockLedgerRemove(scope.$index)"
- >
- 删除
- </el-button>
- </div>
- </template>
- </ele-pro-table>
- <el-button type="text" slot="reference">明细</el-button>
- </el-popover>
- </el-form-item>
- </template>
- <template v-slot:packagingStrength="scope">
- <el-form-item
- :prop="'datasource.' + scope.$index + '.packagingStrength'"
- >
- <DictSelection
- dict-name="包装强度"
- v-model="scope.row.extField.packagingStrength"
- ></DictSelection>
- </el-form-item>
- </template>
- <template v-slot:packagingDensity="scope">
- <el-form-item
- :prop="'datasource.' + scope.$index + '.packagingDensity'"
- >
- <DictSelection
- dict-name="包装密度"
- v-model="scope.row.extField.packagingDensity"
- ></DictSelection>
- </el-form-item>
- </template>
- <template v-slot:totalCount="scope">
- <el-form-item
- :prop="'datasource.' + scope.$index + '.totalCount'"
- :rules="[
- { required: true, message: '请输入数字', trigger: 'blur' },
- { validator: validateTotalCount(scope.row), trigger: 'blur' }
- ]"
- >
- <el-input
- v-model="scope.row.totalCount"
- @input="(val) => changeNum(val, scope.$index)"
- ></el-input>
- </el-form-item>
- </template>
- <template v-slot:batchNo="scope">
- <el-form-item :prop="'datasource.' + scope.$index + '.batchNo'">
- <el-input v-model="scope.row.batchNo"></el-input>
- </el-form-item>
- </template>
- <template v-slot:blockCount="scope">
- <el-form-item
- :prop="'datasource.' + scope.$index + '.blockCount'"
- :rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
- >
- <el-input
- v-model="scope.row.blockCount"
- @input="
- (val) => tableHandleKeyUp(scope.row, scope.$index, 'blockCount')
- "
- ></el-input>
- </el-form-item>
- </template>
- <template v-slot:receiveTotalWeight="scope">
- <el-form-item
- :prop="'datasource.' + scope.$index + '.receiveTotalWeight'"
- :rules="[
- {
- required: entrustedCode && pricingWay == 2,
- message: '请输入数字',
- trigger: 'blur'
- }
- ]"
- >
- <!-- :disabled="!entrustedCode" -->
- <el-input-number
- :controls="false"
- v-model="scope.row.receiveTotalWeight"
- @blur="changeSendTotalWeight(scope.$index)"
- style="width: 60%; margin-right: 10px"
- >
- </el-input-number>
- <el-button
- size="small"
- type="primary"
- v-if="entrustedCode"
- @click.native="(e) => handleInnerBound(e, scope.row, scope.$index)"
- >选择
- </el-button>
- </el-form-item>
- </template>
- <template v-slot:sendTotalWeight="scope">
- <el-form-item :prop="'datasource.' + scope.$index + '.sendTotalWeight'">
- <el-input-number
- :controls="false"
- v-model="scope.row.sendTotalWeight"
- style="width: 100%"
- >
- </el-input-number>
- </el-form-item>
- </template>
- <template v-slot:increaseTotalWeight="scope">
- <el-form-item
- :prop="'datasource.' + scope.$index + '.increaseTotalWeight'"
- >
- <el-input-number
- :controls="false"
- v-model="scope.row.increaseTotalWeight"
- style="width: 100%"
- >
- </el-input-number>
- </el-form-item>
- </template>
- <template v-slot:warehouseId="scope">
- <el-form-item
- :prop="'datasource.' + scope.$index + '.warehouseId'"
- :rules="[{ required: true, message: '请选择仓库', trigger: 'blur' }]"
- >
- <el-select
- v-model="scope.row.warehouseId"
- placeholder="请选择"
- @change="warehouseChange(scope.$index, scope.row)"
- >
- <el-option
- v-for="item in warehouseList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </template>
- <template v-slot:customerMark="{ row, $index }">
- <el-form-item
- :prop="'datasource.' + $index + '.customerMark'"
- :rules="{
- required: false,
- message: '请输入客户代号',
- trigger: 'change'
- }"
- >
- <el-input v-model="row.customerMark" placeholder="请输入"></el-input>
- </el-form-item>
- </template>
- <template v-slot:guaranteePeriod="scope">
- <div class="period">
- <div class="borderleftnone">
- <el-form-item
- style="margin-bottom: 20px"
- :prop="'datasource.' + scope.$index + '.guaranteePeriod'"
- :rules="{
- pattern: numberReg,
- message: '请输入数字',
- trigger: 'blur'
- }"
- >
- <el-input
- v-model="scope.row.guaranteePeriod"
- @change="
- setDeliveryDays(scope.row, scope.$index, 'guaranteePeriod')
- "
- placeholder="请输入"
- ></el-input>
- </el-form-item>
- </div>
- <div class="borderrightnone">
- <DictSelection
- dictName="质保期单位"
- clearable
- v-model="scope.row.guaranteePeriodUnitCode"
- @change="
- setDeliveryDays(scope.row, scope.$index, 'guaranteePeriod')
- "
- >
- </DictSelection>
- </div>
- </div>
- </template>
- <template v-slot:singleWeight="scope">
- <el-form-item
- style="margin-bottom: 20px"
- :rules="{
- required: false,
- trigger: ['change', 'blur']
- }"
- :prop="'datasource.' + scope.$index + '.singleWeight'"
- >
- <el-input
- v-model="scope.row.singleWeight"
- @input="singleWeightChange(scope.row, scope.$index)"
- placeholder="请输入"
- ></el-input>
- </el-form-item>
- </template>
- <template v-slot:singlePrice="scope">
- <el-form-item
- style="margin-bottom: 20px"
- :prop="'datasource.' + scope.$index + '.singlePrice'"
- :rules="{
- required: false,
- pattern: numberReg,
- message: '请输入正确的单价',
- trigger: 'change'
- }"
- >
- <el-input
- v-model="scope.row.singlePrice"
- placeholder="请输入"
- @input="getNumTotalPrice"
- >
- <template slot="append">元</template>
- </el-input>
- </el-form-item>
- </template>
- <template v-slot:warehouseNum="scope">
- <el-form-item>
- {{ scope.row.warehouseNum }}
- </el-form-item>
- </template>
- <template v-slot:headerWarehouseId="{ column }">
- <span class="is-required">{{ column.label }}</span>
- </template>
- <template v-slot:headerTotalCount="{ column }">
- <span :class="{ 'is-required': entrustedCode && pricingWay == 2 }">{{
- column.label
- }}</span>
- </template>
- <!-- 操作列 -->
- <template v-slot:action="scope">
- <el-popconfirm
- class="ele-action"
- title="确定要删除吗?"
- @confirm="remove(scope.$index)"
- >
- <template v-slot:reference>
- <el-link type="danger" :underline="false" icon="el-icon-delete">
- 删除
- </el-link>
- </template>
- </el-popconfirm>
- </template>
- </ele-pro-table>
- <!--入库详情-->
- <innertboundDetailsDialog
- v-if="innerboundDetailsDialogFlag"
- ref="innerboundDetailsDialogRef"
- :innerboundDetailsDialogFlag.sync="innerboundDetailsDialogFlag"
- @saveDate="saveInnerDate"
- ></innertboundDetailsDialog>
- </el-form>
- </template>
- <script>
- import { numberReg } from 'ele-admin';
- import dictMixins from '@/mixins/dictMixins';
- import {
- getWarehouseList,
- getWarehouseOutStock
- } from '@/api/saleManage/saleorder';
- import { copyObj } from '@/utils/util';
- import innertboundDetailsDialog from '@/BIZComponents/innerboundDetailsDialog.vue';
- import stockLedgerDialog from './stockLedger/stockLedgerDialog.vue';
- import getDynamicsColumns from '@/mixins/getDynamicsColumns';
- // import fileMain from '@/components/addDoc/index.vue';
- import { lbjtList } from '@/enum/dict.js';
- import tabMixins from '@/mixins/tableColumnsMixin';
- export default {
- mixins: [dictMixins, getDynamicsColumns, tabMixins],
- props: {
- orderId: String,
- entrustedCode: String,
- pricingWay: [String, Number],
- isShowAdd: {
- type: Boolean,
- default: true
- },
- disabled:{
- type: Boolean,
- default: false
- },
- // 原产品列表(只读详情场景直接传数组)
- originList: {
- type: Array,
- default: () => []
- },
- // 编辑场景下由父组件实时提供物品清单,避免两边数据不同步
- getOriginList: {
- type: Function,
- default: null
- },
- },
- components: {
- // fileMain,
- innertboundDetailsDialog,
- stockLedgerDialog
- },
- emits: ['relation-change'],
- data() {
- const defaultForm = {
- key: null,
- endTime: '',
- isFirst: 0,
- name: '',
- startTime: '',
- workHour: '',
- technicalDrawings: []
- // warehouseCode:"",
- // warehouseId:'',
- // warehouseName:'',
- };
- return {
- cacheKeyUrl: 'views_saleManage_saleOrder_invoice_components_replaceTable',
- current: {},
- childrenColumns: [
- {
- width: 45,
- type: 'selection',
- columnKey: 'selection',
- align: 'center'
- },
- {
- width: 45,
- type: 'index',
- columnKey: 'index',
- align: 'center',
- fixed: 'left'
- },
- {
- minWidth: 100,
- prop: 'code',
- label: '编码',
- align: 'center'
- },
- {
- minWidth: 140,
- prop: 'barcodes',
- label: '发货条码',
- align: 'center'
- },
- {
- minWidth: 100,
- prop: 'engrave',
- label: '刻码',
- align: 'center'
- }
- ],
- selection: [],
- discountTotalPrice: 0.0,
- allPrice: 0.0,
- curIndex: null,
- innerboundDetailsDialogFlag: false,
- stockLedgerDialogFlag: false,
- numberReg,
- defaultForm,
- warehouseList: [],
- dynamicsColumns: [],
- form: {
- datasource: []
- },
- rules: {}
- };
- },
- created() {
- getWarehouseList().then((res) => {
- this.warehouseList = res;
- });
- // 子表列宽缓存,与主表列配置隔离
- this.loadScopedColumnWidth('sub1');
- },
- computed: {
- // 子表(childrenColumns)列宽持久化,scope: sub1
- sub1ChildrenColumns() {
- return this.applyScopedColumnWidth(this.childrenColumns, 'sub1');
- },
- canHandl() {
- return this.form.datasource.length;
- },
- contractId() {
- return this.$store.state.order.contractId;
- },
- clientEnvironmentId() {
- return this.$store.state.user.info.clientEnvironmentId;
- },
- columns() {
- this.columnsVersion; // mixin 触发重算
- return this.applyColumnWidth([
- {
- width: 45,
- type: 'index',
- columnKey: 'index',
- align: 'center',
- fixed: 'left'
- },
- {
- width: 200,
- prop: 'productName',
- label: '名称',
- slot: 'productName',
- align: 'center'
- },
- {
- width: 190,
- prop: 'productCode',
- label: '编码',
- slot: 'productCode',
- align: 'center'
- },
- {
- width: 120,
- prop: 'specification',
- label: '规格',
- slot: 'specification',
- align: 'center'
- },
- {
- width: 120,
- prop: 'totalCount',
- label: '发货数量',
- slot: 'totalCount',
- headerSlot: 'headerTotalCount',
- align: 'center'
- },
- {
- width: 80,
- prop: 'measuringUnit',
- label: '计量单位',
- slot: 'measuringUnit',
- align: 'center'
- },
- {
- width: 120,
- prop: 'blockCount',
- label: '发货块数',
- slot: 'blockCount',
- align: 'center',
- show: this.clientEnvironmentId == '4'
- },
- {
- width: 120,
- prop: 'customerMark',
- label: '客户代号',
- slot: 'customerMark',
- align: 'center'
- },
- {
- width: 200,
- prop: 'warehouseId',
- label: '仓库名称',
- slot: 'warehouseId',
- headerSlot: 'headerWarehouseId',
- align: 'center'
- },
- {
- width: 100,
- prop: 'stockLedger',
- label: '发货明细',
- slot: 'stockLedger',
- align: 'center'
- },
- {
- width: 120,
- prop: 'singleWeight',
- label: '单重',
- slot: 'singleWeight',
- align: 'center'
- },
- {
- width: 200,
- prop: 'receiveTotalWeight',
- label: '收货总重',
- slot: 'receiveTotalWeight',
- align: 'center',
- headerSlot: 'headerTotalCount'
- },
- {
- width: 100,
- prop: 'sendTotalWeight',
- label: '发货总重',
- slot: 'sendTotalWeight',
- align: 'center'
- },
- {
- width: 100,
- prop: 'increaseTotalWeight',
- label: '增重重量',
- slot: 'increaseTotalWeight',
- align: 'center'
- },
- {
- width: 100,
- prop: 'weightUnit',
- label: '重量单位',
- slot: 'weightUnit',
- align: 'center'
- },
- {
- width: 160,
- prop: 'singlePrice',
- label: '单价',
- slot: 'singlePrice',
- align: 'center'
- },
- {
- width: 160,
- prop: 'discountSinglePrice',
- label: '折后单价',
- slot: 'discountSinglePrice',
- align: 'center'
- },
- {
- width: 120,
- prop: 'totalPrice',
- label: '合计',
- slot: 'totalPrice',
- align: 'center'
- },
- {
- width: 120,
- prop: 'discountTotalPrice',
- label: '折后合计',
- slot: 'discountTotalPrice',
- align: 'center'
- },
- {
- width: 200,
- prop: 'productCategoryName',
- label: '类型',
- slot: 'productCategoryName',
- align: 'center'
- },
- {
- width: 160,
- prop: 'batchNo',
- label: '批次号',
- slot: 'batchNo',
- align: 'center'
- },
- {
- minWidth: 180,
- prop: 'systemBatchNo',
- label: '系统内部批次号',
- align: 'center',
- formatter: (row) => row.systemBatchNo || '-'
- },
- {
- width: 160,
- prop: 'productBrand',
- label: '牌号',
- slot: 'productBrand',
- align: 'center'
- },
- {
- width: 120,
- prop: 'modelType',
- label: '型号',
- slot: 'modelType',
- align: 'center'
- },
- {
- width: 120,
- prop: 'imgCode',
- align: 'center',
- label: '图号/件号',
- showOverflowTooltip: true
- },
- {
- width: 120,
- prop: 'produceType',
- align: 'center',
- label: '属性类型',
- showOverflowTooltip: true,
- formatter: (row, column) => {
- if(row.produceType){
- return row.produceType.map(item=>{
- return lbjtList[item]
- }).toString()
- }
-
- }
- },
- ...this.dynamicsColumns,
- {
- width: 80,
- prop: 'deliveryDays',
- label: '交期(天)',
- slot: 'deliveryDays',
- align: 'center'
- },
- {
- width: 160,
- prop: 'deliveryDeadline',
- label: '交期截止日期',
- slot: 'deliveryDeadline',
- align: 'center'
- },
- {
- width: 200,
- prop: 'guaranteePeriod',
- label: '有效期',
- slot: 'guaranteePeriod',
- formatter: (_row, _column, cellValue) => {
- return (
- (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
- );
- },
- align: 'center'
- },
- {
- width: 160,
- prop: 'guaranteePeriodDeadline',
- label: '有效截止日期',
- slot: 'guaranteePeriodDeadline',
- align: 'center'
- },
- {
- width: 130,
- prop: 'technicalAnswerName',
- label: '技术答疑人',
- slot: 'technicalAnswerName',
- align: 'center'
- },
- {
- width: 220,
- prop: 'technicalParams',
- label: '技术参数',
- slot: 'technicalParams',
- align: 'center'
- },
- {
- width: 240,
- prop: 'technicalDrawings',
- label: '技术图纸',
- slot: 'technicalDrawings',
- align: 'center'
- },
- {
- width: 220,
- prop: 'remark',
- label: '备注',
- slot: 'remark',
- align: 'center'
- },
- {
- columnKey: 'action',
- label: '操作',
- width: 180,
- align: 'center',
- resizable: false,
- slot: 'action',
- fixed: 'right',
- showOverflowTooltip: true
- }
- ]);
- }
- },
- methods: {
- // 取当前生效的原产品列表:优先实时 getter,其次静态数组
- resolveOriginRows() {
- if (typeof this.getOriginList === 'function') {
- const rows = this.getOriginList();
- if (Array.isArray(rows)) {
- return rows;
- }
- }
- return Array.isArray(this.originList) ? this.originList : [];
- },
- // relationId 指向被替代的原产品(新增时是 tempId,回显时是产品 id)
- getOriginInfo(row) {
- const relationId = row && row.relationId;
- if (
- relationId === undefined ||
- relationId === null ||
- relationId === ''
- ) {
- return null;
- }
- const key = String(relationId);
- return (
- this.resolveOriginRows().find((item) => {
- if (
- item.id !== undefined &&
- item.id !== null &&
- item.id !== '' &&
- String(item.id) === key
- ) {
- return true;
- }
- return (
- item.tempId !== undefined &&
- item.tempId !== null &&
- item.tempId !== '' &&
- String(item.tempId) === key
- );
- }) || null
- );
- },
- // 子表表头拖拽列宽持久化(scope: sub1)
- onSub1HeaderDragend(newWidth, oldWidth, column) {
- this.persistScopedColumnWidth(
- 'sub1',
- column && (column.property || column.columnKey),
- newWidth
- );
- },
- //发货明细选择
- stockLedgerSelect(row, index) {
- this.curIndex = index;
- this.stockLedgerDialogFlag = true;
- this.$nextTick(() => {
- this.$refs.stockLedgerDialogRef.init(row.sendProductDetail, row);
- });
- },
- //获取
- getStockLedger(sendProductDetail) {
- if (!this.form.datasource[this.curIndex].sendProductDetail)
- this.form.datasource[this.curIndex].sendProductDetail = [];
- let row = this.form.datasource[this.curIndex];
- row.sendProductDetail.push(...sendProductDetail);
- this.form.datasource[this.curIndex] = row;
- this.$refs['childrenTable' + this.curIndex].reload();
- this.$refs.table.reload();
- },
- //删除发货明细
- stockLedgerRemove(PIndex) {
- let row = this.form.datasource[PIndex];
- this.selection.forEach((item) => {
- let index = row.sendProductDetail.findIndex((i) => i.id == item.id);
- row.sendProductDetail.splice(index, 1);
- });
- this.form.datasource[PIndex] = row;
- this.$refs['childrenTable' + PIndex].reload();
- this.$refs.table.reload();
- this.selection = [];
- },
- async warehouseChange(index, row) {
- let warehouseIds =
- this.form.datasource
- .filter(
- (item, i) => row.productCode == item.productCode && index != i
- )
- .map((item) => item.warehouseId) || [];
- const data = this.warehouseList.find(
- (item) => item.id == row.warehouseId
- );
- if (warehouseIds.length > 0 && warehouseIds.includes(row.warehouseId)) {
- row.warehouseId = '';
- return this.$message.error('同一个产品不能选择相同的仓库');
- }
- this.$set(this.form.datasource[index], 'warehouseName', data.name);
- this.$set(this.form.datasource[index], 'warehouseCode', data.code);
- const warehouseOutStock = await getWarehouseOutStock({
- warehouseId: data.id,
- code: row.productCode
- });
- this.$set(
- this.form.datasource[index],
- 'warehouseNum',
- warehouseOutStock
- );
- },
- //修改发货总重
- changeSendTotalWeight(index) {
- this.curIndex = index;
- this.setIcreaseTotalWeight();
- },
- //入库单详情
- handleInnerBound(e, rows, index) {
- this.curIndex = index;
- this.innerboundDetailsDialogFlag = true;
- this.$nextTick(() => {
- let row = {
- code: this.entrustedCode
- };
- this.$refs.innerboundDetailsDialogRef.init(row);
- });
- },
- //选择入库单信息
- saveInnerDate(data = []) {
- let totalWeight = data.reduce((num, row) => {
- num += Number(row.weight);
- return num;
- }, 0);
- this.$set(
- this.form.datasource[this.curIndex],
- 'receiveTotalWeight',
- totalWeight
- );
- this.setIcreaseTotalWeight();
- },
- //修改数量更新合计/总重
- changeNum(val, index,type) {
- this.curIndex = index;
- if (this.pricingWay == 2) {
- if (val != this.form.datasource[index].orderTotalCount) {
- this.$set(this.form.datasource[index], 'receiveTotalWeight', '');
- this.$set(
- this.form.datasource[index],
- 'sendTotalWeight',
- Number(val) * Number(this.form.datasource[index].singleWeight)
- );
- } else {
- let find =
- this.oldReceiveTotalWeight.find(
- (key) =>
- key.productCode == this.form.datasource[index].productCode
- ) || {};
- this.$set(
- this.form.datasource[index],
- 'receiveTotalWeight',
- find.oldReceiveTotalWeight || ''
- );
- this.$set(
- this.form.datasource[index],
- 'sendTotalWeight',
- Number(val) * Number(this.form.datasource[index].singleWeight)
- );
- }
- this.setIcreaseTotalWeight();
- this.getWeightPrice();
- } else {
- if (this.form.datasource[index].singlePrice) {
- this.$set(
- this.form.datasource[index],
- 'totalPrice',
- (Number(this.form.datasource[index].singlePrice) * val).toFixed(2)
- );
- this.$set(
- this.form.datasource[index],
- 'discountTotalPrice',
- (
- Number(this.form.datasource[index].discountSinglePrice) * val
- ).toFixed(2)
- );
- }
- this.$set(
- this.form.datasource[index],
- 'sendTotalWeight',
- Number(this.form.datasource[index].totalCount) *
- Number(this.form.datasource[index].singleWeight)
- );
- this.$set(
- this.form.datasource[index],
- 'increaseTotalWeight',
- Number(this.form.datasource[index].totalCount) *
- Number(this.form.datasource[index].singleWeight)
- );
- }
- if(!type){
- this.tableHandleKeyUp(this.form.datasource[index], index, 'sum');
- }
- },
- //计算单重
- singleWeightChange(row, index) {
- if (row && row.singleWeight && row.totalCount) {
- row.totalWeight = (row.singleWeight * row.totalCount).toFixed(2) || 0;
- this.$set(
- this.form.datasource[index],
- 'totalWeight',
- row.totalWeight
- );
- } else {
- this.$set(this.form.datasource[index], 'totalWeight', '');
- }
- },
- getWeightPrice() {
- let increaseTotalWeight =
- this.form.datasource[this.curIndex].increaseTotalWeight;
- let singlePrice = this.form.datasource[this.curIndex].singlePrice;
- let discountSinglePrice =
- this.form.datasource[this.curIndex].discountSinglePrice;
- this.$set(
- this.form.datasource[this.curIndex],
- 'totalPrice',
- (Number(increaseTotalWeight) * Number(singlePrice)).toFixed(2)
- );
- this.$set(
- this.form.datasource[this.curIndex],
- 'discountTotalPrice',
- (Number(discountSinglePrice) * Number(increaseTotalWeight)).toFixed(2)
- );
- },
- //设置增重总重
- setIcreaseTotalWeight() {
- let receiveTotalWeight = Number(
- this.form.datasource[this.curIndex].receiveTotalWeight
- );
- let sendTotalWeight = Number(
- this.form.datasource[this.curIndex].sendTotalWeight
- );
- this.$set(
- this.form.datasource[this.curIndex],
- 'increaseTotalWeight',
- (sendTotalWeight - receiveTotalWeight).toFixed(2)
- );
- if (this.pricingWay == 2) {
- this.getWeightPrice();
- }
- this.$refs.table.reload();
- },
- // 表格:模数、数量(方)、块数输入框 输入事件
- tableHandleKeyUp(row, index, name) {
- console.log(row, 'row');
- // && this.clientEnvironmentId == '4'
- if (row.specification && this.clientEnvironmentId == '4') {
- let modelArr = row.specification.split('*');
- let modelLong = modelArr[0]; // model规格长度
- let modeWide = modelArr[1]; // model规格宽度
- let modeHight = modelArr[2].substr(0, modelArr[2].indexOf('cm')); // model规格高度
- modeHight = Number(modeHight);
- if (name === 'sum') {
- row.blockCount = Math.floor(
- row.totalCount / ((modelLong * modeWide * modeHight) / 1000000)
- );
- } else if (name === 'blockCount') {
- row.totalCount =
- (Number(row.blockCount) * modelLong * modeWide * modeHight) /
- 1000000;
- this.changeNum(row.totalCount, index,true);
- }
- }
- },
- //改变数量
- changeCount(row, index, type) {
- this.getNumTotalPrice();
- if (type != 'tableHandleKeyUp') {
- this.tableHandleKeyUp(this.form.datasource[index], index, 'sum');
- }
- },
- //计算总金额
- getNumTotalPrice(sum = 0) {
- this.form.datasource.forEach((r, index) => {
- this.$set(
- r,
- 'discountSinglePrice',
- r.singlePrice ? Number(r.singlePrice) : ''
- );
- if (r.singlePrice && r.totalCount) {
- console.log(r, 'r.totalPrice');
- r.totalPrice = this.getAllPrice(r);
- r.discountTotalPrice = this.getDiscountTotalPrice(r);
- this.$set(
- this.form.datasource[index],
- 'totalPrice',
- Number(r.totalPrice)
- );
- this.$set(
- this.form.datasource[index],
- 'discountTotalPrice',
- Number(r.discountTotalPrice)
- );
- sum += Number(r.totalPrice);
- } else {
- this.$set(r, 'totalPrice', '');
- this.$set(r, 'discountTotalPrice', '');
- }
- });
- return isNaN(sum) ? 0 : sum;
- },
- //设置优惠后总金额修改产品单价
- discountInputByOrder(val) {
- this.form.discountTotalPrice = val;
- //获取优惠金额和总计的差价
- this.form.datasource.forEach((item) => {
- if (val === 0) {
- item.discountTotalPrice = 0;
- item.discountSinglePrice = 0;
- return;
- }
- if (!val) {
- item.discountTotalPrice = item.totalPrice;
- item.discountSinglePrice = item.singlePrice;
- return;
- }
- //获取折让单价
- item.discountSinglePrice = this.getDiscountSinglePrice(item);
- item.discountTotalPrice = this.getDiscountTotalPrice(item);
- });
- this.$refs.table.reload();
- },
- //获取折让单价
- getDiscountSinglePrice(row) {
- let num =
- (Number(this.form.discountTotalPrice) / Number(this.allPrice)) *
- Number(row.singlePrice);
- return isNaN(num) ? '' : num;
- },
- //获取合计
- getAllPrice(row) {
- let num = 0;
- switch (this.pricingWay) {
- case 1: //按数量计价计算总金额
- num = Number(row.singlePrice) * Number(row.totalCount);
- break;
- case 2: //按重量计价计算总金额
- num =
- Number(row.singlePrice) *
- Number(row.totalCount) *
- Number(row.singleWeight);
- break;
- }
- return isNaN(num) ? '' : num.toFixed(2);
- },
- //获取折让合计
- getDiscountTotalPrice(row) {
- let num = 0;
- switch (this.pricingWay) {
- case 1: //按数量计价计算折让合计
- num = Number(row.discountSinglePrice) * Number(row.totalCount);
- break;
- case 2: //按重量计价计算折让合计
- num =
- Number(row.discountSinglePrice) *
- Number(row.totalCount) *
- Number(row.singleWeight);
- break;
- }
- return isNaN(num) ? '' : num.toFixed(2);
- },
- validateTotalCount(row) {
- return (rule, value, callback) => {
- if (isNaN(value) || Number(value) <= 0) {
- this.$message.error('请输入大于0的数');
- callback(new Error('请输入大于0的数字'));
- } else if (Number(value) > row.warehouseNum) {
- // this.$message.error('输入的数字不能大于仓库物品数');
- // callback(new Error('输入的数字不能大于仓库物品数'));
- callback();
- } else if (Number(value) > row.orderTotalCount) {
- this.$message.error('输入的数字不能大于最大发货值');
- callback(new Error('输入的数字不能大于最大发货值'));
- } else {
- callback();
- }
- };
- },
- // 返回列表数据
- getTableValue() {
- let comitDatasource = this.form.datasource;
- if (comitDatasource.length === 0) return [];
- comitDatasource.forEach(async (v) => {
- v.totalCount = Number(v.totalCount);
- v.technicalDrawings = Array.isArray(v.technicalDrawings)
- ? v.technicalDrawings
- : [];
- v.customerReqFiles = Array.isArray(v.customerReqFiles)
- ? v.customerReqFiles
- : [];
- v.industryArtFiles = v.industryArtFiles || [];
- v.otherFiles = v.otherFiles || [];
- });
- return comitDatasource;
- },
- getPrice() {
- return [this.allPrice];
- },
- //修改回显
- putTableValue(data, type) {
- if (data) {
- if (type == 'add') {
- data.forEach((item) => {
- // 库存台账带入的仓库可能不在仓库下拉列表中,找不到时保留原值,避免中断添加流程
- const warehouse = this.warehouseList.find(
- (val) => val.id == item.warehouseId
- );
- if (warehouse) {
- item['warehouseId'] = warehouse.id;
- item['warehouseName'] = warehouse.name;
- item['warehouseCode'] = warehouse.code;
- }
- item.totalPrice = 0;
- item.singlePrice = 0;
- item.discountSinglePrice = 0;
- item.discountTotalPrice = 0;
- });
- }
- const appendStart = this.form.datasource.length;
- this.form.datasource = [...this.form.datasource,...data];
- const startIndex = this.form.datasource.length - data.length;
- data.forEach(async (item, i) => {
- const index = startIndex + i;
- if (item.warehouseId) {
- this.$set(
- this.form.datasource[appendStart + index],
- 'warehouseNum',
- await getWarehouseOutStock({
- warehouseId: item.warehouseId,
- code: item.productCode
- })
- );
- }
- //保存初始收货总重
- this.oldReceiveTotalWeight = this.form.datasource.map((item) => {
- return {
- productCode: item.productCode,
- oldReceiveTotalWeight: item.receiveTotalWeight
- };
- });
- this.form.datasource.forEach((item, index) => {
- item.sendTotalWeight =
- item.sendTotalWeight ||
- Number(item.totalCount) * Number(item.singleWeight) ||
- 0;
- if (this.outsourceSendCode) {
- item.increaseTotalWeight =
- Number(item.receiveTotalWeight) -
- Number(item.sendTotalWeight);
- } else {
- item.increaseTotalWeight =
- item.increaseTotalWeight || item.receiveTotalWeight || 0;
- }
- this.changeNum(item.totalCount, index);
- });
- });
- }
- this.$emit('relation-change');
- },
- remove(i) {
- this.form.datasource.splice(i, 1);
- this.setSort();
- this.$emit('relation-change');
- },
- // 清空表格
- restTable() {
- this.form.datasource = [];
- this.$emit('relation-change');
- },
- // 重新排序
- setSort() {
- this.form.datasource.forEach((n, index) => {
- n.key = index + 1;
- });
- },
- validateForm(callback) {
- //开始表单校验
- this.$refs.form.validate((valid) => {
- callback(valid);
- });
- }
- }
- };
- </script>
- <style lang="scss" scoped>
- .headbox {
- display: flex;
- justify-content: flex-start;
- align-items: center;
- .amount {
- font-size: 14px;
- font-weight: bold;
- padding-right: 30px;
- }
- }
- .time-form .el-form-item {
- margin-bottom: 0 !important;
- }
- ::v-deep .period {
- display: flex;
- .borderleftnone {
- .el-input--medium .el-input__inner {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- }
- }
- .borderrightnone {
- .el-input--medium .el-input__inner {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
- }
- }
- ::v-deep .time-form tbody > tr:hover > td {
- background-color: transparent !important;
- }
- ::v-deep .time-form .el-table tr {
- background-color: #ffffff;
- }
- .pricebox {
- display: flex;
- justify-content: flex-start;
- align-items: center;
- font-weight: bold;
- }
- .replace-code-cell {
- display: flex;
- flex-direction: column;
- align-items: center;
- line-height: 1.5;
- }
- .code-text {
- max-width: 100%;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .replace-origin-code {
- display: flex;
- align-items: center;
- justify-content: center;
- max-width: 100%;
- margin-top: 2px;
- }
- .origin-code-text {
- margin-left: 4px;
- color: #e6a23c;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .relation-empty {
- margin-top: 2px;
- font-size: 12px;
- color: #c0c4cc;
- }
- </style>
|