This commit is contained in:
linfso 2024-05-26 07:07:16 +08:00
parent d867e19fbe
commit 4f8272caa9
6 changed files with 190 additions and 41 deletions

View File

@ -69,9 +69,9 @@
<el-button style="margin-left: 10px;" slot="reference" size="mini" circle icon="el-icon-menu" />
</el-popover>
</el-tooltip>
<el-tooltip style="margin-left: 10px;" class="item" effect="dark" content="导出" placement="top" v-if="download!=null">
<!-- <el-tooltip style="margin-left: 10px;" class="item" effect="dark" content="导出" placement="top" v-if="download!=null">
<el-button size="mini" circle icon="el-icon-download" @click="download()" />
</el-tooltip>
</el-tooltip> -->
</el-row>
</div>
</div>

View File

@ -50,7 +50,10 @@ export default {
name: "AddressSelectPicker",
props:{
addressType:{
type:[String,Number]
type:String
},
useSiteCode:{
type:String
},
},
components: { CountryPicker },
@ -79,6 +82,7 @@ export default {
pageNum: 1,
pageSize: 10,
addressType: this.addressType,
useSiteCode: this.useSiteCode,
searchValue:null,
},
};
@ -88,6 +92,10 @@ export default {
this.queryParams.addressType=this.addressType;
this.getList();
},
useSiteCode(newVal){
this.queryParams.useSiteCode=this.useSiteCode;
this.getList();
},
},
created() {
this.getList();

View File

@ -133,6 +133,10 @@ export default {
addressType(newVal){
this.queryParams.addressType=newVal;
this.defaultItems=null;
},
useSiteCode(newVal){
this.queryParams.useSiteCode=newVal;
this.defaultItems=null;
}
},

View File

@ -22,7 +22,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="联系人" prop="customerName">
<el-form-item label="联系人" prop="contact">
<el-input v-model="form.contact" placeholder="" />
</el-form-item>
</el-col>

View File

@ -20,10 +20,10 @@
/>
</el-form-item>
<el-form-item label="寄件人" prop="customerName">
<el-form-item label="联系人" prop="contact">
<el-input
v-model="queryParams.customerName"
:placeholder="$t('寄件人')"
v-model="queryParams.contact"
:placeholder="$t('联系人')"
clearable
@keyup.enter.native="handleQuery"
@input="handleQuery"
@ -127,28 +127,21 @@
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
size="mini"
@click="handleUpload"
v-hasPermi="['emis:emisTmsScanRecord:add']"
>导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
size="mini"
@click="handleUpload"
v-hasPermi="['emis:emisTmsScanRecord:add']"
>下载导入模版</el-button>
<el-upload
action=""
name="file"
accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
:show-file-list="false"
v-hasPermi="['emis:emisCustomerUser:add']"
:before-upload="beforeAvatarUpload">
<el-button slot="trigger" plain class="filter-item" size="mini" type="primary" >导入</el-button>
<el-link type="primary" style="line-height: 28px;font-size:13px" href="/static/tpl/imp_month_user.xlsx">下载导入模版</el-link>
</el-upload>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['emis:emisCustomerUser:export']"
@ -259,11 +252,46 @@
<batchUpdateForm :ids="ids" @on-changed="handleFormChanged" @on-cancel="cancelForm"></batchUpdateForm>
</el-dialog>
<!-- <el-dialog :title="title" :visible.sync="open" width="50%" v-dialogDrag :close-on-click-modal="false" append-to-body>
<el-row :gutter="0">
<el-form ref="form" :model="form" :rules="rules" size="mini" label-width="80px">
<el-col :span="24">
<el-form-item label="选择文件" prop="uploadFile" >
<el-upload
action=""
name="file"
accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
:show-file-list="true"
:limit="1"
:file-list="fileList"
:on-change="fileChange"
:before-upload="beforeUpload">
<el-button slot="trigger" plain class="filter-item" size="mini" type="primary" >选择文件</el-button>
<el-link type="primary" style="line-height: 28px;font-size:13px" href="/static/tpl/imp_exp_order.xls">下载Excel模板</el-link>
<div v-if="uploadExcelDataInfo !=''" style="color: black;font-size: 12px;font-weight: 800;">{{ fileName }} {{ uploadExcelDataInfo }}</div>
</el-upload>
<el-alert
title="注意"
type="success"
description="仅允许导入“xls”或“xlsx”格式文件!"
close-text="知道了">
</el-alert>
</el-form-item>
</el-col>
</el-form>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="batchImpDataForm">开始导入</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog> -->
</div>
</template>
<script>
import { listMonthUser, delEmisCustomerUser } from "@/api/emis/emisCustomerUser";
import { listMonthUser, delEmisCustomerUser,addMonthUser } from "@/api/emis/emisCustomerUser";
import elDateSimplePicker from '@/components/DatePickerAdv/elDateSimplePicker';
// import emisCustomerUserView from '@/views/emis/emisCustomerUser/emisCustomerUserView';
import monthUserForm from '@/views/emis/emisCustomerUser/monthUserForm';
@ -281,6 +309,7 @@ import EmisUserSimplePicker2 from '@/views/emis/EmisBaseTools/EmisUserSimplePick
import PayeePicker from '@/views/emis/EmisBaseTools/PayeePicker.vue';
import SalemanPicker from '@/views/emis/EmisBaseTools/SalemanPicker.vue';
import XLSX from 'xlsx'
export default {
name: "MonthUserList",
@ -437,6 +466,106 @@ export default {
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
beforeAvatarUpload(file) {
this.readerData(file)
return false
},
readerData(rawFile) {
return new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onload = e => {
const data = e.target.result
const workbook = XLSX.read(data, { type: 'array' })
const firstSheetName = workbook.SheetNames[0] // firstSheetName
// if (!excelTypes.includes(firstSheetName)) {
// reject('无法识别当前Excel模板')
// this.$message.error('无法识别当前Excel模板')
// return
// }
const worksheet = workbook.Sheets[firstSheetName]
// const header = this.getHeaderRow(worksheet) // 标题
const results = XLSX.utils.sheet_to_json(worksheet)
console.log(results);
this.batchImportData(results);
resolve()
}
reader.readAsArrayBuffer(rawFile)
})
},
getHeaderRow(sheet) {
const headers = []
const range = XLSX.utils.decode_range(sheet['!ref'])
let C
const R = range.s.r
/* start in the first row */
for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
/* find the cell in the first row */
let hdr = 'UNKNOWN ' + C // <-- replace with your desired default
if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
headers.push(hdr)
}
return headers
},
async batchImportData(results) {
const _index = 1
let loadingInstance = this.$loading({
text: '正在导入 ' + _index + ' ...'
})
for (let index = 0; index < results.length; index++) {
const element = results[index]
// 客户名称 英文简称 月结编号 联系人 手机号码 主归属网点 回款联系人 销售联系人 结算类型 国家 省份 城市 区县 联系地址 E-Mail 是否启用 是否开启OMS账号 首次签约时间 备注
const postData= {
customerName: element['客户名称'],
customerNameEn: element['英文简称'],
contact: element['联系人'],
phone: element['手机号码'],
customerType: '2',
settledType: '2',
userType: '2',
monthlyPayCode: element['月结编号'],
ownerSite: element['主归属网点'],
country: element['国家'],
province: element['省份'],
city:element['城市'],
county: element['区县'],
address: element['联系地址'],
email: element['E-Mail'],
status: element['是否启用'],
payee: element['回款联系人'],
salesmen: element['销售联系人'],
dataFrom: "pc",
firstSigningDay:element['首次签约时间'],
blOpenOms: element['是否开启OMS账号'],
remark: element['备注']
};
// postData.cosignee= element['']
// postData.cosigneeAddress= element['收件地址']
// postData.cosigneeTelephone= element['收件电话']
// postData.country= element['国家']
// postData.extJsonStr = JSON.stringify(extJsonStr)
const res = await addMonthUser(postData)
console.log(res);
if (res.code !== 200) {
this.$message.error(JSON.stringify(res.msg))
loadingInstance.close()
return
}
loadingInstance.close()
loadingInstance = this.$loading({
text: '正在导入 ' + _index + ' 数据...'
})
}
loadingInstance.close()
this.handleQuery();
},
/** 导出按钮操作 */
handleExport() {
// this.download('emis/emisCustomerUser/export', {
@ -449,18 +578,20 @@ export default {
qParam.pageNum=1;
qParam.pageSize=5000;
listMonthUser(this.addDateRange(qParam, this.dateTimeRange)).then(response => {
listMonthUser(this.addDateRange(this.queryParams, this.dateTimeRange)).then(response => {
this.downloadLoading = false
if (response.code === 200) {
const curList = response.rows
import('@/vendor/Export2Excel').then(excel => {
const tHeader = ['id','客户编码','客户名称','英文简称','电话','手机号','客户类型','结算类型','用户类型','所属公司','部门id','头像','性别','邀请人','最后登录ip','最后登录日期','称呼','union_id','wxopenid','主月结卡号','登录账号','登录密码','归属站点','国家','省份','城市','区县','镇','地址','email','发件国','发件省','发件区','发件区','发件镇','邮编','启用状态','真实姓名','身份证号','回款联系人','销售联系人','是否开通oms','是否短信','专属业务员','排序','备注','删除标志(0代表存在','创建者','创建时间','更新者','更新时间','创建网点','修改站点代码',];
const filterVal = ['id','customerCode','customerName','customerNameEn','phone','mobile','customerType','settledType','userType','company','deptId','avatar','sex','invitationInfo','loginIp','loginDate','nickName','unionId','openid','monthlyPayCode','userName','password','ownerSite','country','province','city','county','town','address','email','sendCountry','sendProvince','sendCity','sendCounty','sendTown','postCode','status','realName','idNo','payee','salesmen','blOpenOms','blSms','opEmpCode','orderNum','remark','delFlag','createBy','createTime','updateBy','updateTime','createSite','updateSite',];
// 客户名称 英文简称 月结编号 联系人 手机号码 主归属网点 回款联系人 销售联系人 结算类型 国家 省份 城市 区县 联系地址 E-Mail 是否启用 是否开启OMS账号 首次签约时间 备注
const tHeader = ['客户名称','英文简称','月结编号','联系人','手机号码','主归属网点','回款联系人','销售联系人','结算类型','国家','省份','城市','区县','联系地址','E-Mail','是否启用','是否开启OMS账号','首次签约时间','备注'];
const filterVal = ['customerName','customerNameEn','monthlyPayCode','contact','phone','ownerSite','payee','salesmen','settedType','country','province','city','county','address','email','status','blOpenOms','firstSigningDay','remark'];
const data = this.formatJson(filterVal, curList, response.rows)
excel.export_json_to_excel({
header: tHeader,
data,
filename: '快递客户用户',
filename: '月结客户',
autoWidth: true
})
loadingInstance.close()
@ -475,9 +606,9 @@ export default {
return ++index
}
if (j === 'status') {
var statusStr='xxx'
if(v[j] == 10){
statusStr='xxx'
var statusStr='停用'
if(v[j] == 1){
statusStr='启用'
}
return statusStr;
}

View File

@ -213,7 +213,7 @@
<el-col :span="12">
<el-form-item label="寄件人" prop="sender.name">
<CustomerAddressSimplePicker0 addressType="1" v-model="form.sender.name" @onChange="onChangeSelectSender"></CustomerAddressSimplePicker0>
<CustomerAddressSimplePicker0 addressType="1" :useSiteCode="form.sendSiteCode" v-model="form.sender.name" @onChange="onChangeSelectSender"></CustomerAddressSimplePicker0>
</el-form-item>
</el-col>
<el-col :span="12">
@ -277,7 +277,7 @@
<el-col :span="12">
<el-form-item label="收件人" prop="reciever.name">
<CustomerAddressSimplePicker1 addressType="2" :countryCode="form.reciever.country" v-model="form.reciever.name" @onChange="onChangeSelectReceiver"></CustomerAddressSimplePicker1>
<CustomerAddressSimplePicker1 addressType="2" :useSiteCode="form.sendSiteCode" :countryCode="form.reciever.country" v-model="form.reciever.name" @onChange="onChangeSelectReceiver"></CustomerAddressSimplePicker1>
</el-form-item>
</el-col>
@ -656,8 +656,8 @@
</el-col>
<el-col :span="24">
<el-form-item label="总运费" prop="freight" label-width="70px">
<el-input v-model="form.freight" placeholder="" >
</el-input>
<el-input v-if="form.calcFeeType == 3" v-model="form.freight" placeholder="" > </el-input>
<el-input v-else v-model="form.freight" disabled placeholder="" > </el-input>
</el-form-item>
<el-form-item label="费用备注" prop="feeRemaker" label-width="70px">
<el-input v-model="form.feeRemaker" type="textarea" placeholder="" >
@ -713,7 +713,7 @@
</div>
<el-dialog :title="titleSelectAddress" :visible.sync="openSelectAddress" width="60%" :destroy-on-close="true" v-dialogDrag append-to-body>
<AddressSelectPicker0 :addressType="addressType" @onSelected="onAddressChangeSelect"></AddressSelectPicker0>
<AddressSelectPicker0 :addressType="addressType" :useSiteCode="form.sendSiteCode" @onSelected="onAddressChangeSelect"></AddressSelectPicker0>
</el-dialog>
</div>
@ -954,13 +954,13 @@ data() {
{ required: true, message: "目的地网点代码不能为空", trigger: "blur" }
],
custNo: [
{ required: true, message: "月结卡号不能为空", trigger: "blur" }
{ required: true, message: "月结卡号不能为空", trigger: ["blur",'change'] }
],
payee: [
{ required: true, message: "销售回款人不能为空", trigger: "blur" }
{ required: true, message: "销售回款人不能为空", trigger: ["blur",'change'] }
],
salesmen: [
{ required: true, message: "销售联系人不能为空", trigger: "blur" }
{ required: true, message: "销售联系人不能为空", trigger: ["blur",'change'] }
],
takePieceEmployeeCode: [
{ required: true, message: "取件员代码不能为空", trigger: ["blur",'change'] }
@ -1566,11 +1566,17 @@ methods: {
&& this.form.dispatchUnderlingSiteCode
&& this.form.calcFeeType
){
let calcFeeType=this.form.calcFeeType;
if(calcFeeType==3){
calcFeeType=1;
}
let postData={
productType: this.form.productType,
customerCode: this.form.customerCode,
custNo: this.form.custNo,
calcFeeType: this.form.calcFeeType,
calcFeeType:calcFeeType,
settlementWeight: this.form.settlementWeight,
sendSiteCode: this.form.sendSiteCode,
dispatchUnderlingSiteCode: this.form.dispatchUnderlingSiteCode,