|
@@ -67,39 +67,33 @@
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="c-item">
|
|
|
- <label class="c-label">境外车牌号:</label>
|
|
|
- <el-autocomplete v-model="m.cardNo" @select="handleSelectCar"
|
|
|
- value-key='cardNo' :fetch-suggestions="queryCarAsync">
|
|
|
- </el-autocomplete>
|
|
|
- </div>
|
|
|
- <sa-item type="num" name="境外车规格" placeholder="单位(米)" v-model="m.cardSize" br>
|
|
|
- </sa-item>
|
|
|
- <!-- <div class="c-item">
|
|
|
- <label class="c-label">国籍:</label>
|
|
|
- <el-select v-model="m.countryName" placeholder="请选择">
|
|
|
- <el-option v-for="item in countryList" :key="item.name"
|
|
|
- :label="item.name" :value="item.name">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </div> -->
|
|
|
- <div class="c-item">
|
|
|
<label class="c-label">运输货品:</label>
|
|
|
- <el-select v-model="m.goodsName" placeholder="请选择">
|
|
|
+ <el-select v-model="m.goodsName" placeholder="请选择" @change="goodsChange">
|
|
|
<el-option v-for="item in goodsList" :key="item.id" :label="item.name"
|
|
|
:value="item.name">
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
- <sa-item type="num" name="载重(吨)" v-model="m.netWeight" br></sa-item>
|
|
|
+ <sa-item type="text" name="境外车牌号" placeholder="请输入境外车牌号" v-model="m.cardNo" br>
|
|
|
+ </sa-item>
|
|
|
+ </sa-item>
|
|
|
<div class="c-item">
|
|
|
- <label class="c-label">中国车牌:</label>
|
|
|
- <el-autocomplete v-model="m.chinaCarNo" @select="handleSelectChinaCar"
|
|
|
- value-key='cardNo' :fetch-suggestions="queryCarAsync">
|
|
|
+ <label class="c-label">境外车规格:</label>
|
|
|
+ <el-autocomplete v-model="m.cardSize" placeholder="请输入车规格"
|
|
|
+ @select="handleSelectCarSize" value-key='unit'
|
|
|
+ :fetch-suggestions="queryCaSizerAsync">
|
|
|
</el-autocomplete>
|
|
|
</div>
|
|
|
- <sa-item type="text" name="中国司机" v-model="m.driverName" br></sa-item>
|
|
|
- <sa-item type="text" name="联系号码" v-model="m.driverPhone" br></sa-item>
|
|
|
- <sa-item type="datetime" name="预计入场" v-model="m.expectInDay" br></sa-item>
|
|
|
+ <sa-item type="num" name="载重(吨)" placeholder="请输入车辆载重" v-model="m.netWeight" br>
|
|
|
+ </sa-item>
|
|
|
+ <sa-item type="text" name="中国车牌" placeholder="请输入中国车牌" v-model="m.chinaCarNo"
|
|
|
+ br></sa-item>
|
|
|
+ <sa-item type="text" name="中国司机" placeholder="请输入中国车司机" v-model="m.driverName"
|
|
|
+ br></sa-item>
|
|
|
+ <sa-item type="text" name="联系号码" placeholder="请输入联系号码" v-model="m.driverPhone"
|
|
|
+ br></sa-item>
|
|
|
+ <sa-item type="datetime" name="预计入场" placeholder="请选择" v-model="m.expectInDay"
|
|
|
+ br></sa-item>
|
|
|
</div>
|
|
|
</el-card>
|
|
|
</el-col>
|
|
@@ -110,15 +104,18 @@
|
|
|
<span>业务项</span>
|
|
|
</div>
|
|
|
<div>
|
|
|
- <el-form-item v-for="(type,index) in itemTypeList" :label="type.name"
|
|
|
- style="display: flex;">
|
|
|
+ <el-form-item v-for="(type,index) in filterTypeList" style="display: flex;"
|
|
|
+ v-if="filterTypeList.length>0">
|
|
|
+ <label slot="label"><label v-if="needTypeId.indexOf(type.id)!==-1"
|
|
|
+ style="color: red;">*</label>{{type.name}}</label>
|
|
|
<el-select v-model="type.itemId" style="width: 120px;" placeholder="请选择">
|
|
|
<el-option v-for="item in type.items" :key="item.id"
|
|
|
:label="item.itemName" :value="item.id">
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
<el-input-number style="margin-left: 60px;" class="item-num"
|
|
|
- v-model="type.num" :min="1" :max="10" size="mini"></el-input-number>
|
|
|
+ v-model="type.num" :min="1" :max="10" size="mini"
|
|
|
+ :disabled="type.inc==0"></el-input-number>
|
|
|
<div class="xj" v-if="type.itemId">
|
|
|
{{type.items.filter(obj=>obj.id==type.itemId)[0].price*type.num}}元
|
|
|
<label @click="type.itemId=''"
|
|
@@ -126,8 +123,11 @@
|
|
|
class="el-icon-delete"></i>)</label>
|
|
|
</div>
|
|
|
<el-button v-if="type.code=='p09'&&type.itemId"
|
|
|
- @click="addPeopleFn(type.itemId,true)">操作</el-button>
|
|
|
+ @click="addPeopleFn(type.itemId,type.num,true)">操作</el-button>
|
|
|
</el-form-item>
|
|
|
+ <div v-if="filterTypeList.length==0" style="height: 400px;padding: 30px;">
|
|
|
+ 请先选择运输货品
|
|
|
+ </div>
|
|
|
<div class="hj" v-if="totalPrice>0">
|
|
|
合计费用:{{totalPrice}}<label>元</label>
|
|
|
</div>
|
|
@@ -149,7 +149,8 @@
|
|
|
<el-card class="box-card">
|
|
|
<div slot="header">
|
|
|
<span>列表</span>
|
|
|
- <el-button style="float: right;" icon="el-icon-plus" type="primary" @click="showAddModal">添加
|
|
|
+ <el-button style="float: right;" icon="el-icon-plus" type="primary" @click="showAddModal"
|
|
|
+ v-if="modal.list.length<modal.num">添加
|
|
|
</el-button>
|
|
|
</div>
|
|
|
<el-table :data="modal.list">
|
|
@@ -175,8 +176,8 @@
|
|
|
<el-dialog title="人员核酸检测" :visible.sync="addModal.visible" width="400">
|
|
|
<span>
|
|
|
<el-form label-position="left">
|
|
|
- <sa-item type="text" name="姓名" v-model="addModal.form.name" br></sa-item>
|
|
|
- <sa-item type="text" name="联系号码" v-model="addModal.form.phone" br></sa-item>
|
|
|
+ <sa-item type="text" name="姓名" placeholder="姓名" v-model="addModal.form.name" br></sa-item>
|
|
|
+ <sa-item type="text" name="联系号码" placeholder="联系号码" v-model="addModal.form.phone" br></sa-item>
|
|
|
</el-form>
|
|
|
</span>
|
|
|
<span slot="footer" class="dialog-footer">
|
|
@@ -216,6 +217,7 @@
|
|
|
driverList: [],
|
|
|
currentCustomerId: 1,
|
|
|
itemTypeList: [],
|
|
|
+ filterTypeList: [],
|
|
|
goodsList: [],
|
|
|
countryList: [{
|
|
|
name: '越南车'
|
|
@@ -226,6 +228,7 @@
|
|
|
modal: {
|
|
|
visible: false,
|
|
|
itemId: 4,
|
|
|
+ num: 1,
|
|
|
list: []
|
|
|
},
|
|
|
addModal: {
|
|
@@ -236,7 +239,9 @@
|
|
|
itemId: 4,
|
|
|
ticket: ''
|
|
|
}
|
|
|
- }
|
|
|
+ },
|
|
|
+ unitList: [],
|
|
|
+ needTypeId: []
|
|
|
},
|
|
|
computed: {
|
|
|
totalPrice() {
|
|
@@ -258,7 +263,21 @@
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
- addPeopleFn(itemId,show) {
|
|
|
+ goodsChange(value) {
|
|
|
+ let goods = this.goodsList.filter(obj => obj.name === value).pop();
|
|
|
+ let noNeedIds = goods.noNeedIds.split(',');
|
|
|
+ this.needTypeId = goods.needIds.split(',');
|
|
|
+ this.filterTypeList = this.itemTypeList.filter(type => noNeedIds.indexOf(type.id) === -1);
|
|
|
+ },
|
|
|
+ getUnitList() {
|
|
|
+ sa.ajax('/TbUnit/getList', {
|
|
|
+ pageNo: 1,
|
|
|
+ pageSize: 50
|
|
|
+ }, function(resp) {
|
|
|
+ this.unitList = resp.data;
|
|
|
+ }.bind(this))
|
|
|
+ },
|
|
|
+ addPeopleFn(itemId, num, show) {
|
|
|
sa.ajax('/TbBusinessPeople/getList', {
|
|
|
businessId: this.id
|
|
|
}, function(resp) {
|
|
@@ -278,7 +297,9 @@
|
|
|
|
|
|
}.bind(this));
|
|
|
this.modal.itemId = itemId;
|
|
|
+ this.modal.num = num;
|
|
|
this.modal.visible = show;
|
|
|
+
|
|
|
},
|
|
|
showAddModal() {
|
|
|
Object.assign(this.addModal, {
|
|
@@ -295,14 +316,16 @@
|
|
|
cancelAdd() {
|
|
|
this.modal.list = [];
|
|
|
this.modal.visible = false;
|
|
|
+
|
|
|
},
|
|
|
confirmAdd() {
|
|
|
if (!this.addModal.form.name) {
|
|
|
sa.error('请输入检测人姓名')
|
|
|
return false;
|
|
|
}
|
|
|
- if (!this.addModal.form.phone) {
|
|
|
- sa.error('请输入检测人联系号码')
|
|
|
+ let phone = this.addModal.form.phone;
|
|
|
+ if (phone && !sa.isPhone(phone)) {
|
|
|
+ sa.error('检测人联系号码不正确')
|
|
|
return false;
|
|
|
}
|
|
|
let dbIndex = this.addModal.form.index;
|
|
@@ -331,9 +354,6 @@
|
|
|
}.bind(this))
|
|
|
}
|
|
|
},
|
|
|
- handleSelectChinaCar() {
|
|
|
-
|
|
|
- },
|
|
|
getGoods() {
|
|
|
sa.ajax('/TbGoods/getList', {
|
|
|
pageNo: 1,
|
|
@@ -346,70 +366,38 @@
|
|
|
sa.ajax('/TbItemType/getList', function(resp) {
|
|
|
let typeList = resp.data;
|
|
|
// 初始化数据
|
|
|
- if (this.id > 0) {
|
|
|
- sa.ajax('/TbBusiness/getById?id=' + this.id, function(res) {
|
|
|
- let m = res.data;
|
|
|
- let items = m.items;
|
|
|
- let hsItem= items.filter(obj=>obj.itemTypeName.indexOf('人')!==-1
|
|
|
- &&obj.itemTypeName.indexOf('核酸')!==-1);
|
|
|
- if(hsItem.length>0){
|
|
|
- this.addPeopleFn(hsItem[0].itemTypeId,false)
|
|
|
- }
|
|
|
- for (let i in items) {
|
|
|
- let item = items[i];
|
|
|
- for (let j in typeList) {
|
|
|
- let type = typeList[j];
|
|
|
- if (item.itemTypeId == type.id) {
|
|
|
- type.itemId = item.itemId;
|
|
|
- type.num = item.num;
|
|
|
- break;
|
|
|
- }
|
|
|
+ sa.ajax('/TbBusiness/getById?id=' + this.id, function(res) {
|
|
|
+ let m = res.data;
|
|
|
+ let items = m.items;
|
|
|
+ let hsItem = items.filter(obj => obj.itemTypeName.indexOf('人') !== -1 &&
|
|
|
+ obj.itemTypeName.indexOf('核酸') !== -1);
|
|
|
+ if (hsItem.length > 0) {
|
|
|
+ this.addPeopleFn(hsItem[0].itemTypeId, false)
|
|
|
+ }
|
|
|
+ for (let i in items) {
|
|
|
+ let item = items[i];
|
|
|
+ for (let j in typeList) {
|
|
|
+ let type = typeList[j];
|
|
|
+ if (item.itemTypeId == type.id) {
|
|
|
+ type.itemId = item.itemId;
|
|
|
+ type.num = item.num;
|
|
|
}
|
|
|
}
|
|
|
- this.m = m;
|
|
|
- }.bind(this))
|
|
|
- }
|
|
|
- this.itemTypeList = typeList;
|
|
|
+ }
|
|
|
+ this.m = m;
|
|
|
+ this.itemTypeList = typeList;
|
|
|
+ this.goodsChange(m.goodsName);
|
|
|
+ }.bind(this))
|
|
|
}.bind(this))
|
|
|
},
|
|
|
- getCardList() {
|
|
|
- sa.ajax('/TbCar/getList', {
|
|
|
- pageNo: 1,
|
|
|
- pageSize: 100
|
|
|
- }, function(resp) {
|
|
|
- this.cardList = resp.data;
|
|
|
- }.bind(this));
|
|
|
- },
|
|
|
- queryCarAsync(queryStr, cb) {
|
|
|
- let list = this.cardList;
|
|
|
- let filterList = list.filter(obj => obj.cardNo.indexOf(queryStr) !== -1);
|
|
|
- cb(filterList)
|
|
|
- },
|
|
|
- handleSelectCar(item) {
|
|
|
- console.log(item);
|
|
|
- this.m.cardSize = item.cardSize;
|
|
|
- this.m.goodsName = item.lastGoodsName
|
|
|
- this.m.countryName = item.countryName;
|
|
|
- this.m.netWeight = item.lastNetWeight;
|
|
|
- },
|
|
|
- getDriverList() {
|
|
|
- sa.ajax('/TbDriver/getList', {
|
|
|
- pageNo: 1,
|
|
|
- pageSize: 100
|
|
|
- }, function(resp) {
|
|
|
- this.driverList = resp.data;
|
|
|
- }.bind(this));
|
|
|
- },
|
|
|
- queryDriverAsync(queryStr, cb) {
|
|
|
- let list = this.driverList;
|
|
|
- let filterList = list.filter(obj => obj.idCard.indexOf(queryStr) !== -1);
|
|
|
+ queryCaSizerAsync(queryStr, cb) {
|
|
|
+ let list = this.unitList;
|
|
|
+ let filterList = list.filter(obj => obj.unit.indexOf(queryStr) !== -1);
|
|
|
cb(filterList)
|
|
|
},
|
|
|
- handleSelectDriver(item) {
|
|
|
- this.m.driverId = item.id;
|
|
|
- this.m.driverName = item.name;
|
|
|
- this.m.driverIdCard = item.idCard;
|
|
|
- this.m.driverPhone = item.phone
|
|
|
+
|
|
|
+ handleSelectCarSize(item) {
|
|
|
+ this.m.cardSize = item.unit;
|
|
|
},
|
|
|
getCustomerList() {
|
|
|
sa.ajax('/TbCostomer/getList', {
|
|
@@ -436,46 +424,61 @@
|
|
|
},
|
|
|
// 提交数据
|
|
|
ok: function() {
|
|
|
- let itemList = this.itemTypeList.filter(obj => obj.itemId);
|
|
|
+ // 表单校验
|
|
|
+ let m = this.m;
|
|
|
+ if (this.currentCustomerId == 1) {
|
|
|
+ sa.checkNull(m.customerId, '请选择 [客户名称]');
|
|
|
+ }
|
|
|
+ sa.checkNull(m.goodsName, '请选择运输货物');
|
|
|
+ sa.checkNull(m.cardNo, '请输入 [车牌号]');
|
|
|
+ if (!sa.isNum(m.cardSize)) {
|
|
|
+ sa.error('车辆规格只能输入数字')
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!sa.isNum(m.netWeight)) {
|
|
|
+ sa.error('载重只能输入数字')
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ sa.checkNull(m.driverName, '请输入 [中国司机名称]');
|
|
|
+ if (!sa.isPhone(m.driverPhone)) {
|
|
|
+ sa.error('司机联系号码不正确')
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ sa.checkNull(m.chinaCarNo, '请输入 [中国车牌号]');
|
|
|
+ let checkList = this.itemTypeList;
|
|
|
+ for (let j in this.needTypeId) {
|
|
|
+ let id = this.needTypeId[j];
|
|
|
+ for (let i in checkList) {
|
|
|
+ let type = checkList[i];
|
|
|
+ if (id == type.id && !type.itemId) {
|
|
|
+ sa.error('选择[' + this.m.goodsName + ']时,[' + type.name + ']必选')
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let typeList = this.itemTypeList.filter(obj => obj.itemId);
|
|
|
let list = [];
|
|
|
- if (itemList.length == 0) {
|
|
|
+ if (typeList.length == 0) {
|
|
|
sa.error('至少选择一项业务');
|
|
|
return false;
|
|
|
}
|
|
|
- for (let i in itemList) {
|
|
|
- let item = itemList[i];
|
|
|
- if (!item.num || item.num <= 0) {
|
|
|
- this.$message({
|
|
|
- message: '请填写【' + item.name + '】数量',
|
|
|
- type: 'error'
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
+ for (let i in typeList) {
|
|
|
+ let type = typeList[i];
|
|
|
list.push({
|
|
|
- itemId: item.itemId,
|
|
|
- num: item.num
|
|
|
+ itemId: type.itemId,
|
|
|
+ num: type.num
|
|
|
})
|
|
|
}
|
|
|
- if (itemList.filter(obj => obj.itemId == 4 || obj.itemId == 9).length > 0 && this.modal.list
|
|
|
+ if (typeList.filter(obj => obj.itemId == 4 || obj.itemId == 9).length > 0 && this.modal.list
|
|
|
.length == 0) {
|
|
|
sa.error('请添加核酸检测人员');
|
|
|
return false;
|
|
|
}
|
|
|
- // 表单校验
|
|
|
- let m = this.m;
|
|
|
+
|
|
|
m.itemJson = JSON.stringify(list);
|
|
|
m.peopleJson = JSON.stringify(this.modal.list);
|
|
|
m.items = [];
|
|
|
- if (this.currentCustomerId == 1) {
|
|
|
- sa.checkNull(m.customerId, '请选择 [客户名称]');
|
|
|
- }
|
|
|
- sa.checkNull(m.cardNo, '请输入 [车牌号]');
|
|
|
- sa.checkNull(m.cardSize, '请输入 [车规格]');
|
|
|
- sa.checkNull(m.netWeight, '请输入 [载重]');
|
|
|
- sa.checkNull(m.goodsName, '请选择运输货物');
|
|
|
- sa.checkNull(m.driverName, '请输入 [司机名称]');
|
|
|
- sa.checkNull(m.driverPhone, '请输入 [司机联系号码]');
|
|
|
- sa.checkNull(m.chinaCarNo, '请输入 [中国车牌号]');
|
|
|
+
|
|
|
if (this.id <= 0) { // 添加
|
|
|
sa.ajax('/TbBusiness/add', m, function(res) {
|
|
|
sa.alert('增加成功', this.clean);
|
|
@@ -499,10 +502,9 @@
|
|
|
},
|
|
|
mounted: function() {
|
|
|
this.getCustomer();
|
|
|
- this.getCardList();
|
|
|
- this.getDriverList();
|
|
|
this.getItemTypeList();
|
|
|
this.getGoods();
|
|
|
+ this.getUnitList();
|
|
|
}
|
|
|
})
|
|
|
</script>
|