12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097 |
- <script>
- import { editColumns, editTabColumns, forbidden, SelectColumns } from "./initColumn";
- import orderApi from "@/api/business/purchase/purchase-order";
- import { initDicts, initRules, initParams } from "@/utils/init/index.js";
- import { tax, currency } from "@/components/popover-select-v2/fetch";
- import VirtualScroll from 'el-table-virtual-scroll';
- import { VirtualColumn } from 'el-table-virtual-scroll';
- export default {
- name: "EditPurchaseOrderDrawer",
- dicts: initDicts(SelectColumns),
- components: {
- 'virtual-scroll':VirtualScroll,VirtualColumn,
- FileUploadCenter: () => import('../components/FileUploadCenter/index.vue'),
- BatchImport: () => import("@/components/BatchImport/index.vue"),
- },
- data() {
- return {
- size: "mini",
- visible: false,
- loading: false,
- tabLoading:false,
- columns: editColumns,
- rules: initRules(editColumns),
- params: {
- ...initParams(editColumns),
- puOrderItemList: [],
- puOrderExecuteList: [],
- },
- tabColumns: editTabColumns,
- tabName: "puOrderItemList",
- count:1,
- tableData:[], //虚拟滚动加载显示的数据
- };
- },
- computed: {
- role:{
- get(){
- let {roles} = this.$store.state.user;
- return roles.find(item => item === "syfz-purchaseorder") || "procurementManager";
-
- },
- set(){}
- },
- tabHeight:{
- get(){
- let length = this.params['puOrderItemList'].filter(item => item.delFlag === '0').length;
- return `${length ?
- (length > 8 ? 500 :
- (length *60) +170)
- : 120}px`
- },
- set(){}
- },
- },
- watch: {
- "params.contractType": function (newProp) {
- this.tabColumns = editTabColumns.filter((element) =>
- newProp === "1" ? element.key !== "puOrderItemList" : element
- );
- this.tabName = this.tabColumns[0].key;
- },
- tabName: function (newProp) {
- const { id } = this.params;
- // this.fetchTable(id, newProp);
- },
- 'params.puOrderItemList': {
- handler(nVal, oVal) {
- this.params.source == 3 &&
- this.handleSynchronousMaterial('puOrderItemList', 'puOrderExecuteList');
- },
- deep: true,
- immediate: true
- },
- 'params.puOrderExecuteList': {
- handler(nVal, oVal) {
- this.params.source == 3 &&
- this.handleSynchronousMaterial('puOrderExecuteList', 'puOrderItemList');
- },
- deep: true,
- immediate: true
- },
- "params.billType":{
- handler(nVal, oVal){
- let billList = ['21-Cxx-02','21-Cxx-04','21-Cxx-10','21-Cxx-14','21-Cxx-09','21-Cxx-17','21-Cxx-18'];
-
- if(billList.find(item => item === nVal)){
- this.rules.warehouseName = [
- { required: true, message: "WMS入库仓库不能为空", trigger: "change" },
- ];
- }else{
- this.rules.warehouseName = null;
- }
- this.count++;
- }
- }
- },
- methods: {
- setVisible(prop) {
- this.visible = prop;
- if(!this.visible){
- this.$refs['orderEditForm'].clearValidate();
- }
- },
- // 同步子表物料
- handleSynchronousMaterial(tableOne, tableTwo) {
- let _this = this;
- // this.params[tableOne]-- -> this.params[tableTwo]
- this.params[tableOne] && this.params[tableOne].length &&
- this.params[tableOne].forEach((item, index) => {
- for (const key in item) {
- if ( _this.params[tableTwo][index] &&
- ( key in _this.params[tableTwo][index])
- ) {
- _this.params[tableTwo][index].material = item.material;
- key !== 'id' && ( _this.params[tableTwo][index][key] = item[key]);
- }
- }
- });
- },
- // 判断属性是否禁用
- async handleIsForbidden(status,source) {
- let { updateColumns, updateTabColumns } = await forbidden(status != '2',source);
- this.columns = updateColumns;
- this.tabColumns = updateTabColumns;
- try {
- const { code, rows} = await orderApi.REFER(
- {
- type:'WAREHOUSE_PARAM',
- search: this.params.warehouseName,
- isPage: true,
- }, {pageNum: 1 , pageSize: 10} );
- if(code ==200){
- this.judgeGoodsAllocation(rows[0].csFlag);
- }
- } catch (error) {
-
- }
- this.count++;
- },
- // 查询详细
- async fetchItem(prop) {
- try {
- this.loading = true;
- const { code, msg, data } = await orderApi.details(prop);
- if (code === 200) {
- this.params = { ...this.params, ...data };
- this.handleIsForbidden(this.params.status,this.params.source);
- }
- } catch (err) {
- //
- } finally {
- this.loading = false;
- }
- },
- // 新增行
- addTableRow(prop) {
- for (const key in this.params) {
- // if (Array.isArray(this.params[key])) {
- if (key === 'puOrderItemList' || key === 'puOrderExecuteList') {
- const arr = this.tabColumns.find(
- (element) => element['key'] === key
- ).tableColumns;
- let rowData = initParams(arr, "key", "value");
- "rowno" in rowData &&
- (rowData["rowno"] = this.params[key].length ?
- this.params[key][this.params[key].length - 1]['rowno'] +1 :
- this.params[key].length + 1
- );
- // 物料
- if("rowNo" in rowData){
- rowData["rowNo"] = this.params[key].length ?
- this.params[key][this.params[key].length - 1]['rowNo'] +1 :
- this.params[key].length + 1;
- // 扣税类别
- rowData["taxDeductClassify"] = '1';
- // 折本汇率
- rowData["exchangeRate"] = '1';
- // 价格类型
- rowData["priceType"] = 'order';
- // 币种
- rowData["currency"] = '1002Z0100000000001K1';
- rowData["currencyName"] = '人民币';
- }
- // 是否完成询价,新增明细行需默认明细为false
- // rowData['whetherCompleteInquiry'] = false;
- rowData['delFlag'] = '0';
- rowData['insertId'] = new Date().getTime();
- this.params[key].push(rowData);
- }
- }
- // const arr = this.tabColumns.find(
- // (element) => element.key === this.tabName
- // ).tableColumns;
- // prop.push(initParams(arr, "key", "value"));
- },
- // 删除行
- async delTableRow(prop, row, name) {
- let delNo = name === 'puOrderItemList' ? 'rowNo' :'rowno';
- if(prop.length === 1){
- this.$alert('订单行不允许为空', '提示', {
- confirmButtonText: '确定',
- callback: action => {
- // this.$message({
- // type: 'info',
- // message: `action: ${ action }`
- // });
- }
- });
- }else{
- for (const key in this.params) {
-
- if (key === 'puOrderItemList' || key === 'puOrderExecuteList') {
- this.params[key].forEach((item,index) =>{
- let flag = key === 'puOrderItemList' ? 'rowNo' :'rowno';
- // if(item.id && item.id === row.id){
- // console.log('删除已有ID的');
- // item['delFlag'] = '2';
- // }
- if(item[flag] && item[flag] === row[delNo]){
- item.id ? (item['delFlag'] = '2'):
- this.params[key].splice(index, 1);
- }
- })
- // this.params[key][index].id ?
- // (this.params[key][index]['delFlag'] = '2') :
- // this.params[key].splice(index, 1);
-
-
- }
- }
-
- await this.handleGetPrice();
- }
- },
- // 取消
- handleCancel() {
- this.params = {
- ...initParams(this.columns),
- puOrderItemList: [],
- puOrderExecuteList: [],
- }
- this.setVisible(false);
- },
- // 判断保存条件
- judgeSaveCondition(cb){
- const _this = this;
- this.$refs['orderEditForm'].validate(async (valid) => {
- if (valid) {
- // 执行结果在审批之后出现
- let validList = _this.params['puOrderItemList'].filter(item => item.delFlag === '0');
- if(!validList.length ){
- _this.$notify.error({
- title: '错误',
- message: '请填写订单行!'
- });
-
- return false;
- }
- // let isPrice = _this.params.puOrderItemList.filter(item => !item.whetherCompleteInquiry);
- // if(isPrice.length && this.role === 'procurementManager'){
- // _this.$notify.error({
- // title: '错误',
- // message: '询价失败!'
- // });
- // return false
- // }
- // console.log(isPrice,'isPrice');
- cb();
- } else {
- _this.$notify.error({
- title: '错误',
- message: '存在必填项未填写'
- });
- console.log('error submit!!');
- return false;
- }
- });
- },
- // 保存
- handleSava() {
- console.log(this.params,'this.params---------');
- this.judgeSaveCondition(async()=>{
- try {
- this.loading = true;
- const { code, msg } = await (this.handleIsRevise() ?
- orderApi.revision(this.params)
- : orderApi.edit(this.params)
- )
- if (code === 200) {
- this.handleCancel();
- }
- } catch (err) {
- //
- } finally {
- this.loading = false;
- }
- })
- },
- beforeOpen() {
- },
- judgeGoodsAllocation(porp){
- if(porp === 'Y'){
- this.rules.goodsAllocationName = [
- { required: true, message: "货位不能为空", trigger: "change" },
- ];
- } else{
- this.rules.goodsAllocationName = null;
- }
- this.count++;
- },
- // 主表参照改变之后
- async handleReferChange(val, type, source){
- // 供应商选择
- if( type === 'SUPPLIER_PARAM' ){
- let page = { pageNum: 1 , pageSize: 10 };
- let relevanceRefer = [
- {
- // 供应商联系人
- key:'supplierContacts',
- params:{
- type:'SUPPLIERCONTACTS_PARAM',
- supplierId:val.id,
- }
- },
- {
- // 供应商业务员
- key:'supplierPersonal',
- params:{
- type:'PSNLICENSE_PARAM',
- supplierId:val.id,
- pkOrg: source.puOrg,
- }
- }
- ]
- try {
- let promiseArr = relevanceRefer.map( (refer) =>{
- return new Promise((resolve,reject)=>{
- orderApi.REFER(
- {
- ...refer.params,
- search: "",
- isPage: true,
- }, page ).then(res=>{
- let {code,rows} = res;
- if (code === 200) {
-
- source[refer.key] = rows[0]? rows[0].id :'';
-
- source[`${refer.key}Name`] = rows[0] ? rows[0].name :'';
-
- resolve();
- }
- })
- })
- })
- Promise.all(promiseArr).then(async()=>{
- // 明细不为空的情况下进行询价
- let detailList = this.params['puOrderItemList'].filter(item => (
- item.material && item.material != ''
- ))
-
- if(detailList.length){
- await this.handleGetPrice();
- }
- })
- } catch (error) {}
-
- }
- // 组织
- if(type === 'ORG_PARAM'){
- for (const key in this.params) {
- // if (Array.isArray(this.params[key])) {
- if (key === 'puOrderItemList' || key === 'puOrderExecuteList') {
- this.params[key] = [];
- }
- else if(key === 'sysFileRecordList'){
- this.params[key] = [];
- }
- else if (
- key != "puOrg" &&
- key != "puOrgName" &&
- key != "buyer" &&
- key != "buyerName" &&
- key != "puDept" &&
- key != "puDeptName" &&
- key != "status" &&
- key != "billDate"
- ) {
- this.params[key] = "";
- } else {
- }
- }
- }
- // WMS仓库
- if(type === 'WAREHOUSE_PARAM'){
- this.judgeGoodsAllocation(val.csFlag);
- source.goodsAllocation = ''
- source.goodsAllocationName = ''
- // this.count++
- }
- },
- // 子表参照改变之后
- async handleTabReferChange(val, type, source) {
- // 触发物料参照
- if (type == "MATERIAL_PARAM" && source.qty && source.qty != "") {
- source['qty'] = 0;
- // source['whetherCompleteInquiry'] = false;
-
- source['taxPrice'] = 0;
- source['money'] = 0;
- source['taxDeductMoneya'] = 0;
- source['price'] = 0;
-
- source['notaxMoney'] = 0;
-
- source['tax'] = 0;
- this.params['qty'] = 0;
- this.params['originalQty'] = 0;
- this.params['money'] = 0;
- this.params['originalMoney'] = 0;
- this.params['notaxMoney'] = 0;
- source.isDrug = val.materialMedcine.isDrug == '0' ? 'Y' : 'N';
-
- // await this.handleGetPrice();
- }
- // 物料触发税率
- if( type == "MATERIAL_PARAM"){
- let {rateCode} = source;
- try {
- // try
- this.loading = true;
- const { ntaxrate } = await tax(rateCode);
- source.tax = ntaxrate === "0E-8" ? 0 : ntaxrate;
- } catch (err) {
- // catch
- console.error(err);
- } finally {
- // finally
- this.loading = false;
- }
- }
- },
- // 子表Select改变之后
- handleSelectChange(val,typeName){
- if(val === 'billType'){
- this.params['billTypeName'] = this.dict.type[typeName].find(item => item.value == this.params[val]).label;
-
- }
- },
- // 子表下拉框改变
- handleTabSelectChange(type,row){
-
- // && row.qty
- if(type == 'priceType' && row.material && row.qty != ""){
- // row['whetherCompleteInquiry'] = false;
- this.handleGetPrice();
- }
- },
- // 子表inputNumber
- handleInputChange(row, type) {
- // 物料数量变化----询价
- if ((type == "qty" || type == "taxPrice" || type == 'taxDeductMoneya') && row.material ) {
- if(this.params.status === '2'){
- // 修订
- this.handleCalculateOrderAmount();
- }else{
- // row['whetherCompleteInquiry'] = false;
- this.handleGetPrice();
- }
- }
- // // 物料数量变化----询价
- // if (type == 'qty' && row.material) {
- // row['whetherCompleteInquiry'] = false;
- // // row.qty && this.handleGetPrice();
- // this.handleGetPrice();
- // }
- },
- // 子表多选框改变
- handleTabCheckbox(type,source){
- // 勾选赠品,价税合计更新为0,含税单价、无税单价更新为0
- if(type === 'isGift' && source.material && source.qty && source.qty != ""){
- // source['whetherCompleteInquiry'] = false;
- this.handleGetPrice()
- }
- },
- // 询价 getPrice
- async handleGetPrice() {
- // if(this.role === 'procurementManager'){
-
- try {
- // action:insert(新增)、revise(修订)、update(编辑)
- let { code, data } = await orderApi.getPrice({
- ...this.params ,
- action: this.handleIsRevise() ? 'revise':'update',
- });
- if (code == 200) {
- this.params = data;
-
- }
- } catch (error) {
- } finally {
- }
- // }
-
- },
- // 修订——计算金额
- async handleCalculateOrderAmount(){
- try {
- let { code, data } = await orderApi.calculateOrderAmount({
- ...this.params,
- action: this.handleIsRevise() ? 'revise':'update',
- });
-
- code == 200 && (this.params = data);
- } catch (error) {}
- finally {}
- },
- // 判断修订还是编辑
- handleIsRevise() {
- return this.params.status == '2';
- },
- // /handleIsRevise() ? scope.row[cColumn.key] : Infinity
- getInputNumberMax(key,row){
- if(key === 'qty'){
- return this.handleIsRevise() ? row['originalQty'] :
- (this.params.source == '3' ? Infinity: row['originalQty'])
-
- }
- return Infinity;
- },
- async handelImport(fileList){
- try {
- let formData = new FormData();
- formData.append('file',fileList[0].raw);
- let tabList = {
- puOrderItemList: [...this.params.puOrderItemList],
- puOrderExecuteList: [...this.params.puOrderExecuteList],
- }
- const blob = new Blob([JSON.stringify(tabList)], {
- type: 'application/json'
- })
- formData.append('tabList',blob);
- this.$modal.loading("正在上传文件,请稍候...");
- let {code,data} = await orderApi.orderImport(formData);
- if(code == 200) {
- // this.tabLoading = true;
- // // puOrderExecuteList puOrderItemList
- // let size = 20;
- // let num = 1;
- // let total = Math.ceil(data['puOrderItemList'].length / size);
- // let resultData = {...data};
-
- // let intervalPush = setInterval(()=>{
- // if(num > total){
-
- // clearInterval(intervalPush);
- // this.tabLoading = false;
-
- // this.handleGetPrice();
- // }
- // for (const key in resultData) {
- // resultData[key].slice(size*(num-1), (size*num) ).forEach(item =>{
- // this.params[key].push(item);
- // })
-
- // }
- // num++;
- // },200);
- for (const key in data) {
- this.params[key].push(...data[key]);
- }
-
- let {setVisible} = this.$refs.batchImport;
-
- setVisible(false);
-
- // if(num > total)
- this.handleGetPrice();
-
- }
-
- } catch (error) {
-
- }finally{
- this.$modal.closeLoading();
-
- }
- },
- async handleTemDownload(){
- this.download('/pu/order/downloadFailData',{}, `物料信息模板${new Date().getTime()}.xlsx`);
- },
- getSummaries(param){
- const { columns, data } = param;
- const sums = [];
- let { tabColumns, tabName } = this;
- columns.forEach((column, index) => {
- if (index === 0) {
- sums[index] = '合计';
- return;
- }
- const values = data.map(item => Number(item[column.property]));
-
- let sumColumn = tabColumns.find(tab => tab.key === tabName).tableColumns.filter(({key,isSummary}) => isSummary && key === column.property);
-
- if (sumColumn.length) {
- sums[index] = values.reduce((prev, curr) => {
- const value = Number(curr);
- if (!isNaN(value)) {
- return prev + curr;
- } else {
- return '';
- }
- }, 0);
- sums[index] = sums[index].toFixed(2); // 保留2位小数,解决小数合计列
- }
- });
- return sums;
- // return 0
-
- }
- },
- created() {},
- mounted() { },
- updated() {
- this.$nextTick(()=>{
- this.$refs.puOrderExecuteList && this.$refs.puOrderExecuteList[0].doLayout();
- this.$refs.puOrderItemList && this.$refs.puOrderItemList[0].doLayout();
- })
- },
- destroyed() { },
- };
- </script>
- <template>
- <el-drawer
- direction="btt"
- size="100%"
- :with-header="false"
- :visible.sync="visible"
- @open="beforeOpen"
- @close="$emit('close')"
- >
- <el-form
- :key="count"
- v-loading="loading"
- :size="size"
- ref="orderEditForm"
- label-position="right"
- label-width="140px"
- :model="params"
- :rules="rules"
- >
- <el-card :body-style="{
- padding: '20px',
- display: 'flex',
- 'flex-wrap': 'wrap',
- }" style="margin: 10px">
- <div slot="header" style="
- display: flex;
- justify-content: space-between;
- align-items: center;
- ">
- <h3>{{ handleIsRevise() ? '修订' : '编辑' }}</h3>
- <div style="text-align: right">
- <el-button :size="size" type="primary" @click="handleSava">更 新</el-button>
- <el-button :size="size" @click="handleCancel">取 消</el-button>
- </div>
- </div>
- <el-row style="display:flex; flex-wrap: wrap;">
- <el-col
- v-for="(column, index) in columns"
- :key="index"
- :span="column.span || 6"
- >
- <el-form-item :prop="column.key" :label="column.title" v-if="column.isShow">
- <el-input v-if="column.inputType === 'Input'"
- v-model="params[column.key]"
- :placeholder="column.placeholder"
- :clearable="column.clearable"
- :disabled="column.disabled"
- style="width: 100%"
- ></el-input>
- <dr-popover-select v-if="column.inputType === 'PopoverSelect'"
- v-model="params[column.key]"
- size="mini"
- :value-key="column.valueKey"
- :source.sync="params"
- :title="column.title"
- :type="column.referName"
- :multiple="column.multiple"
- :placeholder="column.placeholder"
- :data-mapping="column.dataMapping"
- :disabled="column.disabled"
- :query-params="column.queryParams"
- @change="handleReferChange"
- ></dr-popover-select>
- <el-input v-if="column.inputType === 'Textarea'"
- v-model="params[column.key]"
- type="textarea"
- :placeholder="column.placeholder"
- :clearable="column.clearable"
- :disabled="column.disabled"
- style="width: 100%"
- ></el-input>
- <el-input-number v-if="column.inputType === 'InputNumber'"
- v-model="params[column.key]"
- :precision="column.precision"
- :controls-position="column.controlsPosition"
- :placeholder="column.placeholder"
- :clearable="column.clearable"
- :disabled="column.disabled"
- style="width: 100%"
- ></el-input-number>
- <el-select v-if="column.inputType === 'Select'"
- v-model="params[column.key]"
- :disabled="column.disabled"
- :clearable="column.clearable"
- :placeholder="column.placeholder"
- style="width: 100%"
- @change="handleSelectChange(column.key,column.referName)"
- >
- <el-option
- v-for="item in dict.type[column.referName]"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- ></el-option>
- </el-select>
- <el-select v-if="column.inputType === 'TagSelect'"
- v-model="params[column.key]"
- multiple
- clearable
- collapse-tags
- :placeholder="column.placeholder"
- :clearable="column.clearable"
- :disabled="column.disabled"
- style="width: 100%"
- >
- <template #prefix>
- <el-icon class="el-icon-view" style="cursor: pointer" @click.stop="$message.info(234)"></el-icon>
- </template>
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- ></el-option>
- </el-select>
- <el-date-picker v-if="column.inputType === 'DatePicker'"
- v-model="params[column.key]"
- :type="column.type"
- :placeholder="column.placeholder"
- :clearable="column.clearable"
- :disabled="column.disabled"
- :picker-options="column.pickerOptions"
- style="width: 100%"
- ></el-date-picker>
- <el-checkbox v-if="column.inputType === 'Checkbox'"
- v-model="params[column.key]"
- :disabled="column.disabled"
- true-label="Y"
- false-label="N"
- > </el-checkbox>
- <file-upload-center v-if="column.inputType === 'Upload'"
- v-model="params[column.key]"
- :file-type="column.fileType"
- :disabled="handleIsRevise()"
- ></file-upload-center>
- </el-form-item>
- </el-col>
- </el-row>
- </el-card>
- <el-card :body-style="{
- padding: '20px',
- display: 'flex',
- 'flex-wrap': 'wrap',
- position: 'relative',
- }" style="margin: 10px">
- <el-tabs v-model="tabName" style="width: 100%" v-loading="tabLoading">
- <el-tab-pane
- v-for="(column, index) in tabColumns"
- :key="index"
- :label="column.title"
- :name="column.key"
- >
- <virtual-scroll
- :data="params[column.key].filter(item => item.delFlag === '0')"
- :item-size="53"
- :key-prop="column.key === 'puOrderItemList' ? 'rowNo' :'rowno'"
- @change="(virtualList) => tableData = virtualList"
- :virtualized="true"
- >
- <template slot-scope="{ headerCellFixedStyle, cellFixedStyle }">
- <!-- row-key绑定列唯一值,height一定要设置否则会滚动条滚动位置不对且数据滚动全部加载完后会出现白板-->
- <el-table
- border
- :ref="column.key"
- :data="tableData"
- style="width: 100%"
- :headerCellStyle="headerCellFixedStyle"
- :cellStyle="cellFixedStyle"
- :height="tabHeight"
- >
- <!-- max-height="500px"
- show-summary
- :summary-method="getSummaries" -->
- <virtual-column label="序号" type="index">
- <template slot-scope="scope">
- {{ scope.$index + 1 }}
- </template>
- </virtual-column>
- <!-- <el-table-column label="序号">
- <template slot-scope="scope">
- {{ scope.$index + 1 }}
- </template>
- </el-table-column> -->
- <el-table-column
- v-for="(cColumn, cIndex) in column.tableColumns"
- :key="cIndex"
- :prop="cColumn.key"
- :label="cColumn.title"
- :width="cColumn.width"
- >
- <template slot="header" slot-scope="scope">
- <span v-if="cColumn.require" style="color: #ff4949">*</span>
- <span>
- {{ cColumn.title }}
- </span>
- </template>
- <template slot-scope="scope">
- <el-form-item
- label-width="0"
- >
- <!-- :prop="`${column.key}.${scope.$index}.${[cColumn.key]}`"
- :rules="{ required: cColumn.require || false, message: `${cColumn.title}不能为空`, trigger: 'change' }" -->
- <span v-if="!cColumn.inputType">
- {{ scope.row[cColumn.key] }}
- </span>
- <el-input v-if="cColumn.inputType === 'Input'"
- v-model="scope.row[cColumn.key]"
- :placeholder="cColumn.placeholder"
- :clearable="cColumn.clearable"
- :disabled="cColumn.disabled"
- :size="size"
- style="width: 100%"
- ></el-input>
- <dr-popover-select v-if="cColumn.inputType === 'PopoverSelect'"
- v-model="scope.row[cColumn.key]"
- :source.sync="scope.row"
- :title="cColumn.title"
- :value-key="cColumn.valueKey"
- :disabled="cColumn.disabled"
- :type="cColumn.referName"
- :multiple="cColumn.multiple"
- :placeholder="cColumn.placeholder"
- :data-mapping="cColumn.dataMapping"
- :query-params="cColumn.queryParams"
- size="mini"
- @change="handleTabReferChange"
- ></dr-popover-select>
- <el-select v-if="cColumn.inputType === 'Select'"
- v-model="scope.row[cColumn.key]" size="mini"
- :disabled="cColumn.disabled"
- :clearable="cColumn.clearable"
- :placeholder="cColumn.placeholder"
- style="width: 100%"
- @change="handleTabSelectChange(cColumn.key,scope.row)"
- >
- <el-option
- v-for="item in dict.type[cColumn.referName]"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- ></el-option>
- </el-select>
- <el-checkbox v-if="cColumn.inputType === 'Checkbox'"
- v-model="scope.row[cColumn.key]"
- :disabled="cColumn.disabled"
- true-label="Y"
- false-label="N"
- @change="handleTabCheckbox(cColumn.key,scope.row)"
- ></el-checkbox>
- <el-input-number v-if="cColumn.inputType === 'InputNumber'"
- v-model="scope.row[cColumn.key]"
- :precision="cColumn.precision"
- :controls-position="cColumn.controlsPosition"
- :max="getInputNumberMax(cColumn.key, scope.row)"
- :min="cColumn.key === 'reservedQty' ? 0 : -Infinity"
- @change="handleInputChange(scope.row, cColumn.key)"
- :placeholder="cColumn.placeholder"
- :clearable="cColumn.clearable"
- :disabled="cColumn.disabled"
- :size="size"
- style="width: 100%"
- ></el-input-number>
- </el-form-item>
- </template>
- </el-table-column>
- <!-- 修订:不可删除、增行
- 编辑:自制:可删可增 -->
- <!-- v-if="!handleIsRevise()" -->
- <VirtualColumn
- v-if="!handleIsRevise()"
- vfixed="right"
- label="操作"
- width="120"
- >
- <template slot-scope="scope">
- <el-button
- @click.native.prevent="delTableRow(params[tabName], scope.row,tabName)"
- type="text"
- size="small"
- > 删行
- </el-button>
- </template>
- </VirtualColumn>
-
- </el-table>
- </template>
- </virtual-scroll>
-
- </el-tab-pane>
- </el-tabs>
- <el-row style="position: absolute; top: 20px; right: 20px">
- <el-button v-if="params.source == '3' && !handleIsRevise()" :size="size"
- @click="addTableRow(params[tabName])">增行</el-button>
- <BatchImport
- v-if="params.source == '3' && !handleIsRevise()"
- ref="batchImport"
- @import="handelImport"
- @temDownload="handleTemDownload"
- :fileSize="2"
- ></BatchImport>
- </el-row>
- </el-card>
- </el-form>
- </el-drawer>
- </template>
|