08/01
parent
054cde9508
commit
77b4dc46ae
@ -0,0 +1,121 @@
|
|||||||
|
<template>
|
||||||
|
<BasicModal
|
||||||
|
v-bind="$attrs"
|
||||||
|
:use-wrapper="true"
|
||||||
|
title="箱状态批量维护"
|
||||||
|
width="55%"
|
||||||
|
@register="registerModal"
|
||||||
|
@ok="handleSave"
|
||||||
|
>
|
||||||
|
<BasicForm @register="registerForm" />
|
||||||
|
<!--右下角按钮-->
|
||||||
|
<template #footer>
|
||||||
|
<a-button
|
||||||
|
pre-icon="ant-design:close-outlined"
|
||||||
|
type="warning"
|
||||||
|
:loading="loading"
|
||||||
|
ghost
|
||||||
|
style="margin-right: 0.8rem"
|
||||||
|
@click="closeModal"
|
||||||
|
>取消</a-button
|
||||||
|
>
|
||||||
|
<a-button
|
||||||
|
type="success"
|
||||||
|
:loading="loading"
|
||||||
|
pre-icon="ant-design:check-outlined"
|
||||||
|
style="margin-right: 0.8rem"
|
||||||
|
@click="handleSave(false)"
|
||||||
|
>仅保存</a-button
|
||||||
|
>
|
||||||
|
<a-button
|
||||||
|
pre-icon="ant-design:check-circle-outlined"
|
||||||
|
type="primary"
|
||||||
|
:loading="loading"
|
||||||
|
@click="handleSave(true)"
|
||||||
|
>保存并关闭</a-button
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</BasicModal>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, computed, unref } from 'vue'
|
||||||
|
import { BasicModal, useModalInner } from '/@/components/Modal'
|
||||||
|
import { BasicForm, useForm } from '/@/components/Form/index'
|
||||||
|
import { formSchema } from './columns'
|
||||||
|
import { ApiEdit, ApiInfo } from './api'
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
|
// 声明Emits
|
||||||
|
const emit = defineEmits(['success', 'register'])
|
||||||
|
const isUpdate = ref(true)
|
||||||
|
const loading = ref(false)
|
||||||
|
const rowId = ref('')
|
||||||
|
const { createMessage } = useMessage()
|
||||||
|
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
|
||||||
|
labelWidth: 100,
|
||||||
|
schemas: formSchema,
|
||||||
|
showActionButtonGroup: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
|
||||||
|
resetFields()
|
||||||
|
setModalProps({ confirmLoading: false, loading: true })
|
||||||
|
isUpdate.value = !!data?.isUpdate
|
||||||
|
if (unref(isUpdate)) {
|
||||||
|
// setModalProps({ confirmLoading: true });
|
||||||
|
rowId.value = data.record.id
|
||||||
|
const res: API.DataResult = await ApiInfo({ id: unref(rowId) })
|
||||||
|
if (res.succeeded) {
|
||||||
|
setFieldsValue({
|
||||||
|
...res.data,
|
||||||
|
})
|
||||||
|
// console.log('返回数据Form', getFieldsValue());
|
||||||
|
// setFieldsValue({ trainId: unref(res.data.trainId) });
|
||||||
|
}
|
||||||
|
// setModalProps({ confirmLoading: false });
|
||||||
|
} else {
|
||||||
|
setFieldsValue({ permissionIdentity: unref(2) })
|
||||||
|
}
|
||||||
|
setModalProps({ loading: false })
|
||||||
|
})
|
||||||
|
|
||||||
|
async function handleSave(exit) {
|
||||||
|
try {
|
||||||
|
const values = await validate()
|
||||||
|
setModalProps({ confirmLoading: true, loading: true })
|
||||||
|
// TODO custom api
|
||||||
|
console.log(values)
|
||||||
|
// loading.value = true;
|
||||||
|
const res: API.DataResult = await ApiEdit(values)
|
||||||
|
console.log(res)
|
||||||
|
if (res.succeeded) {
|
||||||
|
createMessage.success(res.message)
|
||||||
|
emit('success')
|
||||||
|
//刷新页面
|
||||||
|
if (!exit) {
|
||||||
|
if (unref(isUpdate)) {
|
||||||
|
await refresh()
|
||||||
|
} else {
|
||||||
|
rowId.value = res.data
|
||||||
|
isUpdate.value = true
|
||||||
|
await refresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
createMessage.error(res.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
exit && closeModal()
|
||||||
|
} finally {
|
||||||
|
// loading.value = false;
|
||||||
|
setModalProps({ confirmLoading: false, loading: false })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async function refresh() {
|
||||||
|
const res: API.DataResult = await ApiInfo({ id: unref(rowId) })
|
||||||
|
if (res.succeeded) {
|
||||||
|
await setFieldsValue({
|
||||||
|
...res.data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -0,0 +1,42 @@
|
|||||||
|
// @ts-ignore
|
||||||
|
import { request } from '/@/utils/request'
|
||||||
|
import { DataResult, PageRequest } from '/@/api/model/baseModel'
|
||||||
|
enum Api {
|
||||||
|
list = '/containerManagementApi/CM_BaseInfo/GetCM_BaseInfoList',
|
||||||
|
edit = '/containerManagementApi/CM_BaseInfo/EditCM_BaseInfo',
|
||||||
|
info = '/containerManagementApi/CM_BaseInfo/GetCM_BaseInfo',
|
||||||
|
|
||||||
|
del = '/mainApi/CodeCtn/BatchDelCodeCtn',
|
||||||
|
}
|
||||||
|
// 列表 (Auth)
|
||||||
|
export function ApiList(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.list,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 编辑 (Auth)
|
||||||
|
export function ApiEdit(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.edit,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 详情 (Auth)
|
||||||
|
export function ApiInfo(query) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.info,
|
||||||
|
method: 'get',
|
||||||
|
params: query,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 批量删除 (Auth)
|
||||||
|
export function ApiDel(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.del,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
@ -0,0 +1,329 @@
|
|||||||
|
import { BasicColumn, FormSchema } from '/@/components/Table'
|
||||||
|
import { Tag } from 'ant-design-vue'
|
||||||
|
import { GetCtnSelectList } from '/@/api/common'
|
||||||
|
export const columns: BasicColumn[] = [
|
||||||
|
{
|
||||||
|
title: '集装箱号',
|
||||||
|
dataIndex: 'cntrno',
|
||||||
|
sorter: true,
|
||||||
|
width: 150,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱型',
|
||||||
|
dataIndex: 'ctnall',
|
||||||
|
sorter: true,
|
||||||
|
width: 150,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '集装箱类型',
|
||||||
|
dataIndex: 'ctnType',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '新旧箱',
|
||||||
|
dataIndex: 'usedState',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱主',
|
||||||
|
dataIndex: 'ctnOwner',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '业务所属分部',
|
||||||
|
dataIndex: 'corpid',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱来源',
|
||||||
|
dataIndex: 'ctnSource',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱业务状态',
|
||||||
|
dataIndex: 'ctnBizState',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱业务编号',
|
||||||
|
dataIndex: 'billno',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '关联放箱单号',
|
||||||
|
dataIndex: 'ctnReleaseNo',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱状态',
|
||||||
|
dataIndex: 'ctnState',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱损坏',
|
||||||
|
dataIndex: 'ctnBreakState',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '是否上线',
|
||||||
|
dataIndex: 'isOnline',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '空重箱',
|
||||||
|
dataIndex: 'isHeavy',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '当前港口',
|
||||||
|
dataIndex: 'portid',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '码头或场站',
|
||||||
|
dataIndex: 'depot',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '运输工具',
|
||||||
|
dataIndex: 'vehicleName',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '当前业务编号',
|
||||||
|
dataIndex: 'mblno',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '业务委托单位',
|
||||||
|
dataIndex: 'customerName',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'ETD',
|
||||||
|
dataIndex: 'etd',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'ETA',
|
||||||
|
dataIndex: 'eta',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '状态时间',
|
||||||
|
dataIndex: 'stateTime',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱皮重',
|
||||||
|
dataIndex: 'ctnWeight',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱初期成本',
|
||||||
|
dataIndex: 'ctnValue_Base',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export const searchFormSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'CtnName',
|
||||||
|
label: '表现形式',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
]
|
||||||
|
export const formSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'id',
|
||||||
|
component: 'Input',
|
||||||
|
defaultValue: '',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'cntrno',
|
||||||
|
label: '集装箱号',
|
||||||
|
component: 'InputTextArea',
|
||||||
|
required: true,
|
||||||
|
colProps: { span: 24 },
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请输入,多个箱号请以“,”逗号间隔',
|
||||||
|
rows: 3,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnall',
|
||||||
|
label: '箱型',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
required: true,
|
||||||
|
componentProps: () => {
|
||||||
|
return {
|
||||||
|
api: GetCtnSelectList,
|
||||||
|
labelField: 'ctnName',
|
||||||
|
valueField: 'ediCode',
|
||||||
|
resultField: 'data',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'usedState',
|
||||||
|
label: '新旧箱',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnOwner',
|
||||||
|
label: '箱主',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'corpid',
|
||||||
|
label: '业务所属分部',
|
||||||
|
component: 'Input',
|
||||||
|
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
field: 'ctnSource',
|
||||||
|
label: '箱来源',
|
||||||
|
component: 'Input',
|
||||||
|
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnBizState',
|
||||||
|
label: '箱业务状态',
|
||||||
|
component: 'InputNumber',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'billno',
|
||||||
|
label: '箱业务编号',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnReleaseNo',
|
||||||
|
label: '关联放箱单号',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnState',
|
||||||
|
label: '箱状态',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnBreakState',
|
||||||
|
label: '箱损坏',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'isOnline',
|
||||||
|
label: '是否上线',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'isHeavy',
|
||||||
|
label: '空重箱',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'portid',
|
||||||
|
label: '当前港口',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'depot',
|
||||||
|
label: '码头或场站',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'vehicleName',
|
||||||
|
label: '运输工具',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'mblno',
|
||||||
|
label: '当前业务编号',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'customerName',
|
||||||
|
label: '业务委托单位',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'etd',
|
||||||
|
label: 'ETD',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'eta',
|
||||||
|
label: 'ETA',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'stateTime',
|
||||||
|
label: '状态时间',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnWeight',
|
||||||
|
label: '箱皮重',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'productionDate',
|
||||||
|
label: '生产日期',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnValue_Base',
|
||||||
|
label: '箱初期成本',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
]
|
@ -0,0 +1,118 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<BasicTable @register="registerTable">
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.key === 'action'">
|
||||||
|
<TableAction
|
||||||
|
:actions="[
|
||||||
|
{
|
||||||
|
icon: 'ant-design:profile-outlined',
|
||||||
|
tooltip: '详情',
|
||||||
|
onClick: handleAudit.bind(null, record),
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
<TenantAuditStepModal @register="registerModal" @success="handleSuccess" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { defineExpose, defineComponent, onMounted, ref } from 'vue'
|
||||||
|
import { BasicTable, useTable, TableAction, SorterResult } from '/@/components/Table'
|
||||||
|
import { ApiBasicsList, ApiExistList } from './api'
|
||||||
|
import { useModal } from '/@/components/Modal'
|
||||||
|
import TenantAuditStepModal from './TenantAuditStepModal.vue'
|
||||||
|
import { columns, searchFormSchema } from './columns'
|
||||||
|
const [registerModal, { openModal }] = useModal()
|
||||||
|
const [registerTable, { reload, getForm, getPaginationRef, getSelectRows }] = useTable({
|
||||||
|
// title: '流程设计模板',
|
||||||
|
maxHeight: 300,
|
||||||
|
rowSelection: { type: 'checkbox' },
|
||||||
|
// rowSelection: { type: 'radio' },
|
||||||
|
api: async (p) => {
|
||||||
|
const res: API.DataResult = await ApiBasicsList(p)
|
||||||
|
const res2: API.DataResult = await ApiExistList()
|
||||||
|
let data = []
|
||||||
|
res.data.forEach((item) => {
|
||||||
|
let type = true
|
||||||
|
res2.data.forEach((item2) => {
|
||||||
|
if (item.id == item2) {
|
||||||
|
type = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (type) {
|
||||||
|
data.push(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log(data)
|
||||||
|
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
resolve({ data: [...data] })
|
||||||
|
})
|
||||||
|
},
|
||||||
|
beforeFetch: () => {
|
||||||
|
var currentPageInfo: any = getPaginationRef()
|
||||||
|
var data = getForm().getFieldsValue()
|
||||||
|
const postParam: API.PageRequest = {
|
||||||
|
queryCondition: '',
|
||||||
|
pageCondition: {
|
||||||
|
pageIndex: currentPageInfo.current,
|
||||||
|
pageSize: currentPageInfo.pageSize,
|
||||||
|
sortConditions: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
let condition: API.ConditionItem[] = []
|
||||||
|
if (!!data.CtnName) {
|
||||||
|
condition.push({
|
||||||
|
FieldName: 'CtnName',
|
||||||
|
FieldValue: data.CtnName,
|
||||||
|
ConditionalType: 1,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
postParam.queryCondition = JSON.stringify(condition)
|
||||||
|
return postParam
|
||||||
|
},
|
||||||
|
columns,
|
||||||
|
formConfig: {
|
||||||
|
labelWidth: 120,
|
||||||
|
schemas: searchFormSchema,
|
||||||
|
},
|
||||||
|
pagination: true,
|
||||||
|
bordered: true,
|
||||||
|
useSearchForm: true,
|
||||||
|
showTableSetting: true,
|
||||||
|
tableSetting: {
|
||||||
|
redo: false,
|
||||||
|
size: false,
|
||||||
|
setting: false,
|
||||||
|
fullScreen: false,
|
||||||
|
},
|
||||||
|
// actionColumn: {
|
||||||
|
// width: 80,
|
||||||
|
// title: '操作',
|
||||||
|
// dataIndex: 'action',
|
||||||
|
// fixed: undefined,
|
||||||
|
// },
|
||||||
|
})
|
||||||
|
|
||||||
|
function handleCreate() {
|
||||||
|
openModal(true, {
|
||||||
|
record: {},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function handleAudit(record: Recordable) {
|
||||||
|
openModal(true, {
|
||||||
|
record,
|
||||||
|
isUpdate: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function handleSuccess() {
|
||||||
|
reload()
|
||||||
|
}
|
||||||
|
function getSelectData() {
|
||||||
|
return getSelectRows()
|
||||||
|
}
|
||||||
|
defineExpose({ getSelectData })
|
||||||
|
</script>
|
@ -0,0 +1,155 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<BasicTable class="ds-table" @register="registerTable" @row-dbClick="handleAudit">
|
||||||
|
<template #tableTitle>
|
||||||
|
<a-button type="link" @click="handleCreate" :disabled="checkPermissions('op:ctn:add')">
|
||||||
|
<span class="iconfont icon-piliangbianji"></span>
|
||||||
|
批量维护
|
||||||
|
</a-button>
|
||||||
|
</template>
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.key === 'action'">
|
||||||
|
<TableAction
|
||||||
|
:actions="[
|
||||||
|
{
|
||||||
|
icon: 'ant-design:file-search-outlined',
|
||||||
|
tooltip: '编辑',
|
||||||
|
onClick: handleAudit.bind(null, record),
|
||||||
|
disabled: checkPermissions('op:ctn:edit'),
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
<TenantAuditStepModal @register="registerModal" @success="handleSuccess" />
|
||||||
|
<a-modal
|
||||||
|
:visible="visible"
|
||||||
|
title="导入集装箱信息"
|
||||||
|
width="70%"
|
||||||
|
@ok="handleOk"
|
||||||
|
@cancel="handleCancel"
|
||||||
|
>
|
||||||
|
<ImportFlow v-if="visible" ref="refImportFlow" />
|
||||||
|
</a-modal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { checkPermissions } from '/@/hooks/Permissions/index'
|
||||||
|
import { BasicTable, useTable, TableAction, SorterResult } from '/@/components/Table'
|
||||||
|
import ImportFlow from './importFlow.vue'
|
||||||
|
import { ApiList, ApiImport, ApiDel } from './api'
|
||||||
|
import { useModal } from '/@/components/Modal'
|
||||||
|
import TenantAuditStepModal from './TenantAuditStepModal.vue'
|
||||||
|
import { columns, searchFormSchema } from './columns'
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
|
const { notification } = useMessage()
|
||||||
|
const visible = ref<boolean>(false)
|
||||||
|
const refImportFlow = ref()
|
||||||
|
const [registerModal, { openModal }] = useModal()
|
||||||
|
const [registerTable, { reload, getForm, getSelectRows }] = useTable({
|
||||||
|
title: '集装箱信息列表',
|
||||||
|
api: async (p) => {
|
||||||
|
const res: API.DataResult = await ApiList(p)
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
resolve({ data: [...res.data], total: res.count })
|
||||||
|
})
|
||||||
|
},
|
||||||
|
beforeFetch: (p) => {
|
||||||
|
var data = getForm().getFieldsValue()
|
||||||
|
const postParam: API.PageRequest = {
|
||||||
|
queryCondition: '',
|
||||||
|
pageCondition: {
|
||||||
|
pageIndex: p.page,
|
||||||
|
pageSize: p.pageSize,
|
||||||
|
sortConditions: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if (p.field) {
|
||||||
|
postParam.pageCondition.sortConditions = [
|
||||||
|
{
|
||||||
|
sortField: p.field,
|
||||||
|
listSortDirection: p.order == 'ascend' ? 0 : 1,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
} else {
|
||||||
|
postParam.pageCondition.sortConditions = []
|
||||||
|
}
|
||||||
|
let condition: API.ConditionItem[] = []
|
||||||
|
if (!!data.CtnName) {
|
||||||
|
condition.push({
|
||||||
|
FieldName: 'CtnName',
|
||||||
|
FieldValue: data.CtnName,
|
||||||
|
ConditionalType: 1,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
postParam.queryCondition = JSON.stringify(condition)
|
||||||
|
return postParam
|
||||||
|
},
|
||||||
|
columns,
|
||||||
|
formConfig: {
|
||||||
|
labelWidth: 120,
|
||||||
|
schemas: searchFormSchema,
|
||||||
|
},
|
||||||
|
isTreeTable: false,
|
||||||
|
pagination: true,
|
||||||
|
striped: true,
|
||||||
|
useSearchForm: true,
|
||||||
|
showTableSetting: true,
|
||||||
|
bordered: true,
|
||||||
|
showIndexColumn: true,
|
||||||
|
indexColumnProps: {
|
||||||
|
width: 60,
|
||||||
|
},
|
||||||
|
canResize: true,
|
||||||
|
resizeHeightOffset: 35,
|
||||||
|
immediate: true,
|
||||||
|
actionColumn: {
|
||||||
|
width: 80,
|
||||||
|
title: '操作',
|
||||||
|
dataIndex: 'action',
|
||||||
|
fixed: 'right',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
function handleCreate() {
|
||||||
|
openModal(true, {
|
||||||
|
isParent: false,
|
||||||
|
isUpdate: false,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function importFlow() {
|
||||||
|
visible.value = true
|
||||||
|
}
|
||||||
|
const handleOk = async () => {
|
||||||
|
let ids = []
|
||||||
|
refImportFlow.value.getSelectData().forEach((e) => {
|
||||||
|
ids.push(e.id)
|
||||||
|
})
|
||||||
|
const res: API.DataResult = await ApiImport({
|
||||||
|
ids,
|
||||||
|
id: '',
|
||||||
|
})
|
||||||
|
if (res.succeeded) {
|
||||||
|
notification.success({ message: res.message, duration: 3 })
|
||||||
|
} else {
|
||||||
|
notification.error({ message: res.message, duration: 3 })
|
||||||
|
}
|
||||||
|
reload()
|
||||||
|
visible.value = false
|
||||||
|
}
|
||||||
|
const handleCancel = () => {
|
||||||
|
visible.value = false
|
||||||
|
}
|
||||||
|
function handleAudit(record: Recordable) {
|
||||||
|
if (!checkPermissions('op:ctn:edit')) {
|
||||||
|
openModal(true, {
|
||||||
|
record,
|
||||||
|
isUpdate: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function handleSuccess() {
|
||||||
|
reload()
|
||||||
|
}
|
||||||
|
</script>
|
@ -0,0 +1,122 @@
|
|||||||
|
<template>
|
||||||
|
<BasicModal
|
||||||
|
v-bind="$attrs"
|
||||||
|
:use-wrapper="true"
|
||||||
|
title="箱状态批量维护"
|
||||||
|
width="55%"
|
||||||
|
@register="registerModal"
|
||||||
|
@ok="handleSave"
|
||||||
|
>
|
||||||
|
<BasicForm @register="registerForm" />
|
||||||
|
<!--右下角按钮-->
|
||||||
|
<template #footer>
|
||||||
|
<a-button
|
||||||
|
pre-icon="ant-design:close-outlined"
|
||||||
|
type="warning"
|
||||||
|
:loading="loading"
|
||||||
|
ghost
|
||||||
|
style="margin-right: 0.8rem"
|
||||||
|
@click="closeModal"
|
||||||
|
>取消</a-button
|
||||||
|
>
|
||||||
|
<a-button
|
||||||
|
type="success"
|
||||||
|
:loading="loading"
|
||||||
|
pre-icon="ant-design:check-outlined"
|
||||||
|
style="margin-right: 0.8rem"
|
||||||
|
@click="handleSave(false)"
|
||||||
|
>仅保存</a-button
|
||||||
|
>
|
||||||
|
<a-button
|
||||||
|
pre-icon="ant-design:check-circle-outlined"
|
||||||
|
type="primary"
|
||||||
|
:loading="loading"
|
||||||
|
@click="handleSave(true)"
|
||||||
|
>保存并关闭</a-button
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</BasicModal>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref, computed, unref } from 'vue'
|
||||||
|
import { BasicModal, useModalInner } from '/@/components/Modal'
|
||||||
|
import { BasicForm, useForm } from '/@/components/Form/index'
|
||||||
|
import { formSchema } from './columns'
|
||||||
|
import { ApiEdit, ApiInfo } from './api'
|
||||||
|
import { ApiChangeList, ApiMultiEdit } from '../StateChange/api'
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
|
// 声明Emits
|
||||||
|
const emit = defineEmits(['success', 'register'])
|
||||||
|
const isUpdate = ref(true)
|
||||||
|
const loading = ref(false)
|
||||||
|
const rowId = ref('')
|
||||||
|
const { createMessage } = useMessage()
|
||||||
|
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
|
||||||
|
labelWidth: 100,
|
||||||
|
schemas: formSchema,
|
||||||
|
showActionButtonGroup: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
|
||||||
|
resetFields()
|
||||||
|
setModalProps({ confirmLoading: false, loading: true })
|
||||||
|
isUpdate.value = !!data?.isUpdate
|
||||||
|
if (unref(isUpdate)) {
|
||||||
|
// setModalProps({ confirmLoading: true });
|
||||||
|
rowId.value = data.record.id
|
||||||
|
const res: API.DataResult = await ApiInfo({ id: unref(rowId) })
|
||||||
|
if (res.succeeded) {
|
||||||
|
setFieldsValue({
|
||||||
|
...res.data,
|
||||||
|
})
|
||||||
|
// console.log('返回数据Form', getFieldsValue());
|
||||||
|
// setFieldsValue({ trainId: unref(res.data.trainId) });
|
||||||
|
}
|
||||||
|
// setModalProps({ confirmLoading: false });
|
||||||
|
} else {
|
||||||
|
setFieldsValue({ permissionIdentity: unref(2) })
|
||||||
|
}
|
||||||
|
setModalProps({ loading: false })
|
||||||
|
})
|
||||||
|
|
||||||
|
async function handleSave(exit) {
|
||||||
|
try {
|
||||||
|
const values = await validate()
|
||||||
|
setModalProps({ confirmLoading: true, loading: true })
|
||||||
|
// TODO custom api
|
||||||
|
console.log(values)
|
||||||
|
// loading.value = true;
|
||||||
|
const res: API.DataResult = await ApiMultiEdit(values)
|
||||||
|
console.log(res)
|
||||||
|
if (res.succeeded) {
|
||||||
|
createMessage.success(res.message)
|
||||||
|
emit('success')
|
||||||
|
//刷新页面
|
||||||
|
if (!exit) {
|
||||||
|
if (unref(isUpdate)) {
|
||||||
|
await refresh()
|
||||||
|
} else {
|
||||||
|
rowId.value = res.data
|
||||||
|
isUpdate.value = true
|
||||||
|
await refresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
createMessage.error(res.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
exit && closeModal()
|
||||||
|
} finally {
|
||||||
|
// loading.value = false;
|
||||||
|
setModalProps({ confirmLoading: false, loading: false })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async function refresh() {
|
||||||
|
const res: API.DataResult = await ApiInfo({ id: unref(rowId) })
|
||||||
|
if (res.succeeded) {
|
||||||
|
await setFieldsValue({
|
||||||
|
...res.data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -0,0 +1,70 @@
|
|||||||
|
// @ts-ignore
|
||||||
|
import { request } from '/@/utils/request'
|
||||||
|
import { DataResult, PageRequest } from '/@/api/model/baseModel'
|
||||||
|
enum Api {
|
||||||
|
list = '/containerManagementApi/CM_CurrentState/GetCM_CurrentStateList',
|
||||||
|
edit = '/containerManagementApi/CM_CurrentState/EditCM_CurrentState',
|
||||||
|
info = '/containerManagementApi/CM_CurrentState/GetCM_CurrentStateInfo',
|
||||||
|
|
||||||
|
|
||||||
|
del = '/mainApi/CodeCtn/BatchDelCodeCtn',
|
||||||
|
|
||||||
|
BasicsList = '/mainApi/CodeCtn/GetBasicsCodeCtnList',
|
||||||
|
ExistList = '/mainApi/CodeCtn/GetExistCodeCtnList',
|
||||||
|
Import = '/mainApi/CodeCtn/ImportCodeCtn',
|
||||||
|
}
|
||||||
|
// 列表 (Auth)
|
||||||
|
export function ApiList(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.list,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 编辑 (Auth)
|
||||||
|
export function ApiEdit(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.edit,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 详情 (Auth)
|
||||||
|
export function ApiInfo(query) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.info,
|
||||||
|
method: 'get',
|
||||||
|
params: query,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 批量删除 (Auth)
|
||||||
|
export function ApiDel(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.del,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取商品类型列表-基础库 (Auth)
|
||||||
|
export function ApiBasicsList(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.BasicsList,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取当前租户已有的商品类型 (Auth)
|
||||||
|
export function ApiExistList() {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.ExistList,
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 导入商品类型列表-基础库 (Auth)
|
||||||
|
export function ApiImport(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.Import,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
@ -0,0 +1,330 @@
|
|||||||
|
import { BasicColumn, FormSchema } from '/@/components/Table'
|
||||||
|
import { Tag } from 'ant-design-vue'
|
||||||
|
import { GetCtnSelectList } from '/@/api/common'
|
||||||
|
export const columns: BasicColumn[] = [
|
||||||
|
{
|
||||||
|
title: '集装箱号',
|
||||||
|
dataIndex: 'cntrno',
|
||||||
|
sorter: true,
|
||||||
|
width: 150,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱型',
|
||||||
|
dataIndex: 'ctnall',
|
||||||
|
sorter: true,
|
||||||
|
width: 150,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '集装箱类型',
|
||||||
|
dataIndex: 'ctnType',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '新旧箱',
|
||||||
|
dataIndex: 'usedState',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱主',
|
||||||
|
dataIndex: 'ctnOwner',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '业务所属分部',
|
||||||
|
dataIndex: 'corpid',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱来源',
|
||||||
|
dataIndex: 'ctnSource',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱业务状态',
|
||||||
|
dataIndex: 'ctnBizState',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱业务编号',
|
||||||
|
dataIndex: 'billno',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '关联放箱单号',
|
||||||
|
dataIndex: 'ctnReleaseNo',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱状态',
|
||||||
|
dataIndex: 'ctnState',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱损坏',
|
||||||
|
dataIndex: 'ctnBreakState',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '是否上线',
|
||||||
|
dataIndex: 'isOnline',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '空重箱',
|
||||||
|
dataIndex: 'isHeavy',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '当前港口',
|
||||||
|
dataIndex: 'portid',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '码头或场站',
|
||||||
|
dataIndex: 'depot',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '运输工具',
|
||||||
|
dataIndex: 'vehicleName',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '当前业务编号',
|
||||||
|
dataIndex: 'mblno',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '业务委托单位',
|
||||||
|
dataIndex: 'customerName',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'ETD',
|
||||||
|
dataIndex: 'etd',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'ETA',
|
||||||
|
dataIndex: 'eta',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '状态时间',
|
||||||
|
dataIndex: 'stateTime',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱皮重',
|
||||||
|
dataIndex: 'ctnWeight',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '箱初期成本',
|
||||||
|
dataIndex: 'ctnValue_Base',
|
||||||
|
sorter: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
export const searchFormSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
field: 'CtnName',
|
||||||
|
label: '表现形式',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
]
|
||||||
|
export const formSchema: FormSchema[] = [
|
||||||
|
{
|
||||||
|
label: '',
|
||||||
|
field: 'id',
|
||||||
|
component: 'Input',
|
||||||
|
defaultValue: '',
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'cntrno',
|
||||||
|
label: '集装箱号',
|
||||||
|
component: 'InputTextArea',
|
||||||
|
required: true,
|
||||||
|
colProps: { span: 24 },
|
||||||
|
componentProps: {
|
||||||
|
placeholder: '请输入,多个箱号请以“,”逗号间隔',
|
||||||
|
rows: 3,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnall',
|
||||||
|
label: '箱型',
|
||||||
|
component: 'ApiSelect',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
required: true,
|
||||||
|
componentProps: () => {
|
||||||
|
return {
|
||||||
|
api: GetCtnSelectList,
|
||||||
|
labelField: 'ctnName',
|
||||||
|
valueField: 'ediCode',
|
||||||
|
resultField: 'data',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'isOnline',
|
||||||
|
label: '是否上线',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'changeSource',
|
||||||
|
label: '变动来源',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'usedState',
|
||||||
|
label: '新旧箱',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnOwner',
|
||||||
|
label: '箱主',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'corpid',
|
||||||
|
label: '业务所属分部',
|
||||||
|
component: 'Input',
|
||||||
|
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
field: 'ctnSource',
|
||||||
|
label: '箱来源',
|
||||||
|
component: 'Input',
|
||||||
|
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnBizState',
|
||||||
|
label: '箱业务状态',
|
||||||
|
component: 'InputNumber',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'billno',
|
||||||
|
label: '箱业务编号',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnReleaseNo',
|
||||||
|
label: '关联放箱单号',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnState',
|
||||||
|
label: '箱状态',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnBreakState',
|
||||||
|
label: '箱损坏',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
field: 'isHeavy',
|
||||||
|
label: '空重箱',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'portid',
|
||||||
|
label: '当前港口',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'depot',
|
||||||
|
label: '码头或场站',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'vehicleName',
|
||||||
|
label: '运输工具',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'mblno',
|
||||||
|
label: '当前业务编号',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'customerName',
|
||||||
|
label: '业务委托单位',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'etd',
|
||||||
|
label: 'ETD',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'eta',
|
||||||
|
label: 'ETA',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'changeTime',
|
||||||
|
label: '状态时间',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnWeight',
|
||||||
|
label: '箱皮重',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
field: 'ctnValue_Base',
|
||||||
|
label: '箱初期成本',
|
||||||
|
component: 'Input',
|
||||||
|
colProps: { span: 6 },
|
||||||
|
},
|
||||||
|
]
|
@ -0,0 +1,118 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<BasicTable @register="registerTable">
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.key === 'action'">
|
||||||
|
<TableAction
|
||||||
|
:actions="[
|
||||||
|
{
|
||||||
|
icon: 'ant-design:profile-outlined',
|
||||||
|
tooltip: '详情',
|
||||||
|
onClick: handleAudit.bind(null, record),
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
<TenantAuditStepModal @register="registerModal" @success="handleSuccess" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { defineExpose, defineComponent, onMounted, ref } from 'vue'
|
||||||
|
import { BasicTable, useTable, TableAction, SorterResult } from '/@/components/Table'
|
||||||
|
import { ApiBasicsList, ApiExistList } from './api'
|
||||||
|
import { useModal } from '/@/components/Modal'
|
||||||
|
import TenantAuditStepModal from './TenantAuditStepModal.vue'
|
||||||
|
import { columns, searchFormSchema } from './columns'
|
||||||
|
const [registerModal, { openModal }] = useModal()
|
||||||
|
const [registerTable, { reload, getForm, getPaginationRef, getSelectRows }] = useTable({
|
||||||
|
// title: '流程设计模板',
|
||||||
|
maxHeight: 300,
|
||||||
|
rowSelection: { type: 'checkbox' },
|
||||||
|
// rowSelection: { type: 'radio' },
|
||||||
|
api: async (p) => {
|
||||||
|
const res: API.DataResult = await ApiBasicsList(p)
|
||||||
|
const res2: API.DataResult = await ApiExistList()
|
||||||
|
let data = []
|
||||||
|
res.data.forEach((item) => {
|
||||||
|
let type = true
|
||||||
|
res2.data.forEach((item2) => {
|
||||||
|
if (item.id == item2) {
|
||||||
|
type = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (type) {
|
||||||
|
data.push(item)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log(data)
|
||||||
|
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
resolve({ data: [...data] })
|
||||||
|
})
|
||||||
|
},
|
||||||
|
beforeFetch: () => {
|
||||||
|
var currentPageInfo: any = getPaginationRef()
|
||||||
|
var data = getForm().getFieldsValue()
|
||||||
|
const postParam: API.PageRequest = {
|
||||||
|
queryCondition: '',
|
||||||
|
pageCondition: {
|
||||||
|
pageIndex: currentPageInfo.current,
|
||||||
|
pageSize: currentPageInfo.pageSize,
|
||||||
|
sortConditions: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
let condition: API.ConditionItem[] = []
|
||||||
|
if (!!data.CtnName) {
|
||||||
|
condition.push({
|
||||||
|
FieldName: 'CtnName',
|
||||||
|
FieldValue: data.CtnName,
|
||||||
|
ConditionalType: 1,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
postParam.queryCondition = JSON.stringify(condition)
|
||||||
|
return postParam
|
||||||
|
},
|
||||||
|
columns,
|
||||||
|
formConfig: {
|
||||||
|
labelWidth: 120,
|
||||||
|
schemas: searchFormSchema,
|
||||||
|
},
|
||||||
|
pagination: true,
|
||||||
|
bordered: true,
|
||||||
|
useSearchForm: true,
|
||||||
|
showTableSetting: true,
|
||||||
|
tableSetting: {
|
||||||
|
redo: false,
|
||||||
|
size: false,
|
||||||
|
setting: false,
|
||||||
|
fullScreen: false,
|
||||||
|
},
|
||||||
|
// actionColumn: {
|
||||||
|
// width: 80,
|
||||||
|
// title: '操作',
|
||||||
|
// dataIndex: 'action',
|
||||||
|
// fixed: undefined,
|
||||||
|
// },
|
||||||
|
})
|
||||||
|
|
||||||
|
function handleCreate() {
|
||||||
|
openModal(true, {
|
||||||
|
record: {},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function handleAudit(record: Recordable) {
|
||||||
|
openModal(true, {
|
||||||
|
record,
|
||||||
|
isUpdate: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function handleSuccess() {
|
||||||
|
reload()
|
||||||
|
}
|
||||||
|
function getSelectData() {
|
||||||
|
return getSelectRows()
|
||||||
|
}
|
||||||
|
defineExpose({ getSelectData })
|
||||||
|
</script>
|
@ -0,0 +1,161 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<BasicTable class="ds-table" @register="registerTable" @row-dbClick="handleAudit">
|
||||||
|
<template #tableTitle>
|
||||||
|
<!-- :disabled="checkPermissions('op:ctn:add')" -->
|
||||||
|
<a-button type="link" @click="handleCreate">
|
||||||
|
<span class="iconfont icon-piliangbianji"></span>
|
||||||
|
批量维护
|
||||||
|
</a-button>
|
||||||
|
</template>
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.key === 'action'">
|
||||||
|
<!-- disabled: checkPermissions('op:ctn:edit'), -->
|
||||||
|
<TableAction
|
||||||
|
:actions="[
|
||||||
|
{
|
||||||
|
icon: 'ant-design:file-search-outlined',
|
||||||
|
tooltip: '明细',
|
||||||
|
onClick: handleAudit.bind(null, record),
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</BasicTable>
|
||||||
|
<TenantAuditStepModal @register="registerModal" @success="handleSuccess" />
|
||||||
|
<a-modal
|
||||||
|
:visible="visible"
|
||||||
|
title="导入集装箱信息"
|
||||||
|
width="70%"
|
||||||
|
@ok="handleOk"
|
||||||
|
@cancel="handleCancel"
|
||||||
|
>
|
||||||
|
<ImportFlow v-if="visible" ref="refImportFlow" />
|
||||||
|
</a-modal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { checkPermissions } from '/@/hooks/Permissions/index'
|
||||||
|
import { BasicTable, useTable, TableAction, SorterResult } from '/@/components/Table'
|
||||||
|
import ImportFlow from './importFlow.vue'
|
||||||
|
import { ApiList, ApiImport, ApiDel } from './api'
|
||||||
|
import { ApiChangeList } from '../StateChange/api'
|
||||||
|
import { useModal } from '/@/components/Modal'
|
||||||
|
import TenantAuditStepModal from './TenantAuditStepModal.vue'
|
||||||
|
import { columns, searchFormSchema } from './columns'
|
||||||
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
|
const { notification } = useMessage()
|
||||||
|
const visible = ref<boolean>(false)
|
||||||
|
const refImportFlow = ref()
|
||||||
|
const [registerModal, { openModal }] = useModal()
|
||||||
|
const [registerTable, { reload, getForm, getSelectRows }] = useTable({
|
||||||
|
title: '集装箱信息列表',
|
||||||
|
api: async (p) => {
|
||||||
|
const res: API.DataResult = await ApiList(p)
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
resolve({ data: [...res.data], total: res.count })
|
||||||
|
})
|
||||||
|
},
|
||||||
|
beforeFetch: (p) => {
|
||||||
|
var data = getForm().getFieldsValue()
|
||||||
|
const postParam: API.PageRequest = {
|
||||||
|
queryCondition: '',
|
||||||
|
pageCondition: {
|
||||||
|
pageIndex: p.page,
|
||||||
|
pageSize: p.pageSize,
|
||||||
|
sortConditions: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if (p.field) {
|
||||||
|
postParam.pageCondition.sortConditions = [
|
||||||
|
{
|
||||||
|
sortField: p.field,
|
||||||
|
listSortDirection: p.order == 'ascend' ? 0 : 1,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
} else {
|
||||||
|
postParam.pageCondition.sortConditions = []
|
||||||
|
}
|
||||||
|
let condition: API.ConditionItem[] = []
|
||||||
|
if (!!data.CtnName) {
|
||||||
|
condition.push({
|
||||||
|
FieldName: 'CtnName',
|
||||||
|
FieldValue: data.CtnName,
|
||||||
|
ConditionalType: 1,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
postParam.queryCondition = JSON.stringify(condition)
|
||||||
|
return postParam
|
||||||
|
},
|
||||||
|
columns,
|
||||||
|
formConfig: {
|
||||||
|
labelWidth: 120,
|
||||||
|
schemas: searchFormSchema,
|
||||||
|
},
|
||||||
|
isTreeTable: false,
|
||||||
|
pagination: true,
|
||||||
|
striped: true,
|
||||||
|
useSearchForm: true,
|
||||||
|
showTableSetting: true,
|
||||||
|
bordered: true,
|
||||||
|
showIndexColumn: true,
|
||||||
|
indexColumnProps: {
|
||||||
|
width: 60,
|
||||||
|
},
|
||||||
|
canResize: true,
|
||||||
|
resizeHeightOffset: 35,
|
||||||
|
immediate: true,
|
||||||
|
actionColumn: {
|
||||||
|
width: 80,
|
||||||
|
title: '操作',
|
||||||
|
dataIndex: 'action',
|
||||||
|
fixed: 'right',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
function handleCreate() {
|
||||||
|
openModal(true, {
|
||||||
|
isParent: false,
|
||||||
|
isUpdate: false,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
function importFlow() {
|
||||||
|
visible.value = true
|
||||||
|
}
|
||||||
|
const handleOk = async () => {
|
||||||
|
let ids = []
|
||||||
|
refImportFlow.value.getSelectData().forEach((e) => {
|
||||||
|
ids.push(e.id)
|
||||||
|
})
|
||||||
|
const res: API.DataResult = await ApiImport({
|
||||||
|
ids,
|
||||||
|
id: '',
|
||||||
|
})
|
||||||
|
if (res.succeeded) {
|
||||||
|
notification.success({ message: res.message, duration: 3 })
|
||||||
|
} else {
|
||||||
|
notification.error({ message: res.message, duration: 3 })
|
||||||
|
}
|
||||||
|
reload()
|
||||||
|
visible.value = false
|
||||||
|
}
|
||||||
|
const handleCancel = () => {
|
||||||
|
visible.value = false
|
||||||
|
}
|
||||||
|
function handleAudit(record: Recordable) {
|
||||||
|
let ApiData: any = { cntrno: record.cntrno }
|
||||||
|
ApiChangeList(ApiData).then((res) => {
|
||||||
|
console.log(res)
|
||||||
|
})
|
||||||
|
// if (!checkPermissions('op:ctn:edit')) {
|
||||||
|
// openModal(true, {
|
||||||
|
// record,
|
||||||
|
// isUpdate: true,
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
function handleSuccess() {
|
||||||
|
reload()
|
||||||
|
}
|
||||||
|
</script>
|
@ -0,0 +1,79 @@
|
|||||||
|
// @ts-ignore
|
||||||
|
import { request } from '/@/utils/request'
|
||||||
|
import { DataResult, PageRequest } from '/@/api/model/baseModel'
|
||||||
|
enum Api {
|
||||||
|
list = '/containerManagementApi/CM_State_Change/GetCM_State_ChangeList',
|
||||||
|
edit = '/containerManagementApi/CM_State_Change/EditCM_State_Change',
|
||||||
|
multiEdit = '/containerManagementApi/CM_State_Change/CM_State_Change_Multi',
|
||||||
|
|
||||||
|
info = '/containerManagementApi/CM_CurrentState/GetCM_CurrentStateInfo',
|
||||||
|
del = '/mainApi/CodeCtn/BatchDelCodeCtn',
|
||||||
|
BasicsList = '/mainApi/CodeCtn/GetBasicsCodeCtnList',
|
||||||
|
ExistList = '/mainApi/CodeCtn/GetExistCodeCtnList',
|
||||||
|
Import = '/mainApi/CodeCtn/ImportCodeCtn',
|
||||||
|
}
|
||||||
|
// 列表 (Auth)
|
||||||
|
export function ApiChangeList(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.list,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量编辑状态 (Auth)
|
||||||
|
export function ApiMultiEdit(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.multiEdit,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 编辑 (Auth)
|
||||||
|
export function ApiEdit(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.edit,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 详情 (Auth)
|
||||||
|
export function ApiInfo(query) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.info,
|
||||||
|
method: 'get',
|
||||||
|
params: query,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 批量删除 (Auth)
|
||||||
|
export function ApiDel(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.del,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取商品类型列表-基础库 (Auth)
|
||||||
|
export function ApiBasicsList(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.BasicsList,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取当前租户已有的商品类型 (Auth)
|
||||||
|
export function ApiExistList() {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.ExistList,
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 导入商品类型列表-基础库 (Auth)
|
||||||
|
export function ApiImport(data: PageRequest) {
|
||||||
|
return request<DataResult>({
|
||||||
|
url: Api.Import,
|
||||||
|
method: 'post',
|
||||||
|
data,
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue