Commit 1280a926 authored by 我在何方's avatar 我在何方
parents b92e5fed 29e05e99
......@@ -9,7 +9,8 @@ yarn-error.log*
tests/**/coverage/
tests/e2e/reports
selenium-debug.log
# 提取的需要翻译的文件列表
messages.txt
# Editor directories and files
.idea
.vscode
......
const fs = require('fs');
const root = "./src"
let allFiles = []
function getFiles(dir){
let files = fs.readdirSync(dir)
files.forEach(file => {
let path = dir + '/' + file
if(fs.lstatSync(path).isDirectory()){
getFiles(path)
}else allFiles.push(path)
})
}
getFiles(root)
let messages = new Set()
allFiles.forEach(file => {
let data = fs.readFileSync(file, {encoding: 'utf-8'})
let matched = data.matchAll(/\$t\([\'\"]{1}([^\"\']+)[\'\"]{1}\)/g)
let i = 0
for(let item of matched){
i ++
messages.add(item[1])
}
})
fs.writeFileSync("./messages.txt", Array.from(messages).join("\n"))
console.log("done!")
\ No newline at end of file
......@@ -294,7 +294,7 @@ export default {
{
productType:0,//商品类型
productAttr: 0,//暗佣 产品属性
darkCommission: 1,//暗佣 佣金
darkCommission: '',//暗佣 佣金
darkCurrency: parseInt(this.getDictDatas(this.DICT_TYPE.COMMISSION_CURRENCY_TYPE)[0].value),// 暗佣 货币
darkUnit:undefined,// 暗佣 单位
}
......
......@@ -3,46 +3,60 @@
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="客户编号" prop="number">
<el-form-item :label="$t('客户编号')" prop="number">
<el-input v-model="queryParams.number" placeholder="请输入客户编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="客户名称" prop="name">
<el-form-item :label="$t('客户名称')" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入客户名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="客户等级" prop="level">
<el-select v-model="queryParams.level" placeholder="请选择客户等级" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
<el-form-item :label="$t('客户等级')" prop="level">
<el-select clearable v-model="queryParams.level" :placeholder="$t('请选择客户等级')" clearable size="small">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_LEVEL)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="客户来源" prop="source">
<el-select v-model="queryParams.source" placeholder="请选择客户来源" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
<el-form-item :label="$t('联系方式')">
<el-input :placeholder="$t('请输入联系方式')" v-model="queryParams.defaultContactPhone"></el-input>
</el-form-item>
<el-form-item :label="$t('客户类别')" prop="level">
<dict-selector :type="DICT_TYPE.CUSTOMER_TYPE" multiple v-model="queryParams.type"></dict-selector>
</el-form-item>
<el-form-item :label="$t('客户经理')" prop="customerService">
<el-select clearable v-model="queryParams.customerService" :placeholder="$t('请选择客户经理')" clearable size="small">
<el-option v-for="dict in customerServiceList"
:key="dict.id" :label="dict.nickname" :value="dict.id"/>
</el-select>
</el-form-item>
<el-form-item label="客户经理" prop="customerService">
<el-select v-model="queryParams.customerService" placeholder="请选择客户经理" clearable size="small">
<el-option v-for="dict in serviceStaffOptions"
:key="dict.id" :label="dict.nickname" :value="dict.id"/>
<el-form-item :label="$t('客户来源')" prop="source">
<el-select clearable v-model="queryParams.source" :placeholder="$t('请选择客户来源')" clearable size="small">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_SOURCE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="客户状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择客户状态" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.CUSTOMER_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
<el-form-item :label="$t('国家')" prop="source">
<el-select clearable v-model="form.country" :placeholder="$t('请选择国家')">
<el-option v-for="dict in countryList"
:key="dict.id" :label="dict.nameZh" :value="parseInt(dict.id)" />
</el-select>
</el-form-item>
<el-form-item label="部门" prop="department">
<el-input v-model="queryParams.department" placeholder="请输入部门" clearable @keyup.enter.native="handleQuery"/>
<el-form-item :label="$t('客户状态')" prop="status">
<el-select clearable v-model="queryParams.status" :placeholder="$t('请选择客户状态')" clearable size="small">
<el-option v-for="dict in getDictDatas(DICT_TYPE.CUSTOMER_STATUS)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
<el-form-item :label="$t('创建时间')">
<el-date-picker clearable v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
type="daterange" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" />
</el-form-item>
<el-form-item :label="$t('信用等级')" prop="department">
<el-select clearable v-model="form.level" >
<el-option v-for="(item,index) in creditList" :label="item.nameZh" :key="index" :value="item.id" ></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
</el-form-item>
</el-form>
......@@ -58,38 +72,36 @@
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="客户编号" align="center" prop="number" />
<el-table-column label="客户名称" align="center" prop="name" />
<el-table-column label="客户等级" align="center" prop="level">
<el-table-column :label="$t('客户编号')" align="center" prop="number" />
<el-table-column :label="$t('客户名称')" align="center" prop="name" />
<el-table-column :label="$t('客户等级')" align="center" prop="vipLevelNameZh">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.CUSTOMER_LEVEL" :value="scope.row.level" />
</template>
</el-table-column>
<el-table-column label="国家" align="center" prop="country">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.COUNTRY" :value="scope.row.country" />
</template>
</el-table-column>
<el-table-column label="客户经理" align="center" prop="customerService" :formatter="customerServiceFn">
</el-table-column>
<el-table-column label="客户状态" align="center" prop="status">
<el-table-column :label="$t('信用等级')" prop="creditLevelNameZh"></el-table-column>
<el-table-column :label="$t('客户状态')" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.CUSTOMER_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="部门" align="center" prop="department" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<el-table-column :label="$t('主联系人')" prop="defaultContactName"></el-table-column>
<el-table-column :label="$t('主联系方式')" prop="defaultContactPhone"></el-table-column>
<el-table-column :label="$t('创建时间')" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('客户经理')" align="center" prop="customerService" :formatter="customerServiceFn">
</el-table-column>
<el-table-column :label="$t('国家')" align="center" prop="country" :formatter="countryFormatter"></el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleConfirmService(scope.row)"
<el-button size="mini" type="text" @click="handleConfirmService(scope.row)"
v-hasPermi="['ecw:customer:update']">确认接收</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handOver(scope.row)"
<el-button size="mini" type="text" @click="handOver(scope.row)"
v-hasPermi="['ecw:customer:update']">移交</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
<el-button size="mini" type="text" @click="handleUpdate(scope.row)"
v-hasPermi="['ecw:customer:update']">完善</el-button>
</template>
</el-table-column>
......@@ -314,6 +326,8 @@ import { listServiceUser } from "@/api/system/user"
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
import {CommonStatusEnum} from '@/utils/constants'
import {handOverCustomer} from "../../../api/ecw/customer";
import {getCountryListAll} from "@/api/ecw/country";
import {getCreditPage} from "@/api/customer/credit";
......@@ -360,17 +374,33 @@ export default {
weightUnit: [{ required: true, message: "重货标准(CBM)不能为空", trigger: "blur" }],
},
serviceStaffOptions: []
serviceStaffOptions: [],
customerServiceList:[],
countryList:[],
creditList:[]
};
},
created() {
this.getList();
getCreditPage({page:1,rows:999}).then(r => {
this.creditList = r.data.list
})
// 获得客服人员列表
listServiceUser().then(response => {
this.serviceStaffOptions = response.data;
})
listServiceUser().then(r=>{
this.customerServiceList = r.data;
})
getCountryListAll().then(r => {
this.countryList = r.data
})
},
methods: {
countryFormatter(row, column, cellValue) {
const country = this.countryList.find((e) => e.id === cellValue)
return country?.nameZh
},
customerServiceFn(row){
let obj = this.serviceStaffOptions.find(item => item.id === row.customerService)
return obj ? obj.nickname : '';
......
......@@ -137,7 +137,7 @@
<template slot-scope="scope">
<span> {{ scope.row.discountTotal ? `${scope.row.discountTotal}`:0}}</span>
<dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" />
<span>{{scope.row.discountRemark?('('+scope.row.discountRemark+')'): '' }}</span>
<span v-if="scope.row.discountTotal">{{scope.row.discountRemark?('('+scope.row.discountRemark+')'): '' }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center">
......@@ -262,7 +262,7 @@
</el-table-column>
<el-table-column label="应收金额" align="center" prop="receivableAmount">
<template slot-scope="scope" v-if="scope.row.type !== 'total'">
{{ `${scope.row.receivableAmount - scope.row.discountTotal}(${scope.row.receivableAmount} - ${scope.row.discountTotal})` }}
{{ `${NP.minus(scope.row.receivableAmount, scope.row.discountTotal)}${scope.row.discountTotal > 0 ? `(${scope.row.receivableAmount} - ${scope.row.discountTotal})` : ''}` }}
</template>
</el-table-column>
<el-table-column align="center" width="220">
......@@ -648,6 +648,7 @@ export default {
},
data() {
return {
NP,
loadings: false,
loading1: false,
uploadFileUrl: process.env.VUE_APP_BASE_API + "/app-api/file/upload", // 上传的图片服务器地址
......@@ -688,7 +689,8 @@ export default {
discountVisible: false,
discountForm: {},
selectListRow: {},
selectListIndex: 0
selectListIndex: 0,
flag: false
};
},
async created() {
......@@ -700,6 +702,7 @@ export default {
let that = this;
if (that.$route.query.id) {
this.flag = true
this.id = this.$route.query.id;
console.log(this.id)
getReceiptInfoByIds({ id: this.id }).then(res => {
......@@ -991,17 +994,21 @@ export default {
return NP.divide(this.currencyList.find(v => v.titleEn === 'NGN').huilv, 100).toFixed(6)
},
customerChange(value) {
if (this.flag) {
this.flag = false
return
}
this.form.customerName = value.name
this.form.customerId && getCustomer(this.form.customerId).then(res => {
this.form = {
...this.form,
invoice: this.form.invoice || res.data.invoiceTitle,
taxpayer: this.form.taxpayer || res.data.licenseNumber,
accountBank: this.form.accountBank || res.data.bank,
accountName: this.form.accountName || res.data.bankNumber,
projectName: this.form.projectName || res.data.project,
taxRate: this.form.taxRate || res.data.taxRate,
addressPhone: this.form.addressPhone || `${res.data.billingAddress || ''}/${res.data.billingTell || ''}`,
invoice: res.data.invoiceTitle,
taxpayer: res.data.licenseNumber,
accountBank: res.data.bank,
accountName: res.data.bankNumber,
projectName: res.data.project,
taxRate: res.data.taxRate,
addressPhone: `${res.data.billingAddress || ''}/${res.data.billingTell || ''}`,
}
})
},
......
......@@ -246,7 +246,7 @@
</el-form>
</el-card>
<div slot="footer" style="margin: 20px 0">
<el-button type="primary" @click="submitDraft">保 存</el-button>
<!-- <el-button type="primary" @click="submitDraft">保 存</el-button> -->
<el-button type="primary" @click="submitForm">新 增</el-button>
</div>
<el-dialog
......@@ -416,6 +416,8 @@ import { listSimpleDepts } from "@/api/system/dept";
import { getTradeCityList } from "@/api/ecw/region";
import { getSupplierPage,getSupplier } from "@/api/ecw/supplier";
import { getPayableList, getPayableInfoByIds, createPayment, getPaymentInfoByIds, getPaymentItem, updatePayment } from "@/api/ecw/financial"
import { getCurrencyPage } from "@/api/ecw/currency";
import NP from 'number-precision'
export default {
name: "CreatPayment",
components: {
......@@ -448,10 +450,12 @@ export default {
},
multipleSelection: [],
tradeCityList: [],
allSupplier: []
allSupplier: [],
currencyList: [],
};
},
created() {
async created() {
await getCurrencyPage(this.params).then(res => this.currencyList = res.data.list)
let that = this;
if (that.$route.query.payableId && that.$route.query.payableId !== '0') {
this.payableId = this.$route.query.payableId;
......@@ -627,8 +631,18 @@ export default {
// t && (this.bankData = t.bankList)
},
handleQuery() {},
UStoRMB() {
return NP.divide(this.currencyList.find(v => v.titleEn === 'USD').huilv, 100).toFixed(6)
},
NANtoRMB() {
return NP.divide(this.currencyList.find(v => v.titleEn === 'NGN').huilv, 100).toFixed(6)
},
handleSelectionChange(val) {
this.multipleSelection = val;
this.multipleSelection = val.map(v => {
if(v.currencyId === 1) return Object.assign(v, { exchangeRate: this.UStoRMB() })
if(v.currencyId === 2) return Object.assign(v, { exchangeRate: 1 })
if(v.currencyId === 3) return Object.assign(v, { exchangeRate: this.NANtoRMB() })
});
},
hiddenDialog() {
this.open = false;
......
......@@ -71,10 +71,6 @@
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['ecw:customer:export']">{{$t('导出')}}</el-button>
</el-col>
<el-col :span="1.5">
<el-button :disabled="selectCustomerList.length === 0" type="primary" size="mini" @click="show = true;" :loading="exportLoading"
v-hasPermi="['ecw:customer:export']">{{$t('批量移交')}}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
......
......@@ -70,11 +70,6 @@
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['ecw:customer:export']">{{$t('导出')}}</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" size="mini" @click="batchHandover"
:disabled="multipleSelection.length === 0"
>{{$t('批量移交')}}</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
......
......@@ -105,10 +105,10 @@
<dict-tag :value="scope.row.unit" :type="DICT_TYPE.ECW_PACKAGING_TYPE" defaultable />
</template>
</el-table-column>
<el-table-column :label="$t('箱规(m)')" width="120px" prop="boxGauge" />
<el-table-column :label="$t('体积(m³)')" width="100px" prop="volume" />
<el-table-column :label="$t('重量(kg)')" width="100px" prop="weight" />
<el-table-column :label="$t('货值(RMB)')" width="100px" prop="worth" />
<el-table-column :label="$t('箱规') + '(m)'" width="120px" prop="boxGauge" />
<el-table-column :label="$t('体积') + '(m³)'" width="100px" prop="volume" />
<el-table-column :label="$t('重量') + '(kg)'" width="100px" prop="weight" />
<el-table-column :label="$t('货值') + '(RMB)'" width="100px" prop="worth" />
<el-table-column :label="$t('商品特性')" width="200px" prop="prodAttrName" />
<el-table-column :label="$t('是否预付')">
<template slot-scope="scope">
......
......@@ -15,7 +15,23 @@
<dict-selector :type="DICT_TYPE.ECW_WAREHOUSING_TYPE" v-model="form.warehousingType" />
</el-form-item>
<el-form-item label="关联订单" prop="orderIds">
<el-input v-model="form.orderIds" style="width: 206px;"></el-input>
<!-- <el-input v-model="form.orderIds" style="width: 206px;"></el-input> -->
<el-select
v-model="form.orderNo"
filterable
remote
reserve-keyword
placeholder="订单号"
@focus="checkOptions"
:remote-method="remoteMethod"
:loading="selectLoading">
<el-option
v-for="item in orderNoList"
:key="item.value"
:label="item.value"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</template>
<template v-else>
......@@ -39,6 +55,7 @@ import RoutersSelector from '@/components/RoutersSelector'
import ProductsSelector from '@/components/ProductsSelector'
import Editor from '@/components/Editor'
import Selector from '@/components/Selector/index'
import {getOrderNoSearch} from '@/api/ecw/order'
export default {
name: "OfferResult",
components: { CustomersSelector, RoutersSelector, ProductsSelector, Editor, Selector },
......@@ -59,7 +76,9 @@ export default {
// 表单校验
rules: {
warehousingType: {required: true, message: '请选择入仓类型'}
}
},
selectLoading: false,
orderNoList: []
};
},
computed: {
......@@ -97,6 +116,19 @@ export default {
});
});
},
remoteMethod(query){
this.selectLoading = true
getOrderNoSearch({key: query, pageSize: 200}).then(res => {
this.orderNoList = res.data.list
}).finally(res => {
this.selectLoading = false
})
},
checkOptions(){
if(!this.orderNoList.length){
this.remoteMethod("")
}
}
},
};
</script>
\ No newline at end of file
......@@ -31,7 +31,7 @@
<div>重量:{{ row.sumWeight || 0 }}KG</div>
</template>
</el-table-column>
<el-table-column label="入仓时间">
<el-table-column label="入仓时间" prop="rucangTime">
</el-table-column>
<el-table-column label="运输方式">
......
......@@ -207,13 +207,13 @@ export default {
};
</script>
<style rel="stylesheet/scss" lang="scss">
<style lang="scss" scoped>
.login {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
background-image: url("https://musician-release-1305250541.file.myqcloud.com/static/bg-login.png");
background-image: url(../assets/images/bg-login.png);
background-size: cover;
}
.title {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment