更新舱位

szh-new
sunzehua 3 months ago
commit 5dd9869a0b

@ -10,7 +10,7 @@
/>
<title><%= title %></title>
<link rel="icon" href="/favicon.ico" />
<link rel="stylesheet" href="//at.alicdn.com/t/c/font_3756681_j0sw6eo6ae.css" />
<link rel="stylesheet" href="//at.alicdn.com/t/c/font_3756681_39sb3qu5lct.css" />
</head>
<body>
<script>

@ -169,7 +169,6 @@
source: async (query, process) => {
const res = feeDict.value.length ? feeDict.value : (await GetFeeCodeSelectList())?.data
if (!feeDict.value.length) feeDict.value = res
console.log(res)
const dict = res.map((res) => {
return res.code + '-' + res.name
})

@ -68,6 +68,7 @@
padding: 0px;
}
}
.ant-table-thead {
th {
background-color: rgba(240, 244, 250, 1) !important;
@ -184,7 +185,6 @@
.ht_master {
.wtHolder {
min-height: 200px!important;
overflow: visible!important;
}
}
}

@ -79,7 +79,7 @@ getDictOption('seaexport_ctn_map').then((res) => {
export const searchFormSchema: FormSchema[] = [
{
field: 'customerNo:mblno:hblno',
field: 'customerNo:mblno:hblno:bookingNo:contractNo:customerNum',
label: '编号查询',
component: 'Input',
// defaultValue: '',
@ -307,7 +307,7 @@ export const searchFormSchema: FormSchema[] = [
},
{
field: 'contractNo',
label: '运费协议号',
label: '号',
component: 'Input',
show: false
},
@ -553,7 +553,13 @@ export const columns: BasicColumn[] = [
},
{
dataIndex: 'contractNo',
title: '运费协议号',
title: '约号',
sorter: true,
width: 150,
},
{
dataIndex: 'customerNum',
title: '客户编号',
sorter: true,
width: 150,
},
@ -1469,7 +1475,7 @@ export const BatchModificationFormSchema: FormSchema[] = [
},
{
field: 'contractNo',
label: '运费协议号',
label: '号',
component: 'Input',
required: false,
dynamicDisabled: false,

@ -43,7 +43,6 @@
<script lang="ts" setup>
import { ref, nextTick, defineProps, defineComponent, onMounted, defineExpose } from 'vue'
import { HotTable } from '@handsontable/vue3'
import { registerAllModules } from 'handsontable/registry'
import 'handsontable/dist/handsontable.full.min.css'
import { GetOpCtnList } from '/@/views/operation/seaexport/api/BookingLedger'
import { GetCtnSelectList, GetPackageSelectList } from '/@/api/common'

@ -98,10 +98,14 @@
:id="id"
businessType="1"
>
<a-button v-repeat v-if="route.query.status != 'WAIT_ORDER_AUDIT'" @click="completeTask" type="primary">
{{ completeText }}
</a-button>
<span>
<a-button v-repeat class="mr10" v-if="route.query.source == 'Create' && route.query.status == 'WAIT_ORDER_AUDIT'" @click="save" type="primary">
保存
</a-button>
<a-button v-repeat v-if="route.query.status != 'WAIT_ORDER_AUDIT'" @click="completeTask" type="primary">
{{ completeText }}
</a-button>
</span>
</ApproveBtns>
</div>
</div>
@ -120,7 +124,7 @@
</transition>
<transition name="slide">
<rightContent
v-if="id"
v-if="id && !isOpenSet"
class="right-content"
ref="RefrightContent"
:id="id"
@ -213,6 +217,7 @@
import { useMultipleTabStore } from '/@/store/modules/multipleTab'
import { Divider } from 'ant-design-vue'
import { fastCall } from 'handsontable/helpers'
const go = useGo()
// loading
@ -754,7 +759,6 @@
}
//
const approveDc = (remark) => {
save()
const postData = {
result: remark ? 2 : 1,
ids: [id.value],

@ -5,7 +5,7 @@ import { ref, unref } from 'vue'
import { BasicColumn, FormSchema } from '/@/components/Table'
import { getDictOption } from '/@/utils/dictUtil'
// 下拉框数据接口
import { GetClientListByCode, GetCarrierSelectList, GetControllerClientList } from '/@/api/common'
import { GetClientListByCode, GetCarrierSelectList, GetControllerClientList, getOrgList } from '/@/api/common'
import {
GetPackageSelectList,
GetOrderContactListByClientId,
@ -23,7 +23,8 @@ import {
GetSaleList,
GetCustomerServiceList,
GetVouchingClerkList,
GetLaneUserList
GetLaneUserList,
GetClientSourceSelectList
} from '/@/views/operation/seaexport/api/BookingLedger'
import { useOptionsStore } from '/@/store/modules/options'
const optionsStore = useOptionsStore()
@ -56,15 +57,11 @@ const FntradeTerm = ref([])
getDictOption('packing_type').then((res) => {
FntradeTerm.value = res
})
// 单提份数字典
// 单提份数/副本份数字典
const FnnoBill = ref([])
getDictOption('no_bill').then((res) => {
FnnoBill.value = res
})
// 副本份数字典
const FncopyNoBill = ref([])
getDictOption('copy_no_bill').then((res) => {
FncopyNoBill.value = res
console.log(FnnoBill.value)
})
// 销售字典
const salerCodeDict = ref([])
@ -209,11 +206,13 @@ export const basicInfoFormSchema: FormSchema[] = [
mode: 'SECRET_COMBOBOX_MODE_DO_NOT_USE',
onChange: (e, obj) => {
if (e && obj) {
cno.value = e
cno.value = obj.contractNote
}
},
onBlur: () => {
formActionType ? formActionType.linkageForm(cno) : null
if (cno.value) {
formActionType ? formActionType.linkageForm(cno) : null
}
}
}
}
@ -1303,7 +1302,7 @@ export const noteFormSchema: FormSchema[] = [
component: 'Select',
required: false,
dynamicDisabled: false,
// defaultValue: '',
defaultValue: null,
colProps: { span: 5 },
componentProps: {
options: FnnoBill,
@ -1320,10 +1319,10 @@ export const noteFormSchema: FormSchema[] = [
component: 'Select',
required: false,
dynamicDisabled: false,
// defaultValue: '',
defaultValue: null,
colProps: { span: 5 },
componentProps: {
options: FncopyNoBill,
options: FnnoBill,
allowClear: true,
showSearch: true,
filterOption: (input: string, option: any) => {
@ -1722,11 +1721,13 @@ export const cargoInfoFormSchema2: FormSchema[] = [
field: 'goodsName',
label: '品名',
component: 'ApiSelect',
labelSlot: 'goodsName',
required: false,
dynamicDisabled: false,
show: ({ values }) => {
return !values.isPreOrder
},
defaultValue: null,
colProps: { span: 12 },
componentProps: ({ formModel }) => {
return {
@ -2018,8 +2019,6 @@ export const otherInfoFormSchema: FormSchema[] = [
componentProps: ({ formModel, formActionType }) => {
return {
api: GetSaleList,
allowClear: true,
showSearch: true,
labelField: 'pinYinCode',
showName: 'userName',
valueField: 'userName',
@ -2027,89 +2026,18 @@ export const otherInfoFormSchema: FormSchema[] = [
resultField: 'data',
onChange: async (e, obj) => {
if (e && obj) {
const saleDeptIdArr: any = []
formModel.saleId = obj.id
formModel.saleOrgId = obj.defaultOrgId
formModel.saleDeptId = obj.deptId
if (formActionType) {
const saleDeptDict: any = []
obj.saleOrgList.forEach((item) => {
saleDeptDict.push({ label: item.orgName, value: item.orgId })
})
if (obj.defaultOrgId) {
await GetDeptList({ orgId: obj.defaultOrgId }).then((res) => {
res.data.forEach((item) => {
saleDeptIdArr.push({ label: item.orgName, value: item.id })
})
})
}
const { updateSchema } = formActionType
updateSchema([
{
label: '所属分部',
field: 'saleOrgId',
component: 'Select',
required: false,
dynamicDisabled: false,
calssName: 'saleOrgId',
// defaultValue: '',
colProps: { span: 12 },
componentProps: {
allowClear: true,
options: saleDeptDict,
showSearch: true,
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
onChange: (e, obj) => {
formModel.saleDeptId = ''
GetDeptList({ orgId: e }).then((res) => {
let Arr: any = []
res.data.forEach((item) => {
Arr.push({ label: item.orgName, value: item.id })
})
updateSchema({
label: '所属部门',
field: 'saleDeptId',
component: 'Select',
required: false,
dynamicDisabled: false,
// defaultValue: '',
colProps: { span: 12 },
componentProps: {
allowClear: true,
options: Arr,
showSearch: true,
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
}
})
})
}
}
},
{
label: '所属部门',
field: 'saleDeptId',
component: 'Select',
required: false,
dynamicDisabled: false,
// defaultValue: '',
colProps: { span: 12 },
componentProps: {
allowClear: true,
options: saleDeptIdArr,
showSearch: true,
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
},
},
])
}
} else {
formModel.saleDeptName = obj.deptName
formModel.saleOrgName = obj.defaultOrgName
}
if (!e && !obj) {
formModel.saleId = null
formModel.saleOrgId = null
formModel.saleDeptId = null
formModel.saleDeptName = null
formModel.saleOrgName = null
}
}
}
@ -2339,38 +2267,38 @@ export const otherInfoFormSchema: FormSchema[] = [
{
label: '',
component: 'Input',
field: 'sourceName',
field: 'sourceId',
show: false
},
{
label: '业务来源',
field: 'sourceId',
field: 'sourceName',
component: 'ApiSelect',
required: false,
dynamicDisabled: false,
colProps: { span: 12 },
componentProps: ({ formModel }) => {
return {
option: optionsStore.getOptionsByCode('GetClientSourceSelectList'),
api: GetClientSourceSelectList,
labelField: 'sourceName',
valueField: 'id',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
valueField: 'sourceName',
immediate: false,
resultField: 'data',
onChange: async (e, obj) => {
console.log(obj)
if (e && obj) {
formModel.sourceCode = obj.sourceCode
formModel.sourceCode = obj.sourceName
formModel.sourceId = obj.id
}
if (!e && !obj) {
formModel.sourceCode = null
formModel.sourceCode = null
formModel.sourceId = null
}
formModel.sourceDetailId = null
formModel.sourceDetailName = null
},
}
}
},
}
},
{
label: '来源明细',
@ -2424,49 +2352,47 @@ export const otherInfoFormSchema: FormSchema[] = [
colProps: { span: 12 }
},
{
label: '所属分部',
label: '',
field: 'saleOrgId',
component: 'Input',
show: false,
},
{
label: '所属分部',
field: 'saleOrgName',
component: 'ApiSelect',
required: false,
colProps: { span: 12 },
calssName: 'saleOrgId',
dynamicDisabled: ({ values }) => {
return !values.saleId
},
componentProps: ({ formModel }) => {
return {
option: optionsStore.getOptionsByCode('GetOrgList'),
allowClear: true,
showSearch: true,
api: getOrgList,
labelField: 'label',
valueField: 'value',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
resultField: 'data',
immediate: false,
onChange: (e, obj) => {
if (obj) {
console.log(obj)
if (e && obj) {
formModel.saleOrgName = obj.label
} else {
formModel.saleOrgName = ''
formModel.saleOrgId = obj.id
}
if (!e && !obj) {
formModel.saleOrgName = null
formModel.saleOrgId = null
}
}
}
}
},
{
field: 'saleDeptName',
field: 'saleDeptId',
label: '',
component: 'Input',
show: false
},
{
field: 'saleDeptName',
label: '',
component: 'Input',
show: false
},
{
field: 'saleDeptId',
label: '所属部门',
component: 'ApiSelect',
required: false,
@ -2474,19 +2400,21 @@ export const otherInfoFormSchema: FormSchema[] = [
colProps: { span: 12 },
componentProps: ({ formModel }) => {
return {
option: optionsStore.getOptionsByCode('GetDeptList'),
allowClear: true,
showSearch: true,
labelField: 'orgName',
valueField: 'id',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
api: GetDeptList,
params: {
orgId: formModel.saleOrgId
},
labelField: 'orgName',
valueField: 'orgName',
resultField: 'data',
immediate: false,
onChange: (e, obj) => {
if (obj) {
formModel.saleDeptName = obj.label
} else {
formModel.saleDeptName = ''
console.log(obj)
if (e && obj) {
formModel.saleDeptId = obj.id
}
if (!e && !obj) {
formModel.saleDeptId = null
}
}
}

@ -212,7 +212,6 @@
// 5.
// 6.
const linkageForm = async (item) => {
console.log(item)
if (item.key == 'contractNo') {
//
emitter.emit('seaAddNotes', item.value)

@ -36,7 +36,11 @@
<BasicForm @register="registerForm1" class="goods-intro"/>
</a-col>
<a-col :span="9">
<BasicForm @register="registerForm2" @submit="submit" />
<BasicForm @register="registerForm2" @submit="submit">
<template #goodsName="{ model }">
<span class="iconfont icon-jichupeizhi"></span>
</template>
</BasicForm>
</a-col>
</a-row>
</a-col>
@ -401,27 +405,27 @@
//
const source = ref(route.query.source || 'edit')
onMounted(() => {
if (source.value != 'edit') {
cargoInfoFormSchema1.forEach(item => {
item.dynamicDisabled = true
})
cargoInfoFormSchema2.forEach(item => {
item.dynamicDisabled = true
})
cargoInfoFormSchema3.forEach(item => {
item.dynamicDisabled = true
})
} else {
cargoInfoFormSchema1.forEach(item => {
item.dynamicDisabled = false
})
cargoInfoFormSchema2.forEach(item => {
item.dynamicDisabled = false
})
cargoInfoFormSchema3.forEach(item => {
item.dynamicDisabled = false
})
}
// if (source.value != 'edit') {
// cargoInfoFormSchema1.forEach(item => {
// item.dynamicDisabled = true
// })
// cargoInfoFormSchema2.forEach(item => {
// item.dynamicDisabled = true
// })
// cargoInfoFormSchema3.forEach(item => {
// item.dynamicDisabled = true
// })
// } else {
// cargoInfoFormSchema1.forEach(item => {
// item.dynamicDisabled = false
// })
// cargoInfoFormSchema2.forEach(item => {
// item.dynamicDisabled = false
// })
// cargoInfoFormSchema3.forEach(item => {
// item.dynamicDisabled = false
// })
// }
})
function SetTOTALNO(SS) {
let DSS = SS.toString()
@ -650,6 +654,11 @@
height: 130px;
}
}
.icon-jichupeizhi {
float: right;
color: #257AFA;
cursor: pointer;
}
.icon-30jiantouxiangxiafill {
margin-left: 3px;
}

@ -1012,6 +1012,7 @@
})
list.value = res
hotmain.value.hotInstance.loadData(res)
computing()
}
const moreVisible = ref(false)
//
@ -1307,13 +1308,13 @@
},
])
init()
function init() {
GetCtnSelectList().then((res) => {
ctnDict.value = res.data
})
tableLoaded.value = true
}
// init()
// function init() {
// GetCtnSelectList().then((res) => {
// ctnDict.value = res.data
// })
// tableLoaded.value = true
// }
function changeSelectedRowKeys(keys) {
selectArr.value = keys
checkboxOption.value.selectedRowKeys = keys
@ -1358,6 +1359,12 @@
const data = JSON.parse(res.data)
//
if (data.length) {
// cntrNo
for (var i = 0; i < list.value.length; i++) {
if (!list.value[i].cntrNo) {
list.value.splice(i, 1)
}
}
//
for (var i = 0; i < data.length; i++) {
if (list.value.length) {
@ -1774,6 +1781,7 @@
}
//
if (changes[0][1] === 'ctnNum') {
console.log(ctnDict.value)
let RData = 0
list.value.forEach((e) => {
if (e.ctnNum) {
@ -1781,6 +1789,8 @@
}
})
let teu = 0
const res = ctnDict.value.length ? ctnDict.value : (await GetCtnSelectList())?.data
ctnDict.value = res
ctnDict.value.forEach((item) => {
if (item.ctnName == list.value[changes[0][0]]['ctn']) {
teu = item.teu
@ -2004,7 +2014,19 @@
}
}
}
</style>
<style>
</style>
<style lang='less'>
.goods-table {
.handsontable {
.wtHider {
max-height: 240px!important;
min-height: 130px;
}
.htCheckboxRendererInput {
position: relative;
z-index: 1111;
}
}
}
</style>

@ -317,15 +317,6 @@ const linkageForm = async (val) => {
orderList.value[editIndex.value].hblno = val
}
function close() {
openPreOrderShow.value = false
}
@ -1017,6 +1008,9 @@ defineExpose({
.right {
width: calc(100% - 320px);
height: 80vh;
overflow-y: auto;
overflow-x: hidden;
}
.left-title {

@ -211,7 +211,10 @@
<div style="max-height: 182px; overflow: auto;">
<div class="remark" v-for="(remark, rindex) in RemarkList" :key="rindex">
<div class="remark-main">
<div class="top"><i class="iconfont icon-yuandian"></i>{{ remark.remark }}</div>
<div class="top flex">
<i class="iconfont icon-yuandian"></i>
<div v-html="remark.remark"></div>
</div>
</div>
<div class="remark-btn">
<i class="iconfont icon-bianji1 mr15" @click="editRemark(remark)"></i>
@ -569,8 +572,12 @@
function Getremark() {
remarkSpinning.value = true
GetSeaExportRemarkList({ id: props.id }).then((res) => {
const { data } = res
remarkSpinning.value = false
RemarkList.value = res.data
data.forEach(item => {
if (item.remark) item.remark = item.remark.replace(/\n/g,'<br/>')
})
RemarkList.value = data
})
}
//
@ -994,6 +1001,7 @@
}
onMounted(() => {
emitter.on('seaAddNotes', (v) => {
console.log(v)
if (!props.id) return
if (RemarkList) {
for (var i = 0; i < RemarkList.value.length; i++) {
@ -1002,16 +1010,17 @@
}
}
}
if (!v) return
EditSeaExportRemark({
id: editRemarkVal.value ? editRemarkVal.value.id : 0,
pId: props.id,
remark: v,
})
.then((res) => {
if (res.succeeded) {
Getremark()
}
})
.then((res) => {
if (res.succeeded) {
Getremark()
}
})
})
})
defineExpose({
@ -1029,6 +1038,9 @@
cursor: pointer;
}
}
.top {
justify-content: flex-start;
}
position: relative;
top: -40px;
background: #ffffff;

@ -377,7 +377,7 @@ const calcColumns = [
},
]
//
const calcData = ref([])
const calcData = ref([{}])
//
const [registerModal, { openModal }] = useModal()
const [registerTable, { reload, getForm, setLoading, getSelectRows }] = useTable({
@ -613,6 +613,11 @@ onMounted(() => {
color: #257afa;
cursor: pointer;
}
.ds-table {
.ant-table-body {
min-height: calc(100vh - 310px);
}
}
}
.compareIcon {

@ -391,6 +391,12 @@ export const formSchema: FormSchema[] = [
}
},
},
{
field: 'defaultOrgName',
label: '',
component: 'Input',
show: false
},
{
field: 'defaultOrgId',
label: '默认机构',
@ -398,7 +404,7 @@ export const formSchema: FormSchema[] = [
component: 'Select',
// defaultValue: '',
colProps: { span: 12 },
componentProps: ({ formActionType }) => {
componentProps: ({ formModel, formActionType }) => {
return {
options: selectOrgList.value || [],
resultField: 'data',
@ -406,7 +412,7 @@ export const formSchema: FormSchema[] = [
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
onChange: async (e: ChangeEvent) => {
onChange: async (e, obj) => {
const res: API.DataResult = await getDeptList({ orgId: e })
if (res.succeeded) {
selectDeptList.value = []
@ -414,6 +420,12 @@ export const formSchema: FormSchema[] = [
selectDeptList.value.push({ label: e.orgName, value: e.id })
})
}
if (e && obj) {
formModel.defaultOrgName = obj.label
}
if (!e && !obj) {
formModel.defaultOrgName = null
}
if (formActionType) {
formActionType.setFieldsValue({
deptId: '',
@ -423,18 +435,34 @@ export const formSchema: FormSchema[] = [
}
},
},
{
field: 'deptName',
label: '',
component: 'Input',
show: false
},
{
field: 'deptId',
label: '默认部门',
component: 'Select',
// defaultValue: '',
colProps: { span: 12 },
componentProps: {
options: selectDeptList,
allowClear: true,
showSearch: true,
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
componentProps: ({ formModel }) => {
return {
options: selectDeptList,
allowClear: true,
showSearch: true,
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
onChange: (e, obj) => {
if (e && obj) {
formModel.deptName = obj.label
}
if (!e && !obj) {
formModel.deptName = null
}
}
}
},
dynamicDisabled: ({ values }) => {

Loading…
Cancel
Save