This commit is contained in:
linfso 2025-03-01 13:52:55 +08:00
parent bef59a9f6a
commit 1086b8f998
5 changed files with 518 additions and 15 deletions

View File

@ -19,7 +19,12 @@
>
<!-- @blur="onBlur" -->
<el-option v-for="item in optionItems" :key="item.code" :label="item.name+'('+item.nameEn+')'" :value="item.code" ></el-option>
<el-option v-for="item in optionItems"
:key="item.code"
:label="item.name+'('+item.nameEn+')'"
:value="item.code"
:disabled="item.disabled"
></el-option>
</el-select>
</template>
<script>
@ -57,14 +62,19 @@
},
watch: {
value(newVal,oldVal) {
// if(this.value){
// this.svalue=this.value.split(",");
// this.queryData(null,this.svalue.join(","));
// }
console.log("country muti select picker==333==>",newVal);
if(this.value){
this.svalue=this.value.split(",");
this.queryData(null,this.svalue.join(","));
}
},
},
created() {
console.log("country muti select picker==111==>",this.value);
if(this.value){
this.optionItems=null;
this.defaultItems=null;
this.svalue=this.value.split(",");
this.queryData(null,this.svalue.join(","));
}else{
@ -72,6 +82,17 @@
}
},
mounted(){
console.log("country muti select picker==222==>",this.value);
if(this.value){
this.optionItems=null;
this.defaultItems=null;
this.svalue=this.value.split(",");
this.queryData(null,this.svalue.join(","));
}else{
this.svalue=[];
}
let rulesDom = this.$refs["selectRef"].$el.querySelector(".el-input .el-input__suffix .el-input__suffix-inner .el-input__icon"); // 找到dom
    rulesDom.classList.add("el-icon-arrow-up"); // 对dom新增class
},
@ -94,9 +115,31 @@
},
onChange() {
if(this.svalue&&this.svalue.length>0){
// if (this.svalue.includes('-1')||this.svalue.includes('-2')) {
// this.optionItems.map((res) => {
// if((res.code != '-1')&&(res.code != '-2')){
// res.disabled = true;
// }else{
// res.disabled = false;
// }
// });
// }else{
// this.optionItems.map((res) => {
// if( ( (res.code == '-1') || (res.code == '-2') ) && this.svalue.length>0){
// res.disabled = true;
// }else{
// res.disabled = false;
// }
// });
// }
this.$emit("input", this.svalue.join(","));
this.$emit("onChange",this.svalue);
}else{
this.optionItems.map((res) => {
res.disabled = false;
});
this.$emit("input", null);
this.$emit("onChange",null);
}
@ -105,17 +148,24 @@
debounce(this.queryData(val,key),1000);
},
queryData(val,key) {
this.optionItems=[];
let queryParams = {
pageNum:1,
pageSize:10,
code:key,
name:val
name:val,
code:key
};
listSimpleEmisCountry(queryParams).then(response => {
let allCuntruny={code:'-1',name:'全部',nameEn:'all'};
let allCountry={code:'-1',name:'全部',nameEn:'all'};
let allNoChinaCountry={code:'-2',name:'非中国',nameEn:'No China'};
this.optionItems =response.rows;
this.optionItems.unshift(allCuntruny);
this.optionItems.unshift(allNoChinaCountry);
this.optionItems.unshift(allCountry);
// 初始值存储
if(key==null && val==null){
this.defaultItems=[...this.optionItems]

View File

@ -0,0 +1,233 @@
<template>
<div :id="createdId">
<SearchForm :model="queryParams" ref="queryForm" size="mini" :maxShow="20" label-width="68px" @search="handleQuery" @reset="resetQuery">
<el-form-item label="员工名称" prop="empName">
<XdTextareaInput
v-model="queryParams.empName"
:placeholder="$t('多个流水号逗号或换行隔开')"
clearable
:rows="4"
/>
</el-form-item>
</SearchForm>
<XdTable
max-height="300px"
v-loading="loading"
border
size="mini"
:data="optionItems"
storageName="emisUser_main_picker"
:showSearch.sync="showSearch"
:total="total"
highlight-current-row
:showStatInfo="false"
:showRightButton="false"
:showOperateButton="false"
:showCustomizeTpl="false"
@queryTable="queryData"
:queryParams="queryParams"
@selection-change="handleSelectionChange"
@sort-change="handleSortChange"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="员工编号" align="center" prop="empCode" width="80"/>
<el-table-column label="员工名称" align="left" prop="empName" :show-overflow-tooltip="true" width="100" >
<template slot-scope="scope">
<div class="link-type"><span>{{scope.row.empName}}</span> </div>
</template>
</el-table-column>
<el-table-column label="所属网点" align="left" prop="ownerSiteName" :show-overflow-tooltip="true" width="100" >
<template slot-scope="scope">
<div class="link-type" @click="handleUpdate(scope.row)"><span v-if="scope.row.ownerSiteCode!=null">{{scope.row.ownerSiteName}}</span> </div>
</template>
</el-table-column>
<el-table-column label="所属部门" align="center" key="deptName" prop="dept.deptName" width="100" :show-overflow-tooltip="true" />
<el-table-column label="启用状态" align="center" prop="blOpen" width="100" >
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_biz_enable_status" :value="scope.row.blOpen"/>
</template>
</el-table-column>
<el-table-column label="电话" align="center" key="phonenumber" prop="phonenumber" width="100" />
<!-- <el-table-column label="邮箱" align="center" key="email" prop="email" width="100" /> -->
<!-- <el-table-column label="住址" align="center" key="address" prop="address" width="100" /> -->
<el-table-column label="员工类型" align="center" key="postNames" prop="postNames" width="100" />
</XdTable>
<div style="text-align: center;margin-bottom: 10px;">
<el-button type="primary" @click="confirmSelect">确定</el-button>
<el-button @click="cancelSelect">取 消</el-button>
</div>
</div>
</template>
<script>
import emitter from 'element-ui/src/mixins/emitter';
import { listUser } from "@/api/system/user";
import { listPost } from "@/api/system/post";
import CountryPicker from '@/views/emis/EmisBaseTools/CountryPicker.vue';
import EmisSiteSimplePicker from '@/views/emis/EmisBaseTools/EmisSiteSimplePicker.vue';
export default {
name: "EmisStaffListPicker",
components: { CountryPicker,EmisSiteSimplePicker },
mixins: [emitter],
dicts: ['sys_normal_disable', 'sys_user_sex','emis_site_type','sys_biz_enable_status'],
props: {
placeholder:{
type: String,
required: false
}
},
data() {
return {
createdId: '0',
loading:false,
total:0,
optionItems: [],
// 选中数组
ids: [],
empCodeStr:null,
empNameStr:null,
// 岗位选项
postOptions: [],
// 显示搜索条件
showSearch: true,
// 缺省值
defaultTotal:0,
defaultItems:null,
sId: null,
svalue: this.value,
isInputing: false,
queryParams:{
pageNum: 1,
pageSize: 10,
empCode: undefined,
empName: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined,
postIds: undefined,
params:{
countryCode:null,
siteType:null,
parentSiteCode:null,
blIncludeChildSite:'1',
}
}
};
},
watch: {
value(newVal,oldVal) {
this.svalue=this.value;
},
},
mounted() {
this.createdId = String(new Date().getTime()) // 给个随机id 判断是否clickoutside
},
created() {
this.initPost();
if(this.svalue!=null){
this.svalue = this.value;
}
},
methods: {
handleSelectionChange(selection) {
this.ids = selection.map(item => item.userId);
let empCodeArr = selection.map(item => item.empCode);
let empNameArr = selection.map(item => item.empName);
this.empCodeStr="";
this.empNameStr="";
if(empCodeArr.length > 0){
this.empCodeStr=empCodeArr.join(",");
this.empNameStr=empNameArr.join(",");
}
},
handleSortChange(column) {
},
initPost() {
let queryParams = {pageNum: 1,pageSize: 100};
listPost(queryParams).then(response => {
this.postOptions = response.rows;
});
},
handleInput(val) {
if(val == null ) return;
this.isInputing = true;
this.svalue = val;
this.queryParams.pageNum = 1
this.queryData(val,null)
},
confirmSelect(){
this.$emit("on-changed",this.empCodeStr,this.empNameStr);
},
cancelSelect(){
this.$emit("on-cancel");
},
onRowClick(row, column, event) {
this.svalue=row.name;
this.isInputing = false;
this.sId=row.id;
this.$emit("input", this.svalue);
this.$emit("onChange",row);
},
isRed({ row }) {
if (row.id == this.sId) {
return {
"color": "red",
"font-weight": "bold",
};
}
},
changePage(cur) {
this.queryParams.pageNum = cur
this.queryData(this.queryParams.searchValue)
},
onClear(el){
this.svalue = null;
this.$emit("input", this.svalue);
this.dispatch('ElFormItem', 'el.form.blur', [this.svalue]);
},
onBlur(el) {
this.$emit("input", this.svalue);
this.dispatch('ElFormItem', 'el.form.blur', [this.svalue]);
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.queryData();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
queryData(val,key) {
this.loading = true;
this.queryParams.searchValue = val;
listUser(this.queryParams).then(response => {
this.loading = false;
this.total = response.total;
this.optionItems = response.rows;
});
},
getIndex($index) {
return (this.queryParams.pageNum - 1) * this.queryParams.pageSize + $index + 1
},
}
};
</script>

View File

@ -0,0 +1,147 @@
<template>
<!-- collapse-tags -->
<el-select
multiple
filterable
clearable
ref="selectRef"
v-model="svalue"
:placeholder="placeholder"
@blur="onBlur"
@focus="onFocus"
style="width:100%"
class="mutiSelect"
:popper-append-to-body="false"
@change="onChange">
<div style="padding: 0px 8px 0 20px;width:100%;line-height:34px;display:inline-flex">
<div style="width:50%">
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">全选</el-checkbox>
</div>
<div style="width:50%;text-align:right">
<el-button type="primary" size="mini" style="padding:2px 10px" @click="hideMe">确定</el-button>
</div>
</div>
<el-checkbox-group v-model="svalue">
<el-option v-for="item in optionItems" :key="item.prodCode" :label="item.lineName" :value="item.lineCode">
<el-checkbox style="pointer-events: none" :key="item.lineCode" :label="item.lineCode+''">{{item.lineName}}</el-checkbox>
</el-option>
<!-- style="pointer-events: none" -->
</el-checkbox-group>
</el-select>
<!-- style="width:100%" multiple-->
</template>
<script>
import emitter from 'element-ui/src/mixins/emitter';
import { listSimpleEmisTransLine } from "@/api/emis/emisTransLine";
export default {
name: "TransLineMultiplePicker",
mixins: [emitter],
props: {
value: {
type: [String],
required: false
},
transLineCode: {
type: String,
required: false
},
placeholder:{
type: String,
required: false
},
isInitiated:{
type: [Boolean,String],
required: false,
default:false
}
},
data() {
return {
optionItems: [],
svalue: [],
isFistInit:true,
checkAll: false, //招标阶段 是否全选
isIndeterminate: false, //全选复选框标识
searchLineCode:this.value,
};
},
watch: {
value(newVal) {
if(this.value){
this.svalue = this.value.split(',');
}
},
transLineCode(newVal) {
this.queryData();
}
},
created() {
this.queryData();
},
methods: {
hideMe(){
this.$refs.selectRef.blur();
},
onFocus(){
this.searchLineCode=null;
},
onBlur(val){
this.$emit("input", this.svalue?this.svalue.join(','):null);
this.dispatch('ElFormItem', 'el.form.blur', [this.svalue]);
},
handleCheckAllChange(isCheckAll){
if(isCheckAll){
const data = this.optionItems.map(item => {
return item.lineCode
})
this.svalue=data
}else{
this.svalue=[];
}
this.$emit("input", this.svalue?this.svalue.join(','):null);
this.isIndeterminate = false;
},
onChange(val) {
console.log(val)
const checkedCount = this.svalue.length;
this.checkAll = checkedCount === this.optionItems.length;
this.isIndeterminate = checkedCount > 0 && checkedCount < this.optionItems.length;
// this.$emit("input", this.svalue);
this.$emit("input", this.svalue?this.svalue.join(','):null);
let itemSelData =[]
this.optionItems.forEach(item=>{
if(item.lineCode === this.svalue){
itemSelData.push(item);
}
});
this.$emit("onChange",itemSelData);
this.dispatch('ElFormItem', 'el.form.change', [this.svalue]);
},
queryData(val,key) {
let queryParams = {
pageNum: 1,
pageSize: 300,
lineCode:key,
lineName:val,
status:1
};
listSimpleEmisTransLine(queryParams).then(response => {
this.optionItems = response.rows;
});
},
}
};
</script>
<style scoped>
.mutiSelect :deep .el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after {
display: none;
}
</style>

View File

@ -22,7 +22,7 @@
</el-col>
<el-col :span="24">
<el-form-item label="线路" prop="transLineCode">
<TransLinePicker v-model="form.transLineCode" isInitiated="true"></TransLinePicker>
<TransLineMultiplePicker v-model="form.transLineCode" isInitiated="true"></TransLineMultiplePicker>
</el-form-item>
</el-col>
<el-col :span="24">
@ -189,10 +189,25 @@
</el-form>
<el-dialog :title="titleForm" :visible.sync="openForm" width="60%" :destroy-on-close="true" v-dialogDrag append-to-body>
<EmisStaffListPicker @on-changed="handleStaffFormChanged" @on-cancel="cancelStaffForm"></EmisStaffListPicker>
<!-- <EmisStaffSimpleListPicker @on-changed="handleStaffFormChanged" @on-cancel="cancelStaffForm"></EmisStaffSimpleListPicker> -->
<el-form size="mini" label-width="60px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('名称')" prop="formBatchEmp">
<el-input v-model="impEmpListStr" type="textarea" :rows="8" placeholder="多个名称使用逗号或换行隔开" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer" style="text-align:center">
<el-button type="primary" @click="submitFormBatchEmp">确定</el-button>
<el-button @click="cancelBatchEmp">取 消</el-button>
</div>
</el-dialog>
<div style="text-align: center;margin-bottom: 10px;">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
@ -210,14 +225,17 @@ import {addDateTimeByDay,dateToStr} from '@/utils/custom'
import CountryMutiSelectPicker from '@/views/emis/EmisBaseTools/CountryMutiSelectPicker.vue';
import CountryMutiSelectPicker1 from '@/views/emis/EmisBaseTools/CountryMutiSelectPicker.vue';
import TransLinePicker from '@/views/emis/EmisBaseTools/TransLinePicker.vue';
import TransLineMultiplePicker from '@/views/emis/EmisBaseTools/TransLineMultiplePicker.vue';
import TransProductMultiplePicker from '@/views/emis/EmisBaseTools/TransProductMultiplePicker.vue';
import EmisSiteSimplePicker from '@/views/emis/EmisBaseTools/EmisSiteSimplePicker.vue';
import EmisStaffListPicker from '@/views/emis/EmisBaseTools/EmisStaffListPicker.vue';
import EmisStaffSimpleListPicker from '@/views/emis/EmisBaseTools/EmisStaffSimpleListPicker.vue';
import { listUser } from "@/api/system/user";
import EcqExpressionPanel from '@/views/emis/emisCommissionQuote/ecqExpressionPanel.vue';
import { PageSizes } from "pdf-lib";
@ -230,7 +248,7 @@ export default {
},
components: {
CountryMutiSelectPicker,CountryMutiSelectPicker1,EmisSiteSimplePicker,EcqExpressionPanel,
EmisStaffListPicker,TransLinePicker,TransProductMultiplePicker
EmisStaffSimpleListPicker,TransLineMultiplePicker,TransProductMultiplePicker
},
dicts: ['emis_price_type','emis_fee_type','sys_currency_type',
'emis_commission_post','emis_biz_shipping_method','emis_commission_fee_type'],
@ -243,6 +261,7 @@ export default {
openForm:false,
// 表单参数
form: {},
impEmpListStr:null,
isCopy:false,
// 表单校验
rules: {
@ -287,12 +306,65 @@ export default {
},
methods: {
// 批量员工录入
async submitFormBatchEmp(){
// 判断员工是否存在
if(this.impEmpListStr==null || this.impEmpListStr==''){
this.$modal.msgError("请输入名称");
return;
}
let userArr=this.impEmpListStr.trim().split(/[;\;\,\,\n]/)||[];
let empCodeStr="";
let empNameStr="";
for(let i=0;i<userArr.length;i++){
let user=await this.getStaffUser(userArr[i]);
console.log("====>user====>",user);
if(user==null){
this.$modal.msgError(userArr[i]+"不存在!");
return
}else{
empCodeStr=empCodeStr+user.empCode+",";
empNameStr=empNameStr+user.empName+",";
}
}
this.form.empCode=empCodeStr;
this.form.empName=empNameStr;
this.openForm=false;
},
cancelBatchEmp(){
this.openForm=false;
},
async getStaffUser(name){
let qParams={
searchValue:name,
pageNum: 1,
pageSize: 1,
params:{
blMatchEmpName:1
}
}
let res=await listUser(qParams);
if(res.code == 200 ){
if(res.total>0){
return res.rows[0];
}else{
return null;
}
}
return null;
},
initData() {
if(this.quoteId !=null) {
this.form={};
this.loading = true;
getEmisCommissionQuote(this.quoteId).then(response => {
this.form = response.data;
console.log("==x1==>",this.form);
if(this.form.transType){
this.$set(this.form,"transTypeIdArr",this.form.transType.split(","))
}

View File

@ -192,6 +192,7 @@
<el-table-column :label="$t('起始国')" align="center" prop="fromCountryName" min-width="100" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.fromCountry=='-1'">全部</span>
<span v-if="scope.row.fromCountry=='-2'">非中国</span>
<span v-else>{{ scope.row.fromCountryName }}</span>
</template>
</el-table-column>
@ -199,6 +200,7 @@
<el-table-column :label="$t('目的国')" align="center" prop="countryName" min-width="100" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.country=='-1'">全部</span>
<span v-if="scope.row.country=='-2'">非中国</span>
<span v-else>{{ scope.row.countryName }}</span>
</template>
</el-table-column>
@ -330,7 +332,6 @@ export default {
/** 查询员工提成方案报价列表 */
getList() {
this.loading = true;
listEmisCommissionQuote(this.addDateRange(this.queryParams, this.dateTimeRange)).then(response => {
this.emisCommissionQuoteList = response.rows;
this.total = response.total;