Merge branch 'dev' of http://60.209.125.238:20010/lijingjia/ds-wms-client-web into frame
commit
6a68262c9c
@ -0,0 +1,697 @@
|
|||||||
|
import { ref, unref } from 'vue'
|
||||||
|
import { BasicColumn, FormSchema } from '/@/components/Table'
|
||||||
|
import { getDictOption } from '/@/utils/dictUtil'
|
||||||
|
// 下拉框数据接口
|
||||||
|
import {
|
||||||
|
GetCarrierSelectList,
|
||||||
|
GetControllerClientList,
|
||||||
|
GetSupplierListByCode,
|
||||||
|
} from '/@/api/common'
|
||||||
|
import {
|
||||||
|
GetClientPortSelectList,
|
||||||
|
GetServiceSelectList,
|
||||||
|
GetVoynoSelectList,
|
||||||
|
GetVesselSelectList,
|
||||||
|
GetClientGoodsList,
|
||||||
|
GetCustomerServiceList,
|
||||||
|
|
||||||
|
} from '/@/views/operation/seaexport/api/BookingLedger'
|
||||||
|
// ai识别表单
|
||||||
|
export const aiForm: FormSchema[] = [
|
||||||
|
{
|
||||||
|
label: '发货人',
|
||||||
|
field: 'shipperContent',
|
||||||
|
component: 'InputTextArea',
|
||||||
|
colProps: { span: 12 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '收货人',
|
||||||
|
field: 'consigneeContent',
|
||||||
|
component: 'InputTextArea',
|
||||||
|
colProps: { span: 12 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '通知人',
|
||||||
|
field: 'notifyPartyContent',
|
||||||
|
component: 'InputTextArea',
|
||||||
|
colProps: { span: 12 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'bookingRemark',
|
||||||
|
label: '订舱备注',
|
||||||
|
component: 'InputTextArea',
|
||||||
|
colProps: { span: 12 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'marks',
|
||||||
|
label: `唛头`,
|
||||||
|
component: 'InputTextArea',
|
||||||
|
colProps: {span: 12,},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'goodsName',
|
||||||
|
label: '品名',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
labelSlot: 'goodsName',
|
||||||
|
colProps: { span: 12 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
api: GetClientGoodsList,
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
valueField: 'pinYinCode',
|
||||||
|
showName: 'goodName',
|
||||||
|
immediate: false,
|
||||||
|
mode: 'SECRET_COMBOBOX_MODE_DO_NOT_USE',
|
||||||
|
resultField: 'data',
|
||||||
|
onChange: (v, obj) => {
|
||||||
|
if (v && obj && obj.id) {
|
||||||
|
setTimeout(() => {
|
||||||
|
if (obj.goodName && obj.goodName.indexOf('(')) {
|
||||||
|
formModel.goodsName = obj.goodName.split('(')[0]
|
||||||
|
} else {
|
||||||
|
formModel.goodsName = obj.goodName
|
||||||
|
}
|
||||||
|
}, 100)
|
||||||
|
if (obj.hsCode) {
|
||||||
|
formModel.hsCode = obj.hsCode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!v && !obj?.id) {
|
||||||
|
formModel.goodsId = null
|
||||||
|
formModel.hsCode = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'mblno',
|
||||||
|
label: '主提单号',
|
||||||
|
labelSlot: 'mblno',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
oninput: () => {
|
||||||
|
formModel.mblno = formModel.mblno.replace(/[\u4e00-\u9fa5]/ig, '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'vesselId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '船名',
|
||||||
|
field: 'vessel',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
api: GetVesselSelectList,
|
||||||
|
labelField: 'vesselName',
|
||||||
|
valueField: 'vesselName',
|
||||||
|
resultField: 'data',
|
||||||
|
immediate: false,
|
||||||
|
mode: 'SECRET_COMBOBOX_MODE_DO_NOT_USE',
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.vesselId = obj.id
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.vesselId = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '海关航次',
|
||||||
|
field: 'voyno',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: () => {
|
||||||
|
return {
|
||||||
|
api: GetVoynoSelectList,
|
||||||
|
labelField: 'voyNo',
|
||||||
|
valueField: 'voyNo',
|
||||||
|
resultField: 'data',
|
||||||
|
immediate: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'carrierId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '船公司',
|
||||||
|
field: 'carrier',
|
||||||
|
labelSlot: 'carrierId',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel, formActionType }) => {
|
||||||
|
return {
|
||||||
|
api: GetCarrierSelectList,
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
showName: 'description',
|
||||||
|
valueField: 'ediCode',
|
||||||
|
resultField: 'data',
|
||||||
|
immediate: false,
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.carrierId = obj.id
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.carrierId = ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'service',
|
||||||
|
label: '运输条款',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
api: GetServiceSelectList,
|
||||||
|
allowClear: true,
|
||||||
|
showSearch: true,
|
||||||
|
labelField: 'cnName',
|
||||||
|
valueField: 'cnName',
|
||||||
|
resultField: 'data',
|
||||||
|
filterOption: (input: string, option: any) => {
|
||||||
|
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
||||||
|
},
|
||||||
|
immediate: false,
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.serviceCode = obj.ediCode
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.serviceCode = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'serviceCode',
|
||||||
|
label: '',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'customerId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '委托单位',
|
||||||
|
labelSlot: 'customerName',
|
||||||
|
field: 'customerName',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel, formActionType }) => {
|
||||||
|
return {
|
||||||
|
api: GetControllerClientList,
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
valueField: 'shortName',
|
||||||
|
showName: 'description',
|
||||||
|
resultField: 'data',
|
||||||
|
immediate: false,
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.customerId = obj.id
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.customerId = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'customerNum',
|
||||||
|
label: '客户编号',
|
||||||
|
component: 'Input',
|
||||||
|
required: false,
|
||||||
|
colProps: { span: 12 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'goodsId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'ctnGoodsInfo',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '装货港',
|
||||||
|
field: 'loadPortCode',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel, formActionType }) => {
|
||||||
|
return {
|
||||||
|
api: GetClientPortSelectList,
|
||||||
|
resultField: 'data',
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
valueField: 'ediCode',
|
||||||
|
showName: 'ediCode',
|
||||||
|
immediate: false,
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.loadPortId = obj.id
|
||||||
|
formModel.loadPort = obj.portName + ',' + obj.countryEnName
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.loadPortId = null
|
||||||
|
formModel.loadPort = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '卸货港',
|
||||||
|
field: 'dischargePortCode',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel, formActionType }) => {
|
||||||
|
return {
|
||||||
|
api: GetClientPortSelectList,
|
||||||
|
resultField: 'data',
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
showName: 'ediCode',
|
||||||
|
valueField: 'ediCode',
|
||||||
|
immediate: false,
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.dischargePortId = obj.id
|
||||||
|
formModel.dischargePort = obj.portName + ',' + obj.countryEnName
|
||||||
|
// 带出交货地
|
||||||
|
formModel.deliveryPlaceId = obj.id
|
||||||
|
formModel.deliveryPlace = obj.portName + ',' + obj.countryEnName
|
||||||
|
formModel.deliveryPlaceCode = e
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.dischargePortId = null
|
||||||
|
formModel.dischargePort = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '交货地',
|
||||||
|
field: 'deliveryPlaceCode',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
api: GetClientPortSelectList,
|
||||||
|
resultField: 'data',
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
showName: 'ediCode',
|
||||||
|
valueField: 'ediCode',
|
||||||
|
immediate: false,
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.deliveryPlaceId = obj.id
|
||||||
|
formModel.deliveryPlace = obj.portName + ',' + obj.countryEnName
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.deliveryPlaceId = null
|
||||||
|
formModel.deliveryPlace = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '收货地',
|
||||||
|
field: 'receiptPlaceCode',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
api: GetClientPortSelectList,
|
||||||
|
resultField: 'data',
|
||||||
|
immediate: false,
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
valueField: 'ediCode',
|
||||||
|
showName: 'ediCode',
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.receiptPlace = obj.portName + ',' + obj.countryEnName
|
||||||
|
formModel.receiptPlaceId = obj.id
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.receiptPlace = null
|
||||||
|
formModel.receiptPlaceId = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'loadPort',
|
||||||
|
component: 'Input',
|
||||||
|
required: false,
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
oninput: () => {
|
||||||
|
formModel.loadPort = formModel.loadPort.replace(/[\u4e00-\u9fa5]/ig, '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'loadPortId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'dischargePort',
|
||||||
|
component: 'Input',
|
||||||
|
required: false,
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
oninput: () => {
|
||||||
|
formModel.dischargePort = formModel.dischargePort.replace(/[\u4e00-\u9fa5]/ig, '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'dischargePortId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'deliveryPlace',
|
||||||
|
component: 'Input',
|
||||||
|
required: false,
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
oninput: () => {
|
||||||
|
formModel.deliveryPlace = formModel.deliveryPlace.replace(/[\u4e00-\u9fa5]/ig, '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'deliveryPlaceId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'receiptPlace',
|
||||||
|
component: 'Input',
|
||||||
|
required: false,
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
oninput: () => {
|
||||||
|
formModel.receiptPlace = formModel.receiptPlace.replace(/[\u4e00-\u9fa5]/ig, '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'receiptPlaceId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'bookingNo',
|
||||||
|
label: '订舱编号',
|
||||||
|
labelSlot: 'bookingNo',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
oninput: () => {
|
||||||
|
formModel.bookingNo = formModel.bookingNo.replace(/[\u4e00-\u9fa5]/ig, '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'etd',
|
||||||
|
label: '开船日期',
|
||||||
|
labelSlot: 'etd',
|
||||||
|
component: 'DatePicker',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: {
|
||||||
|
allowClear: true,
|
||||||
|
valueFormat: 'YYYY-MM-DD'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'closingDate',
|
||||||
|
label: '截港时间',
|
||||||
|
component: 'DatePicker',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: {
|
||||||
|
showTime: true,
|
||||||
|
allowClear: true,
|
||||||
|
valueFormat: 'YYYY-MM-DD HH',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'eta',
|
||||||
|
label: '预抵日期',
|
||||||
|
component: 'DatePicker',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: {
|
||||||
|
allowClear: true,
|
||||||
|
valueFormat: 'YYYY-MM-DD',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'openPortDate',
|
||||||
|
label: '截VGM时间',
|
||||||
|
component: 'DatePicker',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: {
|
||||||
|
allowClear: true,
|
||||||
|
showTime: true,
|
||||||
|
valueFormat: 'YYYY-MM-DD HH:mm'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'closeDocDate',
|
||||||
|
label: '截单时间',
|
||||||
|
component: 'DatePicker',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: {
|
||||||
|
showTime: true,
|
||||||
|
allowClear: true,
|
||||||
|
valueFormat: 'YYYY-MM-DD HH',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '签单地代码',
|
||||||
|
field: 'issuePlaceCode',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
api: GetClientPortSelectList,
|
||||||
|
resultField: 'data',
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
valueField: 'ediCode',
|
||||||
|
showName: 'ediCode',
|
||||||
|
immediate: false,
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.issuePlace = obj.portName
|
||||||
|
formModel.issuePlaceId = obj.id
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.issuePlace = null
|
||||||
|
formModel.issuePlaceId = null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '签单地点',
|
||||||
|
field: 'issuePlace',
|
||||||
|
component: 'Input',
|
||||||
|
required: false,
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
oninput: () => {
|
||||||
|
formModel.issuePlace = formModel.issuePlace.replace(/[\u4e00-\u9fa5]/ig, '')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'issuePlaceId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'serviceContractNo',
|
||||||
|
label: '服务合同号',
|
||||||
|
component: 'Input',
|
||||||
|
required: false,
|
||||||
|
dynamicDisabled: false,
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'forwarderId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '订舱口',
|
||||||
|
field: 'forwarder',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
api: GetSupplierListByCode,
|
||||||
|
params: { code: 'booking' },
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
valueField: 'shortName',
|
||||||
|
showName: 'description',
|
||||||
|
resultField: 'data',
|
||||||
|
immediate: false,
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.forwarderId = obj.id
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.forwarderId = ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'shipAgencyId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '船代',
|
||||||
|
field: 'shipAgency',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
labelSlot: 'shipAgencyId',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
api: GetSupplierListByCode,
|
||||||
|
params: { code: 'shipagency' },
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
showName: 'description',
|
||||||
|
valueField: 'shortName',
|
||||||
|
resultField: 'data',
|
||||||
|
immediate: false,
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.shipAgencyId = obj.id
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.shipAgencyId = ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'yardId',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'yard',
|
||||||
|
label: '场站',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
api: GetSupplierListByCode,
|
||||||
|
params: { code: 'yard' },
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
showName: 'description',
|
||||||
|
valueField: 'shortName',
|
||||||
|
resultField: 'data',
|
||||||
|
immediate: false,
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.yardId = obj.id
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.yardId = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'customerService',
|
||||||
|
label: '',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '客服',
|
||||||
|
field: 'customerServiceName',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
componentProps: ({ formModel }) => {
|
||||||
|
return {
|
||||||
|
api: GetCustomerServiceList,
|
||||||
|
labelField: 'pinYinCode',
|
||||||
|
valueField: 'userName',
|
||||||
|
showName: 'userName',
|
||||||
|
allowClear: true,
|
||||||
|
showSearch: true,
|
||||||
|
immediate: false,
|
||||||
|
resultField: 'data',
|
||||||
|
onChange: (e, obj) => {
|
||||||
|
if (e && obj) {
|
||||||
|
formModel.customerService = obj.id
|
||||||
|
}
|
||||||
|
if (!e && !obj) {
|
||||||
|
formModel.customerService = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
@ -0,0 +1,176 @@
|
|||||||
|
import { BasicColumn, FormSchema } from '/@/components/Table'
|
||||||
|
export const searchFormSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'serviceWorkflowName',
|
||||||
|
label: '服务流程名称',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 4 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'createdTime',
|
||||||
|
label: '创建时间',
|
||||||
|
component: 'RangePicker',
|
||||||
|
required: false,
|
||||||
|
dynamicDisabled: false,
|
||||||
|
colProps: { span: 4 },
|
||||||
|
componentProps: {
|
||||||
|
allowClear: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'isEnable',
|
||||||
|
label: '是否启用',
|
||||||
|
component: 'Select',
|
||||||
|
colProps: { span: 4 },
|
||||||
|
componentProps: {
|
||||||
|
options: [{ label: '是', value: '1' }, { label: '否', value: '0' }],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'createUser',
|
||||||
|
label: '创建人',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 4 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'serviceWorkflowNote',
|
||||||
|
label: '说明',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 4 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'updatedTime',
|
||||||
|
label: '更新时间',
|
||||||
|
component: 'RangePicker',
|
||||||
|
required: false,
|
||||||
|
dynamicDisabled: false,
|
||||||
|
colProps: { span: 4 },
|
||||||
|
componentProps: {
|
||||||
|
allowClear: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'updatedUserName',
|
||||||
|
label: '更新人',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 4 },
|
||||||
|
},
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
//列表
|
||||||
|
export const columns: BasicColumn[] = [{
|
||||||
|
title: '服务流程名称',
|
||||||
|
dataIndex: 'serviceWorkflowName',
|
||||||
|
width: '160px'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '服务流程代码',
|
||||||
|
dataIndex: 'serviceWorkflowCode',
|
||||||
|
width: '200px'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '状态数量',
|
||||||
|
dataIndex: 'statusNum',
|
||||||
|
width: 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '版本号',
|
||||||
|
dataIndex: 'releaseVersion',
|
||||||
|
width: 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '说明',
|
||||||
|
dataIndex: 'serviceWorkflowNote',
|
||||||
|
width: 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '是否启用',
|
||||||
|
dataIndex: 'isEnable',
|
||||||
|
width: 100,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '所属租户',
|
||||||
|
dataIndex: 'belongTenantName',
|
||||||
|
width: 200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '发布日期',
|
||||||
|
dataIndex: 'publishDate',
|
||||||
|
width: 160
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建日期',
|
||||||
|
dataIndex: 'createdTime',
|
||||||
|
width: 160
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建人',
|
||||||
|
dataIndex: 'createdUserName',
|
||||||
|
width: 150
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '更新日期',
|
||||||
|
dataIndex: 'updatedTime',
|
||||||
|
width: 160
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '更新人',
|
||||||
|
dataIndex: 'updatedUserName',
|
||||||
|
width: 150
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export const detailForm: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'pkId',
|
||||||
|
label: '',
|
||||||
|
component: 'Input',
|
||||||
|
show: false,
|
||||||
|
colProps: { span: 24 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'statusSKUName',
|
||||||
|
label: '状态名称',
|
||||||
|
required: true,
|
||||||
|
rules: [{ message: '请输入状态名称' }],
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 24 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'statusSKUCode',
|
||||||
|
label: '状态代码',
|
||||||
|
required: true,
|
||||||
|
rules: [{ message: '请输入状态代码' }],
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 24 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'backgroundColor',
|
||||||
|
label: '显示颜色',
|
||||||
|
required: true,
|
||||||
|
rules: [{ message: '请选择颜色' }],
|
||||||
|
defaultValue: '#000000',
|
||||||
|
component: 'Input',
|
||||||
|
slot: 'color',
|
||||||
|
colProps: { span: 24 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'sortNo',
|
||||||
|
label: '排序',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 24 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'statusSKUNote',
|
||||||
|
label: '状态说明',
|
||||||
|
required: true,
|
||||||
|
rules: [{ message: '请输入状态说明' }],
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 24 },
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
|
@ -0,0 +1,243 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<BasicTable class="ds-table" @register="registerTable" @row-dbClick="(e) => { GoDetailed(true, e) }
|
||||||
|
">
|
||||||
|
<template #tableTitle>
|
||||||
|
<div class="buttonGroup ">
|
||||||
|
<div class="ds-h-aciton-btns-fee">
|
||||||
|
<a-tooltip placement="top" :mouseEnterDelay="0.5">
|
||||||
|
<template #title>
|
||||||
|
<span>新建</span>
|
||||||
|
</template>
|
||||||
|
<span class="ds-action-svg-btn" @click="GoDetailed(false)">
|
||||||
|
<img src="../../../assets/svg/infoclient/xinjian.svg" class="SvgImg" />
|
||||||
|
</span>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip placement="top" :mouseEnterDelay="0.5">
|
||||||
|
<template #title>
|
||||||
|
<span>删除</span>
|
||||||
|
</template>
|
||||||
|
<span class="ds-action-svg-btn">
|
||||||
|
<a-popconfirm title="确定删除当前选中数据?" @confirm="FnDel" ok-text="是" cancel-text="否">
|
||||||
|
<img src="../../../assets/svg/infoclient/shanchu.svg" class="SvgImg" />
|
||||||
|
</a-popconfirm>
|
||||||
|
</span>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip placement="top" :mouseEnterDelay="0.5">
|
||||||
|
<template #title>
|
||||||
|
<span>启用</span>
|
||||||
|
</template>
|
||||||
|
<span class="ds-action-svg-btn" @click="handleApply">
|
||||||
|
<img src="../../../assets/svg/infoclient/tijiao.svg" class="SvgImg" />
|
||||||
|
</span>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip placement="top" :mouseEnterDelay="0.5">
|
||||||
|
<template #title>
|
||||||
|
<span>取消启用</span>
|
||||||
|
</template>
|
||||||
|
<span class="ds-action-svg-btn" @click="handleWithdraw">
|
||||||
|
<img src="../../../assets/svg/infoclient/chexiaotijiao.svg" class="SvgImg" />
|
||||||
|
</span>
|
||||||
|
</a-tooltip>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-slot:bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.key === 'action'">
|
||||||
|
<TableAction :actions="[
|
||||||
|
{
|
||||||
|
icon: 'clarity:note-edit-line',
|
||||||
|
tooltip: '编辑',
|
||||||
|
onClick: () => {
|
||||||
|
GoDetailed(true, record)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]" />
|
||||||
|
</template>
|
||||||
|
<template v-if="column.key === 'isEnable'">
|
||||||
|
<span v-if="record.isEnable == 1">是</span>
|
||||||
|
<span v-if="record.isEnable == 0">否</span>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
<editForm ref="editFormRef" ></editForm>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { GetList, Save, SaveAndEnable, SetUnEnable, SetEnable, Delete } from './api.js'
|
||||||
|
import { BasicTable, useTable, TableAction } from '/@/components/Table'
|
||||||
|
import { BasicForm, useForm } from '/@/components/Form/index'
|
||||||
|
import { columns, searchFormSchema, detailForm } from './columns'
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
|
import editForm from './detail.vue'
|
||||||
|
const { createMessage } = useMessage()
|
||||||
|
import { useGo } from '/@/hooks/web/usePage'
|
||||||
|
const go = useGo()
|
||||||
|
import { formatParams } from '/@/hooks/web/common'
|
||||||
|
const [registerTable, { reload, clearSelectedRowKeys, getSelectRows, getRawDataSource }] = useTable({
|
||||||
|
api: async (p) => {
|
||||||
|
const res: API.DataResult = await GetList(p)
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
resolve({ data: [...res.data], total: res.count })
|
||||||
|
})
|
||||||
|
},
|
||||||
|
beforeFetch: (p) => {
|
||||||
|
return formatParams(p)
|
||||||
|
},
|
||||||
|
columns,
|
||||||
|
formConfig: {
|
||||||
|
labelWidth: 120,
|
||||||
|
schemas: searchFormSchema,
|
||||||
|
useAdvancedSearch: true,
|
||||||
|
},
|
||||||
|
pagination: true,
|
||||||
|
striped: true,
|
||||||
|
useSearchForm: true,
|
||||||
|
resizeHeightOffset: 15,
|
||||||
|
showTableSetting: true,
|
||||||
|
bordered: true,
|
||||||
|
showIndexColumn: true,
|
||||||
|
indexColumnProps: {
|
||||||
|
width: 60,
|
||||||
|
},
|
||||||
|
canResize: true,
|
||||||
|
immediate: true,
|
||||||
|
actionColumn: {
|
||||||
|
width: 80,
|
||||||
|
title: '操作',
|
||||||
|
dataIndex: 'action',
|
||||||
|
fixed: 'right',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const editFormRef = ref()
|
||||||
|
const [registerForm, { resetFields, setFieldsValue, validate, getFieldsValue, }] = useForm({
|
||||||
|
labelWidth: 100,
|
||||||
|
schemas: detailForm,
|
||||||
|
showActionButtonGroup: false,
|
||||||
|
})
|
||||||
|
function GoDetailed(type, row) {
|
||||||
|
if (!type) {
|
||||||
|
editFormRef.value.init()
|
||||||
|
} else {
|
||||||
|
// open.value = true
|
||||||
|
// const newRow = JSON.parse(JSON.stringify(row))
|
||||||
|
// setTimeout(() => {
|
||||||
|
// setFieldsValue(newRow)
|
||||||
|
// }, 10)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const loading = ref(false)
|
||||||
|
|
||||||
|
function FnDel() {
|
||||||
|
let ids = []
|
||||||
|
ids = getSelectRows().map((item) => {
|
||||||
|
return item.pkId
|
||||||
|
})
|
||||||
|
if (ids.length == 0) {
|
||||||
|
createMessage.error('请选择数据')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
Delete(ids).then(res => {
|
||||||
|
if (res.succeeded) {
|
||||||
|
createMessage.success('操作成功')
|
||||||
|
clearSelectedRowKeys()
|
||||||
|
reload()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function handleWithdraw() {
|
||||||
|
let ids = []
|
||||||
|
ids = getSelectRows().map((item) => {
|
||||||
|
return item.pkId
|
||||||
|
})
|
||||||
|
if (ids.length == 0) {
|
||||||
|
createMessage.error('请选择数据')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
SetUnEnable(ids).then(res => {
|
||||||
|
if (res.succeeded) {
|
||||||
|
createMessage.success('操作成功')
|
||||||
|
clearSelectedRowKeys()
|
||||||
|
reload()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function handleApply() {
|
||||||
|
let ids = []
|
||||||
|
ids = getSelectRows().map((item) => {
|
||||||
|
return item.pkId
|
||||||
|
})
|
||||||
|
if (ids.length == 0) {
|
||||||
|
createMessage.error('请选择数据')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
SetEnable(ids).then(res => {
|
||||||
|
if (res.succeeded) {
|
||||||
|
createMessage.success('操作成功')
|
||||||
|
clearSelectedRowKeys()
|
||||||
|
reload()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.topTable {
|
||||||
|
height: calc(100vh - 145px);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.tableTitleBox {
|
||||||
|
.ant-btn-link {
|
||||||
|
border-radius: 2px;
|
||||||
|
background: rgba(245, 249, 252, 1);
|
||||||
|
margin-left: 13px;
|
||||||
|
color: #000;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.SvgImg {
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
margin: 6.8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttonGroup {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.ds-h-aciton-btns-fee {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: 38px;
|
||||||
|
padding-right: 10px;
|
||||||
|
border-right: 1px solid rgb(194, 188, 188);
|
||||||
|
|
||||||
|
.ds-action-svg-btn {
|
||||||
|
display: inline-block;
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
border-radius: 2px;
|
||||||
|
margin-right: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
.next {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ds-action-svg-btn:hover {
|
||||||
|
box-shadow: 0px 2px 4px #cad1db;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vben-svg-icon {
|
||||||
|
margin: 6.8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue