往来单位 调整

szh-new
张同海 3 months ago
parent 6eb668f6c9
commit 5a38f6aec8

@ -0,0 +1,123 @@
<template>
<BasicModal
v-bind="$attrs"
:use-wrapper="true"
:title="getTitle"
width="50%"
@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 })
})
const getTitle = computed(() => (!unref(isUpdate) ? '新增商品信息' : '编辑商品信息'))
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,32 @@
// @ts-ignore
import { request } from '/@/utils/request'
import { DataResult, PageRequest } from '/@/api/model/baseModel'
enum Api {
list = '/opApi/TaskMail/GetList',
edit = '/opApi/TaskMail/Edit',
info = '/opApi/TaskMail/Edit',
}
// 列表 (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,
})
}

@ -0,0 +1,215 @@
import { BasicColumn, FormSchema } from '/@/components/Table'
import { Tag } from 'ant-design-vue'
// import { GetGoodsTypeList } from './api'
let GoodsTypeList = []
// const res: API.DataResult = await GetGoodsTypeList()
// if (res.succeeded) {
// GoodsTypeList = res.data
// }
export const columns: BasicColumn[] = [
{
title: '名称',
dataIndex: 'name',
sorter: true,
width: 150,
},
{
title: '名称',
dataIndex: 'name',
sorter: true,
width: 150,
},
// {
// title: '商品类型',
// dataIndex: 'goodsTypeId',
// sorter: true,
// width: 200,
// customRender: ({ text }) => {
// let RData = text
// GoodsTypeList.forEach((e: any) => {
// if (e.value == text) {
// RData = e.label
// }
// })
// return RData
// },
// },
// {
// title: '是否启用',
// dataIndex: 'status',
// sorter: true,
// width: 80,
// customRender: ({ text }) => {
// if (text === 0) {
// return <Tag color="success">启用</Tag>
// } else if (text === 1) {
// return <Tag color="error">禁用</Tag>
// }
// return text
// },
// },
]
export const searchFormSchema: FormSchema[] = [
{
field: 'GoodName',
label: '商品名称',
component: 'Input',
colProps: { span: 6 },
},
]
export const formSchema: FormSchema[] = [
{
label: '',
field: 'id',
component: 'Input',
defaultValue: '',
show: false,
},
{
field: 'goodsCode',
label: '商品编码',
component: 'Input',
required: true,
colProps: { span: 12 },
dynamicDisabled: ({ values }) => {
return !!values.id
},
},
{
field: 'goodName',
label: '商品名称',
component: 'Input',
required: true,
colProps: { span: 12 },
},
{
field: 'goodsTypeId',
label: '商品类型',
component: 'Select',
colProps: { span: 12 },
defaultValue: '',
componentProps: {
options: GoodsTypeList,
allowClear: true,
showSearch: true,
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
},
},
{
field: 'goodNo',
label: '物料号',
component: 'Input',
colProps: { span: 12 },
defaultValue: '',
},
{
field: 'enName',
label: '英文名称',
component: 'Input',
colProps: { span: 12 },
defaultValue: '',
},
// {
// field: 'arRate',
// label: '入库应收',
// component: 'InputNumber',
// colProps: { span: 12 },
// defaultValue: 0,
// },
// {
// field: 'apRate',
// label: '入库应付',
// component: 'InputNumber',
// colProps: { span: 12 },
// defaultValue: 0,
// },
// {
// field: 'arOutRate',
// label: '出库应收',
// component: 'InputNumber',
// colProps: { span: 12 },
// defaultValue: 0,
// },
// {
// field: 'apOutRate',
// label: '出库应付',
// component: 'InputNumber',
// colProps: { span: 12 },
// defaultValue: 0,
// },
// {
// field: 'goodsFeeTypeId',
// label: '计费大类',
// component: 'Input',
// colProps: { span: 12 },
// defaultValue: '',
// },
{
field: 'hsCode',
label: 'HSCODE',
component: 'Input',
colProps: { span: 12 },
defaultValue: '',
},
// {
// field: 'ruleUnit',
// label: '申报计量单位',
// component: 'Input',
// colProps: { span: 12 },
// defaultValue: '',
// },
// {
// field: 'ruleUnit1',
// label: '法定第一计量单位',
// component: 'Input',
// colProps: { span: 12 },
// defaultValue: '',
// },
// {
// field: 'ruleUnit2',
// label: '法定第二计量单位',
// component: 'Input',
// colProps: { span: 12 },
// defaultValue: '',
// },
{
field: 'description',
label: '商品描述',
component: 'InputTextArea',
colProps: { span: 12 },
componentProps: {
rows: 2,
},
},
{
field: 'note',
label: '备注',
component: 'InputTextArea',
colProps: { span: 12 },
componentProps: {
rows: 2,
},
},
{
field: 'status',
label: '是否可用',
component: 'RadioButtonGroup',
defaultValue: 0,
colProps: { span: 12 },
componentProps: {
options: [
{ label: '禁用', value: 1 },
{ label: '启用', value: 0 },
],
},
},
]

@ -0,0 +1,126 @@
<template>
<div>
<BasicTable
:class="{ 'ds-table': source == 'list', 'ds-table-detail': source == 'modal' }"
@register="registerTable"
@row-dbClick="handleAudit"
>
<template #tableTitle>
<a-button type="link" @click="handleCreate" :disabled="checkPermissions('op:goods:add')">
<span class="iconfont icon-new_document"></span>
添加
</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'clarity:note-edit-line',
tooltip: '编辑',
onClick: handleAudit.bind(null, record),
disabled: checkPermissions('op:goods:edit'),
},
]"
/>
</template>
</template>
</BasicTable>
<TenantAuditStepModal @register="registerModal" @success="handleSuccess" />
</div>
</template>
<script lang="ts" setup>
import { ref, defineProps } from 'vue'
import { checkPermissions } from '/@/hooks/Permissions/index'
import { BasicTable, useTable, TableAction } from '/@/components/Table'
import { ApiList } 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 [registerModal, { openModal }] = useModal()
const [registerTable, { reload, getForm }] = 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.GoodName) {
condition.push({
FieldName: 'GoodName',
FieldValue: data.GoodName,
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,
rowSelection: { type: 'checkbox' },
indexColumnProps: {
width: 60,
},
canResize: true,
resizeHeightOffset: 15,
immediate: true,
actionColumn: {
width: 80,
title: '操作',
dataIndex: 'action',
fixed: 'right',
},
})
function handleCreate() {
openModal(true, {
isParent: false,
isUpdate: false,
})
}
function handleAudit(record: Recordable) {
if (!checkPermissions('op:goods:edit')) {
openModal(true, {
record,
isUpdate: true,
})
}
}
function handleSuccess() {
reload()
}
</script>

@ -7,14 +7,11 @@
<div class="form-set-drag-box">
<div class="table-box">
<!-- 表单区域组件 -->
<a-form
layout="vertical"
size="small"
>
<a-form layout="vertical" size="small">
<a-row :gutter="16">
<template v-for="(item, index) in formItems.list" :key="index">
<a-col
v-if="item.label"
v-if="item.label || item.component == 'Divider'"
:class="{ active: activeClass == item.field }"
:span="item?.colProps?.span"
:draggable="true"
@ -23,8 +20,14 @@
@dragenter="handleDragEnter($event, item)"
@dragend="handleDragEnd"
>
<a-form-item v-if="item.field != 'id'" :label="item.label" :name="item.label" @click="chooseItem(item)">
<div class="model-input">占位使用</div>
<a-form-item
v-if="item.field != 'id'"
:label="item.label"
:name="item.label"
@click="chooseItem(item)"
>
<div class="model-input" v-if="item.component != 'Divider'">使</div>
<div class="model-divider" v-else></div>
</a-form-item>
</a-col>
</template>
@ -34,32 +37,45 @@
<div class="opt-box">
<h3>字段属性设置</h3>
<!-- 表格操作列组件 -->
<a-form
ref="form"
:model="formItems.formData"
:rules="rules"
>
<a-form ref="form" :model="formItems.formData" :rules="rules">
<a-form-item label="字段名称(中文)" name="label">
<a-input v-model:value="formItems.formData.label" :disabled="formDisable" placeholder="请输入" />
<a-input
v-model:value="formItems.formData.label"
:disabled="formDisable"
placeholder="请输入"
/>
</a-form-item>
<a-form-item label="字段名称(英文)">
<a-input v-model:value="formItems.formData.enLabel" :disabled="formDisable" placeholder="请输入" />
<a-input
v-model:value="formItems.formData.enLabel"
:disabled="formDisable"
placeholder="请输入"
/>
</a-form-item>
<a-form-item v-if="/^InputTextArea|RadioButtonGroup|Select|Input$/.test(formItems.formData.component)" label="默认值" name="defaultValue">
<a-form-item
v-if="/^InputTextArea|RadioButtonGroup|Select|Input$/.test(formItems.formData.component)"
label="默认值"
name="defaultValue"
>
<a-select
v-if="formItems.formData.component == 'Select' || formItems.formData.component == 'RadioButtonGroup'"
v-if="
formItems.formData.component == 'Select' ||
formItems.formData.component == 'RadioButtonGroup'
"
v-model="formItems.formData.defaultValue"
placeholder="请选择"
:disabled="formDisable"
>
<a-select-option
v-for="item in formItems.formData.options"
:value="item.value"
>
<a-select-option v-for="item in formItems.formData.options" :value="item.value">
{{ item.label }}
</a-select-option>
</a-select>
<a-input v-else v-model:value="formItems.formData.defaultValue" :disabled="formDisable" placeholder="请输入" />
<a-input
v-else
v-model:value="formItems.formData.defaultValue"
:disabled="formDisable"
placeholder="请输入"
/>
</a-form-item>
<a-form-item label="是否必填" name="required">
<a-radio-group v-model:value="formItems.formData.required" :disabled="formDisable">
@ -94,17 +110,17 @@ import { FormSchema } from '/@/components/Table'
//
content: {
type: Object,
default: {}
}
default: {},
},
})
//
let formItems = reactive({
list: [],
formData: <FormSchema>{
colProps: {
span: ''
}
}
span: '',
},
},
})
//
const formDisable = ref(true)
@ -119,16 +135,16 @@ import { FormSchema } from '/@/components/Table'
{
required: true,
message: '请输入中文字段名称',
trigger: 'blur'
}
trigger: 'blur',
},
],
enLabel: [
{
required: true,
message: '请输入英文字段名称',
trigger: 'blur'
}
]
trigger: 'blur',
},
],
}
//
let dragging = {}
@ -142,8 +158,7 @@ import { FormSchema } from '/@/components/Table'
//
const chooseItem = (item) => {
if (formItems.formData.field) {
form.value.validate()
.then(() => {
form.value.validate().then(() => {
formToggle(item)
})
} else {
@ -183,7 +198,7 @@ import { FormSchema } from '/@/components/Table'
const validate = async () => {
const list = JSON.parse(JSON.stringify(formItems.list))
if (list && list.length) {
list.forEach(item => {
list.forEach((item) => {
if (item?.options) {
delete item.options
}
@ -191,7 +206,8 @@ import { FormSchema } from '/@/components/Table'
}
if (!formDisable.value) {
const flag = await new Promise((resolve) => {
form.value.validate()
form.value
.validate()
.then(() => {
return resolve(list)
})
@ -212,7 +228,7 @@ import { FormSchema } from '/@/components/Table'
},
)
defineExpose({
validate
validate,
})
</script>
@ -258,6 +274,9 @@ import { FormSchema } from '/@/components/Table'
color: rgba(0, 0, 0, 0.45);
border-radius: 4px;
}
.model-divider {
border-bottom: 1px solid #c9c9c9;
}
}
}
</style>

@ -0,0 +1,131 @@
<template>
<BasicModal
v-bind="$attrs"
:use-wrapper="true"
:title="getTitle"
width="50%"
@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 { notification } = 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) {
console.log(res.data)
let RshipperType = []
res.data.shipperType.split(',').forEach((e) => {
RshipperType.push(parseInt(e))
})
res.data.shipperType = RshipperType
console.log(res.data)
setFieldsValue({
...res.data,
})
}
} else {
setFieldsValue({ permissionIdentity: unref(2), clientId: data.clientId })
}
setModalProps({ loading: false })
})
const getTitle = computed(() => (!unref(isUpdate) ? '新增费用模板' : '编辑费用模板'))
async function handleSave(exit) {
try {
const values = await validate()
let shipperTypeS = ''
values.shipperType.forEach((item) => {
if (shipperTypeS == '') {
shipperTypeS = item
} else {
shipperTypeS = `${shipperTypeS},${item}`
}
})
values.shipperType = shipperTypeS
setModalProps({ confirmLoading: true, loading: true })
const res: API.DataResult = await ApiEdit(values)
if (res.succeeded) {
notification.success({ message: res.message, duration: 3 })
emit('success')
//
if (!exit) {
if (unref(isUpdate)) {
await refresh()
} else {
rowId.value = res.data
isUpdate.value = true
await refresh()
}
}
}
setModalProps({ confirmLoading: false, loading: false })
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,41 @@
// @ts-ignore
import { request } from '/@/utils/request'
import { DataResult, PageRequest } from '/@/api/model/baseModel'
enum Api {
list = '/feeApi/FeeCustTemplate/GetList',
edit = '/feeApi/FeeCustTemplate/Edit',
info = '/feeApi/FeeCustTemplate/Edit',
del = '/feeApi/FeeCustTemplate/Delete',
}
// 列表 (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,171 @@
import { BasicColumn, FormSchema } from '/@/components/Table'
import { Tag } from 'ant-design-vue'
import { getDictDropDown } from '/@/api/common'
let shipperTypeList: any = []
const res2: API.DataResult = await getDictDropDown({ code: 'shipper_type' })
if (res2.succeeded) {
shipperTypeList = []
res2.data.forEach((e) => {
shipperTypeList.push({ label: e.name, value: Number(e.value) })
})
}
export const columns: BasicColumn[] = [
{
title: '名称',
dataIndex: 'name',
width: 150,
},
{
title: '业务类型',
dataIndex: 'businessTypeText',
width: 150,
},
{
title: '费用类型',
dataIndex: 'feeTypeText',
width: 150,
},
{
title: '说明',
dataIndex: 'description',
width: 150,
},
]
export const searchFormSchema: FormSchema[] = [
{
field: 'ShortName',
label: '简称',
component: 'Input',
colProps: { span: 6 },
},
]
export const formSchema: FormSchema[] = [
{
label: '主键Id',
field: 'id',
component: 'Input',
defaultValue: '',
show: false,
},
{
label: '客户id',
field: 'clientId',
component: 'Input',
defaultValue: '',
show: false,
},
{
field: 'codeName',
label: '代码',
required: true,
component: 'Input',
colProps: { span: 12 },
},
{
field: 'shortName',
label: '简称',
required: true,
component: 'Input',
colProps: { span: 12 },
},
{
field: 'name',
label: '公司全称',
component: 'Input',
colProps: { span: 12 },
},
{
field: 'address',
label: '地址',
component: 'Input',
colProps: { span: 12 },
},
{
field: 'shipperType',
label: '类型',
required: true,
component: 'Select',
colProps: { span: 12 },
componentProps: {
options: shipperTypeList,
allowClear: true,
showSearch: true,
mode: 'multiple',
class: 'NoLimitHeight',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
},
},
{
field: 'attn',
label: '联系人',
component: 'Input',
colProps: { span: 12 },
defaultValue: '',
},
{
field: 'email',
label: '邮箱',
component: 'Input',
colProps: { span: 12 },
defaultValue: '',
},
{
field: 'tel',
label: '电话',
component: 'Input',
colProps: { span: 12 },
defaultValue: '',
},
{
field: 'companyNo',
label: '公司代码',
component: 'Input',
colProps: { span: 12 },
defaultValue: 0,
},
{
field: 'isPublic',
label: '是否公共标识',
component: 'Switch',
defaultValue: false,
colProps: { span: 6 },
componentProps: {
checkedChildren: '是',
unCheckedChildren: '否',
},
},
{
field: 'status',
label: '是否可用',
component: 'Switch',
defaultValue: 0,
colProps: { span: 6 },
componentProps: {
checkedChildren: '是',
checkedValue: 0,
unCheckedChildren: '否',
unCheckedValue: 1,
},
},
{
field: 'note',
label: '备注',
component: 'InputTextArea',
colProps: { span: 12 },
componentProps: {
rows: 2,
},
},
{
field: 'shortDetail',
label: '详细信息',
component: 'InputTextArea',
colProps: { span: 12 },
componentProps: {
rows: 2,
},
},
]

@ -0,0 +1,148 @@
<template>
<div>
<BasicTable class="ds-table-detail" @register="registerTable" @row-dbClick="handleAudit">
<template #toolbar>
<a-button type="link" @click="handleCreate">
<span class="iconfont icon-new_document"></span>
添加费用模板
</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'clarity:note-edit-line',
tooltip: '编辑',
onClick: handleAudit.bind(null, record),
},
{
icon: 'ant-design:delete-outlined',
tooltip: '删除',
color: 'error',
popConfirm: {
title: '是否要删除此条数据?',
okText: '是',
cancelText: '否',
confirm: handleDelete.bind(null, record),
},
},
]"
/>
</template>
</template>
</BasicTable>
<TenantAuditStepModal @register="registerModal" @success="handleSuccess" />
</div>
</template>
<script lang="ts" setup>
import { defineComponent, onMounted, ref } from 'vue'
import { BasicTable, useTable, TableAction, SorterResult } from '/@/components/Table'
import { ApiList, 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 props = defineProps({
clientId: { type: String },
})
const [registerModal, { openModal }] = useModal()
const [registerTable, { reload, getForm, getPaginationRef }] = useTable({
title: '费用模板列表',
api: async (p) => {
const res: API.DataResult = await ApiList(p)
return new Promise((resolve) => {
resolve({ data: [...res.data], total: res.count })
})
},
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.ShortName) {
// condition.push({
// FieldName: 'ShortName',
// FieldValue: data.ShortName,
// ConditionalType: 1,
// })
// }
condition.push({
FieldName: 'ClientId',
FieldValue: props.clientId,
ConditionalType: 1,
})
postParam.queryCondition = JSON.stringify(condition)
return postParam
},
columns,
// useSearchForm: true,
// formConfig: {
// labelWidth: 120,
// schemas: searchFormSchema,
// },
pagination: true,
bordered: true,
showTableSetting: false,
canResize: true,
resizeHeightOffset: 35,
actionColumn: {
width: 80,
title: '操作',
dataIndex: 'action',
fixed: 'right',
},
})
function handleCreate() {
openModal(true, {
clientId: props.clientId,
isParent: false,
isUpdate: false,
})
}
function handleAudit(record: Recordable) {
openModal(true, {
record,
// record: { clientId: props.clientId, ...record },
isUpdate: true,
})
}
//
async function handleDelete(record: Recordable) {
const res: API.DataResult = await ApiDel({
id: '',
ids: [record.id],
})
if (res.succeeded) {
notification.success({ message: res.message, duration: 3 })
reload()
} else {
notification.error({ message: res.message, duration: 3 })
}
}
function handleSuccess() {
reload()
}
</script>
<style lang="less" scoped>
.ds-table-detail {
margin-top: -16px;
.title {
font-size: 12px;
font-weight: 700;
letter-spacing: 1px;
line-height: 15.84px;
color: rgba(51, 56, 61, 1);
text-align: left;
vertical-align: bottom;
}
}
</style>

@ -56,6 +56,12 @@
<span class="iconfont icon-time" v-if="auditStatusText == '待审批'"></span>
<span>{{ auditStatusText }}</span>
</span>
<ConfigForm :form-schema="formSchema" :isTransfer="true" name="往来单位-基本信息" formNo="12">
<a-button type="link">
<span class="iconfont icon-icon_tianjia"></span>
添加到表单设置
</a-button>
</ConfigForm>
</div>
<div class="ds-detail-box sea-export-detail">
<div :style="{ display: 'flex' }">
@ -68,10 +74,6 @@
lasttext="下一条"
nexttext="上一条"
></ActionBar>
<!-- 合同管理 -->
<!-- <a-tab-pane key="6" tab="合同管理">
<Menus4 :client-id="clientId" class="RUnit" />
</a-tab-pane> -->
<!-- 基本信息 -->
<a-tabs v-model:activeKey="activeKey" class="RUnit">
<a-tab-pane key="1" tab="基本信息">
@ -82,42 +84,6 @@
<p class="title">财务信息</p>
<BasicForm @register="registerForm2" @linkageForm="linkageForm2" />
<div class="FlexTable">
<!-- <div class="HotTable">
<div>
<span class="title Fapiao">发票信息</span>
<a-button type="link" @click="TableAdd" class="pl0">
<span class="iconfont icon-new_document"></span>
添加
</a-button>
<a-popconfirm
title="确定要删除所选数据?"
ok-text="确定"
cancel-text="取消"
@confirm="FnClickDel"
>
<a-button type="link" class="pl0">
<span class="iconfont icon-shanchu21"></span>
删除
</a-button>
</a-popconfirm>
</div>
<div style="position: relative">
<input
class="ds-tb-check"
type="checkbox"
v-model="allCheck"
:indeterminate="someCheck"
/>
<hot-table ref="hotTb" :data="list" :settings="settings">
<img
v-show="!list.length"
class="hot-tb-no-data"
src="../../../assets/images/nodata.png"
alt=""
/>
</hot-table>
</div>
</div> -->
<div class="BTable">
<BasicTable @register="registerTable" @row-dbClick="EditRow" :maxHeight="140">
<template #tableTitle>
@ -163,8 +129,8 @@
<Tabs3 :client-id="clientId" :saleId="saleId" :sourceId="sourceId" />
</div>
</a-tab-pane>
<!-- <a-tab-pane key="3" tab="账期信息">
<Tabs3 :client-id="clientId" />
<!-- <a-tab-pane key="3" tab="费用模板">
<FeeCustTemplate :client-id="clientId" class="RUnit" />
</a-tab-pane> -->
<!-- 联系人信息 -->
<a-tab-pane key="4" tab="联系人信息">
@ -184,9 +150,6 @@
<ReleaseType :client-id="clientId" :customer-name="customerName"></ReleaseType>
</a-tab-pane>
</a-tabs>
<!-- 图片管理 -->
<!-- <Menus5 v-show="selectedKeys[0] == 'menu5'" class="RUnit" /> -->
</div>
<ClientAccountDateModal @register="CADModal" @success="handleSuccess" />
</div>
@ -195,7 +158,6 @@
<script lang="ts" setup>
import { ref, computed, unref, watch, onMounted, watchEffect } from 'vue'
import { Divider } from 'ant-design-vue'
import { BasicModal, useModalInner } from '/@/components/Modal'
import { BasicForm, useForm } from '/@/components/Form/index'
import { formSchema, formSchema2, Tablecolumns } from './columns'
import { EditformSchema, EditformSchema2 } from './EditColumns'
@ -209,6 +171,9 @@
ApiSubmitAudit,
ApiWithdraw,
} from './api'
import { GetFormSetListByModule } from '/@/api/common'
// idname
import { permissionsInfo } from '/@/hooks/web/usePermission'
import { GetClientSourceDetailSelectList } from '/@/views/operation/seaexport/api/BookingLedger'
import ClientAccountDateModal from './ClientAccountDateModal.vue'
import { useMessage } from '/@/hooks/web/useMessage'
@ -217,8 +182,8 @@
import Tabs3 from './tabs3/index.vue'
import Menus2 from './menu2/index.vue'
import Menus3 from './menu3/index.vue'
import Menus4 from './menu4/index.vue'
import CustTemplateDetail from './custTemplateDetail/index.vue'
import FeeCustTemplate from './FeeCustTemplate/index.vue'
import { useModal } from '/@/components/Modal'
import CustomerParams from './customerParams/index.vue'
import ReleaseType from './ReleaseType/index.vue'
@ -244,6 +209,51 @@
const activeKey = ref('1')
const clientId = ref('')
const customerName = ref('')
const DIYformSchema = ref([])
//
const getFormSet = async () => {
let res: any = await GetFormSetListByModule({ permissionId: permissionsInfo().permissionId })
if (res.succeeded) {
const { data } = res
if (data && data.length) {
const content = JSON.parse(data[0].content).columns
await updateSchema(content)
DIYformSchema.value = content
}
}
}
onMounted(async () => {
await getFormSet()
activeKey.value = '1'
selectedKeys.value = ['menu1']
resetFields()
resetFields1()
// setModalProps({ confirmLoading: false, loading: true })
if (route.query.id) {
// setModalProps({ confirmLoading: true });
rowId.value = route.query.id
activeKey.value = '2'
getData(true)
// setModalProps({ confirmLoading: false });
} else {
setTableData([])
clientId.value = ''
clientTag_o.value = {
id: '',
clientId: '',
others: '',
note: '',
createTime: '',
}
rowId.value = ''
activeKey.value = '2'
await setFieldsValue({})
auditStatusText.value = ''
activeKey.value = '1'
await setFieldsValue1({})
}
})
watch(activeKey, (nval, oval) => {
if (Number(nval) > 2 && !rowId.value) {
activeKey.value = oval
@ -265,7 +275,7 @@
})
watch(
rowId,
(nval, oval) => {
(nval) => {
if (nval) {
formSchema.forEach((item) => {
if (item.show !== false && item.component !== 'Divider') {
@ -274,7 +284,6 @@
updateSchema(item2)
}
})
if (item.field == 'pcorpId') {
appendSchemaByField(
{
@ -297,7 +306,15 @@
)
const [
registerForm1,
{ resetFields, getFieldsValue, setFieldsValue, validate, updateSchema, appendSchemaByField },
{
resetFields,
getFieldsValue,
setFieldsValue,
clearValidate,
validate,
updateSchema,
appendSchemaByField,
},
] = useForm({
labelWidth: 100,
schemas: formSchema,
@ -317,8 +334,9 @@
}
return RData
}
const linkageForm = (e) => {
formSchema.forEach((item) => {
DIYformSchema.value.forEach((item) => {
if (item.field == e.schema.field) {
updateSchema(item)
}
@ -460,7 +478,6 @@
// id
const sourceId = ref('')
async function getData(type) {
list.value.splice(0)
const res: API.DataResult = await getCodeGoodsTypeInfo({ id: unref(rowId) })
if (res.succeeded) {
clientId.value = res.data.id
@ -481,14 +498,11 @@
}
})
}
//
res.data.invoiceHeaders.forEach((item) => {
list.value.push(item)
})
if (type) {
await setFieldsValue({
...res.data,
})
clearValidate()
auditStatusText.value = res.data.auditStatusText
let Arr: any = []
await GetClientSourceDetailSelectList({ id: res.data.sourceId }).then((res) => {
@ -505,41 +519,7 @@
}
}
}
onMounted(async () => {
activeKey.value = '1'
selectedKeys.value = ['menu1']
resetFields()
resetFields1()
// setModalProps({ confirmLoading: false, loading: true })
if (route.query.id) {
// setModalProps({ confirmLoading: true });
rowId.value = route.query.id
activeKey.value = '2'
allCheck.value = false
someCheck.value = false
getData(true)
// setModalProps({ confirmLoading: false });
} else {
list.value.splice(0)
setTableData([])
clientId.value = ''
clientTag_o.value = {
id: '',
clientId: '',
others: '',
note: '',
createTime: '',
}
rowId.value = ''
activeKey.value = '2'
await setFieldsValue({})
auditStatusText.value = ''
activeKey.value = '1'
await setFieldsValue1({})
}
})
const getTitle = computed(() => (!rowId.value ? '新增往来单位' : '编辑往来单位'))
//
function handleCreate() {
@ -573,23 +553,10 @@
values.clientTag = { ...values.clientTag, ...clientTag_o.value }
values.clientTag.others = values.others
let invoiceHeaders = []
list.value.forEach((item) => {
let Data = { ...item }
if (rowId.value) {
Data.relativeId = item.relativeId ? item.relativeId : rowId.value
Data.id = item.id ? item.id : 0
} else {
Data.relativeId = 0
Data.id = 0
}
invoiceHeaders.push(Data)
})
// loading.value = true;
const res: API.DataResult = await editCodeGoodsType({
...values,
...getFieldsValue1(),
invoiceHeaders,
})
if (res.succeeded) {
if (!rowId.value) {
@ -669,138 +636,6 @@
auditStatusText.value = res.data.auditStatusText
}
}
// ---------------------------------------------------
//
const allCheck = ref(false)
//
const someCheck = ref(false)
const list = ref<any>([])
watchEffect(() => {
//
if (allCheck.value) {
list.value.forEach((item) => {
item.selected = true
})
} else {
//
list.value.forEach((item) => {
item.selected = false
})
}
})
watch(
list.value,
(val) => {
let a = 0
let b = 0
val.forEach((item) => {
if (item.selected) {
a += 1
} else {
b += 1
}
})
if (a == 0) {
allCheck.value = false
}
if (b == 0) {
allCheck.value = true
}
if (a != 0 && b != 0) {
someCheck.value = true
} else {
someCheck.value = false
}
},
{
deep: true,
},
)
const columns = [
{
title: '主键ID',
width: 200,
data: 'id',
},
{
title: '关联ID',
width: 200,
data: 'relativeId',
},
{
data: 'selected',
type: 'checkbox',
title: ' ',
width: 32,
className: 'htCenter',
readOnly: false,
},
{
title: '发票抬头',
width: 200,
data: 'header',
},
{
title: '地址电话',
width: 290,
data: 'addressTel',
},
]
const settings = {
height: '163',
width: '100%',
autoWrapRow: true,
autoWrapCol: true,
//
rowHeights: 32,
fixedColumnsLeft: 1,
//
hiddenColumns: {
columns: [0, 1],
indicators: true,
},
//
enterMoves: 'row',
columnSorting: true,
//
// afterValidate: function (isValid, value, row, prop, source) {
// if (!isValid) {
// hotTb.value.hotInstance.setDataAtRowProp(row, prop, '')
// }
// },
columns: columns,
// ()
licenseKey: 'non-commercial-and-evaluation',
//
async afterChange(changes, source) {
if (source === 'edit' || source === 'Autofill.fill' || source === 'CopyPaste.paste') {
let dict: any = {}
}
},
}
function TableAdd() {
list.value.push({ selected: false })
}
function FnClickDel() {
let ApiData = { ids: [] }
list.value.forEach((e, i) => {
if (e.selected) {
if (e.id) {
ApiData.ids.push(e.id)
} else {
list.value.splice(i, 1)
}
}
})
if (ApiData.ids.length) {
DeleteInvoiceHeader(ApiData).then((res) => {
if (res.succeeded) {
getData(false)
notification.success({ message: res.message, duration: 3 })
}
})
}
}
</script>
<style lang="less" scoped>
.auditStatusText {

@ -465,28 +465,28 @@ export const formSchema: FormSchema[] = [
label: '',
field: 'id',
component: 'Input',
defaultValue: '',
show: false,
},
// 审批状态
{
label: '审批状态',
label: '',
field: 'auditStatus',
component: 'Input',
defaultValue: '',
show: false,
},
// 审批状态名称
{
label: '审批状态名称',
label: '',
field: 'auditStatusText',
component: 'Input',
defaultValue: '',
show: false,
},
{
field: 'description',
label: '客户全称',
required: true,
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
@ -494,28 +494,25 @@ export const formSchema: FormSchema[] = [
label: '客户简称',
required: true,
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
field: 'enFullName',
label: '客户英文全称',
component: 'Input',
defaultValue: '',
colProps: { span: 8 },
},
{
field: 'enShortName',
label: '英文简称',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
field: 'codeName',
label: '助记码',
component: 'Input',
defaultValue: '',
dynamicDisabled: ({ values }) => {
return true
},
@ -525,28 +522,27 @@ export const formSchema: FormSchema[] = [
field: 'organizationCode',
label: '社会信用代码',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
field: 'registrationNo',
label: '海关备案号',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
field: 'inspectionNo',
label: '商检备案号',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
field: 'ediCode',
label: 'EDI代码',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
@ -554,7 +550,7 @@ export const formSchema: FormSchema[] = [
// field: 'pcorpId',
// label: '所属集团',
// component: 'TreeSelect',
// defaultValue: '',
//
// colProps: { span: 4 },
// componentProps: ({ formModel }) => {
// return {
@ -599,42 +595,42 @@ export const formSchema: FormSchema[] = [
field: 'chief',
label: '法人',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
field: 'tel',
label: '电话',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
field: 'email',
label: '邮箱',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
field: 'web',
label: '网址',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
field: 'city',
label: '城市',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
{
field: 'province',
label: '省或州',
component: 'Input',
defaultValue: '',
colProps: { span: 4 },
},
// {
@ -642,7 +638,7 @@ export const formSchema: FormSchema[] = [
// label: '国家',
// component: 'Select',
// colProps: { span: 4 },
// defaultValue: '',
//
// componentProps: {
// options: ClientCountryList,
// allowClear: true,
@ -657,7 +653,7 @@ export const formSchema: FormSchema[] = [
label: '国家',
component: 'Select',
colProps: { span: 4 },
defaultValue: '',
componentProps: (e) => {
return {
options: ClientCountryList,
@ -673,7 +669,7 @@ export const formSchema: FormSchema[] = [
field: 'address',
label: '通讯地址',
component: 'Input',
defaultValue: '',
colProps: { span: 12 },
},
{
@ -689,7 +685,6 @@ export const formSchema: FormSchema[] = [
label: '',
field: 'sale',
component: 'Input',
defaultValue: '',
show: false,
},
{
@ -697,7 +692,7 @@ export const formSchema: FormSchema[] = [
label: '揽货人',
component: 'Select',
colProps: { span: 4 },
defaultValue: '',
componentProps: ({ formModel }) => {
return {
options: SaleUserList,
@ -723,7 +718,6 @@ export const formSchema: FormSchema[] = [
label: '',
field: 'customerServiceName',
component: 'Input',
defaultValue: '',
show: false,
},
{
@ -731,7 +725,7 @@ export const formSchema: FormSchema[] = [
label: '客服',
component: 'Select',
colProps: { span: 4 },
defaultValue: '',
componentProps: ({ formModel }) => {
return {
options: CustomerServiceList,
@ -753,11 +747,11 @@ export const formSchema: FormSchema[] = [
}
},
},
// 操作人Name
{
label: '操作人Name',
label: '',
field: 'operatorName',
component: 'Input',
defaultValue: '',
show: false,
},
{
@ -765,7 +759,7 @@ export const formSchema: FormSchema[] = [
label: '操作人',
component: 'Select',
colProps: { span: 4 },
defaultValue: '',
componentProps: ({ formModel }) => {
return {
options: OperatorUserList,
@ -791,7 +785,7 @@ export const formSchema: FormSchema[] = [
label: '',
field: 'docName',
component: 'Input',
defaultValue: '',
show: false,
},
{
@ -799,7 +793,7 @@ export const formSchema: FormSchema[] = [
label: '单证',
component: 'Select',
colProps: { span: 4 },
defaultValue: '',
componentProps: ({ formModel }) => {
return {
options: VouchingClerkList,
@ -825,7 +819,7 @@ export const formSchema: FormSchema[] = [
{
field: 'commissionUserId',
label: '提成参与人',
defaultValue: '',
component: 'ApiSelect',
colProps: { span: 4 },
componentProps: () => {
@ -842,7 +836,7 @@ export const formSchema: FormSchema[] = [
field: 'blContent',
label: '提单信息',
component: 'InputTextArea',
defaultValue: '',
colProps: { span: 12 },
componentProps: {
rows: 4,
@ -857,11 +851,11 @@ export const formSchema: FormSchema[] = [
class: 'infoclientDivider',
},
},
// 业务来源Name
{
label: '业务来源Name',
label: '',
field: 'sourceName',
component: 'Input',
defaultValue: '',
show: false,
},
{
@ -936,11 +930,11 @@ export const formSchema: FormSchema[] = [
}
},
},
// 来源明细Name
{
label: '来源明细Name',
label: '',
field: 'sourceDetailName',
component: 'Input',
defaultValue: '',
show: false,
},
// {
@ -957,14 +951,14 @@ export const formSchema: FormSchema[] = [
field: 'sourceDetailId',
label: '来源明细',
component: 'Select',
defaultValue: '',
colProps: { span: 4 },
},
// {
// field: 'unitPrice',
// label: '冷藏费率',
// component: 'Input',
// defaultValue: '',
//
// colProps: { span: 4 },
// },
{
@ -986,7 +980,7 @@ export const formSchema: FormSchema[] = [
// label: '默认付费方式',
// component: 'Select',
// colProps: { span: 4 },
// defaultValue: '',
//
// componentProps: {
// options: ClientFrtList,
// allowClear: true,
@ -1000,7 +994,7 @@ export const formSchema: FormSchema[] = [
field: 'feeFRT',
label: '默认付费方式',
component: 'Select',
defaultValue: '',
colProps: { span: 4 },
componentProps: (e) => {
return {
@ -1031,7 +1025,7 @@ export const formSchema: FormSchema[] = [
field: 'invoicingMethod',
label: '开票方式',
component: 'Select',
defaultValue: '',
colProps: { span: 4 },
componentProps: (e) => {
return {
@ -1054,17 +1048,16 @@ export const formSchema: FormSchema[] = [
return !values.isOverdueDeduction
},
},
// 所属集团名称
{
field: 'pcorpName',
label: '所属集团名称',
label: '',
component: 'Input',
defaultValue: '',
show: false,
},
{
field: 'pcorpId',
label: '所属集团',
defaultValue: '',
component: 'ApiSelect',
colProps: { span: 4 },
componentProps: ({ formModel }) => {
@ -1102,7 +1095,7 @@ export const formSchema: FormSchema[] = [
// label: '审批状态',
// component: 'Input',
// colProps: { span: 4 },
// defaultValue: '',
//
// dynamicDisabled: ({}) => {
// return true
// },
@ -1169,11 +1162,11 @@ export const formSchema: FormSchema[] = [
class: 'infoclientDivider',
},
},
// 所属分部Name
{
label: '所属分部Name',
label: '',
field: 'saleOrgName',
component: 'Input',
defaultValue: '',
show: false,
},
{
@ -1237,7 +1230,7 @@ export const formSchema: FormSchema[] = [
field: 'note',
label: '备注',
component: 'InputTextArea',
defaultValue: '',
colProps: { span: 12 },
componentProps: {
rows: 4,
@ -1247,7 +1240,7 @@ export const formSchema: FormSchema[] = [
// label: '',
// field: 'Space1',
// component: 'Space',
// defaultValue: '',
//
// colProps: {
// span: 16,
// },
@ -1259,14 +1252,14 @@ export const formSchema2: FormSchema[] = [
field: 'farCode',
label: '财务应收账款代码',
component: 'Input',
defaultValue: '',
colProps: { span: 8 },
},
{
field: 'fapCode',
label: '财务应付账款代码',
component: 'Input',
defaultValue: '',
colProps: { span: 8 },
},
{
@ -1484,7 +1477,7 @@ export const CADformSchema: FormSchema[] = [
field: 'currency',
label: '币别',
required: true,
defaultValue: '',
component: 'ApiSelect',
colProps: { span: 6 },
componentProps: () => {
@ -1557,7 +1550,7 @@ export const CADformSchema: FormSchema[] = [
label: '国家',
component: 'Select',
colProps: { span: 6 },
defaultValue: '',
componentProps: ({ formModel }) => {
return {
options: ClientCountryList,

Loading…
Cancel
Save