版本更新v0.01
parent
7520fa8dd9
commit
d3e251f3e4
|
@ -28,5 +28,5 @@ export default {
|
||||||
// 获取仓库树结构
|
// 获取仓库树结构
|
||||||
sysStoreTree(data) {
|
sysStoreTree(data) {
|
||||||
return request('tree', data, 'get')
|
return request('tree', data, 'get')
|
||||||
},
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { baseRequest } from '@/utils/request'
|
import { baseRequest } from '@/utils/request'
|
||||||
|
|
||||||
const request = (url, ...arg) => baseRequest(`/inventory/inbound/` + url, ...arg)
|
const request = (url, ...arg) => baseRequest(`/inventory/inbound/` + url, ...arg)
|
||||||
|
const produceRequest = (url, ...arg) => baseRequest(`/produce/inbound/` + url, ...arg)
|
||||||
/**
|
/**
|
||||||
* 入库单Api接口管理器
|
* 入库单Api接口管理器
|
||||||
*
|
*
|
||||||
|
@ -15,15 +15,15 @@ export default {
|
||||||
},
|
},
|
||||||
// 获取入库单 明细列表
|
// 获取入库单 明细列表
|
||||||
inventoryInboundDetailList(data) {
|
inventoryInboundDetailList(data) {
|
||||||
return request('/detail/list', data, 'get')
|
return request('detail/list', data, 'get')
|
||||||
},
|
},
|
||||||
// 获取入库单 条码列表
|
// 获取入库单 条码列表
|
||||||
inventoryInboundBarcodeTree(data) {
|
inventoryInboundBarcodeTree(data) {
|
||||||
return request('/barcode/tree/list', data, 'get')
|
return produceRequest('barcode/tree/list', data, 'get')
|
||||||
},
|
},
|
||||||
// 获取入库单 条码(子级)列表
|
// 获取入库单 条码(子级)列表
|
||||||
inventoryInboundBarcodeTreeChildren(data) {
|
inventoryInboundBarcodeTreeChildren(data) {
|
||||||
return request('/barcode/tree/childrenList', data, 'get')
|
return request('barcode/tree/childrenList', data, 'get')
|
||||||
},
|
},
|
||||||
// 获取入库单详情
|
// 获取入库单详情
|
||||||
inventoryInboundDetail(data) {
|
inventoryInboundDetail(data) {
|
||||||
|
|
|
@ -29,4 +29,8 @@ export default {
|
||||||
inventoryInvoiceAuditPass(data, edit = false) {
|
inventoryInvoiceAuditPass(data, edit = false) {
|
||||||
return request('audit/pass', data)
|
return request('audit/pass', data)
|
||||||
},
|
},
|
||||||
|
// 获取发货通知单明细列表
|
||||||
|
inventoryInvoiceDetailList(data) {
|
||||||
|
return request('detail/list', data, 'get')
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,5 +24,14 @@ export default {
|
||||||
// 获取生产汇报单详情
|
// 获取生产汇报单详情
|
||||||
produceReportDetail(data) {
|
produceReportDetail(data) {
|
||||||
return request('detail', data, 'get')
|
return request('detail', data, 'get')
|
||||||
|
},
|
||||||
|
// 产品包装条码 树
|
||||||
|
produceReportTreeList(data) {
|
||||||
|
return request('barcode/tree/list', data, 'get')
|
||||||
|
},
|
||||||
|
|
||||||
|
// 产品包装条码 树 子级
|
||||||
|
produceReportTreeChildrenList(data) {
|
||||||
|
return request('barcode/tree/childrenList', data, 'get')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,175 @@
|
||||||
|
<template>
|
||||||
|
<div></div>
|
||||||
|
<a-modal v-model:open="visible" title="物料选择" width="80%" @ok="handleOk" @cancel="handleClose">
|
||||||
|
<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
|
||||||
|
<a-row :gutter="24">
|
||||||
|
<a-col :span="6">
|
||||||
|
<a-form-item label="名称" name="name">
|
||||||
|
<a-input v-model:value="searchFormState.name" placeholder="请输入名称" />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="6">
|
||||||
|
<a-form-item label="编码" name="number">
|
||||||
|
<a-input v-model:value="searchFormState.number" placeholder="请输入编码" />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="6">
|
||||||
|
<a-form-item label="可用状态" name="enabledState">
|
||||||
|
<a-select
|
||||||
|
v-model:value="searchFormState.enabledState"
|
||||||
|
placeholder="请选择可用状态"
|
||||||
|
:options="$TOOL.dictList('COMMON_STATUS')"
|
||||||
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="6">
|
||||||
|
<a-button type="primary" @click="tableRef.refresh()">查询</a-button>
|
||||||
|
<a-button style="margin: 0 8px" @click="reset">重置</a-button>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form>
|
||||||
|
|
||||||
|
<a-row :gutter="24">
|
||||||
|
<a-col :span="6">
|
||||||
|
<dynamic-tree
|
||||||
|
ref="dynamicTreeRef"
|
||||||
|
treeTitle="物料分类"
|
||||||
|
:tableRef="tableRef"
|
||||||
|
:apiModel="{
|
||||||
|
getTree: customerCategoryApi.customerCategoryTree,
|
||||||
|
}"
|
||||||
|
@selectTree="selectTree"
|
||||||
|
@treeRefresh="treeRefresh"
|
||||||
|
:toolConfig="{
|
||||||
|
plus: false,
|
||||||
|
edit: false,
|
||||||
|
delete: false,
|
||||||
|
refresh: true
|
||||||
|
}"
|
||||||
|
></dynamic-tree>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="18">
|
||||||
|
<s-table
|
||||||
|
ref="tableRef"
|
||||||
|
:columns="columns"
|
||||||
|
:data="loadData"
|
||||||
|
:alert="options.alert.show"
|
||||||
|
bordered
|
||||||
|
:row-key="(record) => record.id"
|
||||||
|
:tool-config="options.toolConfig"
|
||||||
|
:row-selection="tableRowSelection"
|
||||||
|
:scroll="{
|
||||||
|
x: 100,
|
||||||
|
y: 500
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.dataIndex === 'number'">
|
||||||
|
<a href="#">{{ record.number }}</a>
|
||||||
|
</template>
|
||||||
|
<template v-if="column.dataIndex === 'enabledState'">
|
||||||
|
<a-tag color="#87d068" v-if="record.enabledState === 'ENABLE'">启用</a-tag>
|
||||||
|
<a-tag color="#f50" v-if="record.enabledState === 'DISABLED'">停用</a-tag>
|
||||||
|
</template>
|
||||||
|
<template v-if="column.dataIndex === 'type'">
|
||||||
|
{{ $TOOL.dictTypeData('OFFICIAL_ACCOUNT_TYPE', record.type) }}
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</s-table>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useTableManagement } from '@/hook/useTableManagement'
|
||||||
|
import { message } from 'ant-design-vue'
|
||||||
|
import customerApi from "@/api/base/customer/customerApi";
|
||||||
|
import customerCategoryApi from "@/api/base/customer/customerCategoryApi";
|
||||||
|
import {clientColumn} from "@/views/productionBusiness/basicData/client/columns/clientColumn";
|
||||||
|
|
||||||
|
const emits = defineEmits(['ok'])
|
||||||
|
|
||||||
|
// 弹窗是否打开
|
||||||
|
const visible = ref(false)
|
||||||
|
// 物料分类
|
||||||
|
const dynamicTreeRef = ref(null)
|
||||||
|
// 列表查询
|
||||||
|
const { searchFormState, tableRef, selectedRowKeys, columns, loadData, reset, options, searchFormRef } =
|
||||||
|
useTableManagement(
|
||||||
|
{
|
||||||
|
page: customerApi.customerPage,
|
||||||
|
},
|
||||||
|
clientColumn,
|
||||||
|
[],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
// 选择树
|
||||||
|
const selectTree = (value) => {
|
||||||
|
searchFormState.value.categoryId = value.id
|
||||||
|
tableRef.value.refresh()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 刷新树
|
||||||
|
const treeRefresh = () => {
|
||||||
|
searchFormState.value.categoryId = null
|
||||||
|
tableRef.value.refresh()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 物料单选
|
||||||
|
let clientSelectedRowKey = []
|
||||||
|
let clientSelectedRows = []
|
||||||
|
const tableRowSelection = {
|
||||||
|
type: 'radio',
|
||||||
|
onChange: (selectedRowKey, selectedRows) => {
|
||||||
|
clientSelectedRowKey = selectedRowKey
|
||||||
|
clientSelectedRows = selectedRows
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确认
|
||||||
|
const handleOk = () => {
|
||||||
|
if (clientSelectedRowKey.length === 0) return message.error('请选择物料')
|
||||||
|
|
||||||
|
emits('ok', {
|
||||||
|
clientSelectedRowKey,
|
||||||
|
clientSelectedRows
|
||||||
|
})
|
||||||
|
|
||||||
|
closeModal()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭弹窗
|
||||||
|
const handleClose = () => {
|
||||||
|
closeModal()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭方法
|
||||||
|
const closeModal = () => {
|
||||||
|
// 关闭弹窗
|
||||||
|
visible.value = false
|
||||||
|
// 清空table 选项
|
||||||
|
tableRef.value.clearSelected()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打开方法
|
||||||
|
const showOpen = () => {
|
||||||
|
visible.value = true
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
// 加载物料分类
|
||||||
|
dynamicTreeRef.value.loadTreeData()
|
||||||
|
|
||||||
|
// 加载表格
|
||||||
|
tableRef.value.refresh()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出方法
|
||||||
|
defineExpose({
|
||||||
|
showOpen
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
|
@ -59,9 +59,7 @@
|
||||||
ref="formRef2"
|
ref="formRef2"
|
||||||
/>
|
/>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane key="2" tab="扩展字段" force-render>
|
<a-tab-pane key="2" tab="扩展字段" force-render> </a-tab-pane>
|
||||||
|
|
||||||
</a-tab-pane>
|
|
||||||
<a-tab-pane key="3" tab="操作信息" v-if="route.query.type !== 'ADD'">
|
<a-tab-pane key="3" tab="操作信息" v-if="route.query.type !== 'ADD'">
|
||||||
<OperationalInformation :detailData="detailData" :colSpan="6"></OperationalInformation>
|
<OperationalInformation :detailData="detailData" :colSpan="6"></OperationalInformation>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
|
@ -108,13 +106,10 @@
|
||||||
const formRef1 = ref(null)
|
const formRef1 = ref(null)
|
||||||
const formRef2 = ref(null)
|
const formRef2 = ref(null)
|
||||||
|
|
||||||
const { formData, formRefs, onSubmit, handleBack, fetchData } = useFormHandler(
|
const { formData, formRefs, onSubmit, handleBack, fetchData } = useFormHandler([...formItems, ...baseFormItems], {
|
||||||
[...formItems, ...baseFormItems],
|
submitForm: supplierApi.supplierSubmitForm,
|
||||||
{
|
getDetail: supplierApi.supplierDetail
|
||||||
submitForm: supplierApi.supplierSubmitForm,
|
})
|
||||||
getDetail: supplierApi.supplierDetail
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
const onSubmitForm = () => {
|
const onSubmitForm = () => {
|
||||||
onSubmit({
|
onSubmit({
|
||||||
|
@ -145,7 +140,8 @@
|
||||||
})
|
})
|
||||||
|
|
||||||
// 供应商分类
|
// 供应商分类
|
||||||
supplierCategoryApi.supplierCategoryTree({
|
supplierCategoryApi
|
||||||
|
.supplierCategoryTree({
|
||||||
enabledState: 'ENABLE'
|
enabledState: 'ENABLE'
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
|
@ -155,12 +151,10 @@
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
let activeKey = ref('1')
|
let activeKey = ref('1')
|
||||||
|
|
||||||
|
|
||||||
// 省、市、县 数据回显
|
// 省、市、县 数据回显
|
||||||
const cityOptionsObj = cityOptions.reduce((acc, item) => ((acc[item.value] = item.children), acc), {})
|
const cityOptionsObj = cityOptions.reduce((acc, item) => ((acc[item.value] = item.children), acc), {})
|
||||||
const getCityOptions = () => {
|
const getCityOptions = () => {
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
@delTree="delTree"
|
@delTree="delTree"
|
||||||
@treeRefresh="treeRefresh"
|
@treeRefresh="treeRefresh"
|
||||||
:toolConfig="{
|
:toolConfig="{
|
||||||
plus: hasPerm('supplierCategoryAdd'),
|
plus: true,
|
||||||
edit: hasPerm('supplierCategoryEdit'),
|
edit: hasPerm('supplierCategoryEdit'),
|
||||||
delete: hasPerm('supplierCategoryDelete'),
|
delete: hasPerm('supplierCategoryDelete'),
|
||||||
refresh: true
|
refresh: true
|
||||||
|
@ -52,13 +52,11 @@
|
||||||
type: 'ADD'
|
type: 'ADD'
|
||||||
})
|
})
|
||||||
"
|
"
|
||||||
v-if="hasPerm('supplierAdd')"
|
|
||||||
>
|
>
|
||||||
<template #icon><plus-outlined /></template>
|
<template #icon><plus-outlined /></template>
|
||||||
新增
|
新增
|
||||||
</a-button>
|
</a-button>
|
||||||
<xn-batch-delete
|
<xn-batch-delete
|
||||||
v-if="hasPerm('supplierBatchDelete')"
|
|
||||||
:selectedRowKeys="selectedRowKeys"
|
:selectedRowKeys="selectedRowKeys"
|
||||||
@batchDelete="deleteBatchRecords"
|
@batchDelete="deleteBatchRecords"
|
||||||
/>
|
/>
|
||||||
|
@ -117,7 +115,7 @@
|
||||||
</s-table>
|
</s-table>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
|
|
||||||
<supplierCategoryForm ref="supplierCategoryFormRef" @successful="successful"></supplierCategoryForm>
|
<supplierCategoryForm ref="supplierCategoryFormRef" @successful="successful"></supplierCategoryForm>
|
||||||
</a-card>
|
</a-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -65,7 +65,7 @@ export const tableColumns = [
|
||||||
width: 200,
|
width: 200,
|
||||||
ellipsis: true
|
ellipsis: true
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
title: '创建人',
|
title: '创建人',
|
||||||
dataIndex: 'createUserName',
|
dataIndex: 'createUserName',
|
||||||
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
<template>
|
||||||
|
<a-page-header style="padding: 10px; font-size: 20px" @back="handleBack">
|
||||||
|
<template #extra>
|
||||||
|
<!-- <a-button v-if="route.query.type !== 'SEARCH'" key="1" type="primary" @click="onSubmitForm">保存</a-button>-->
|
||||||
|
</template>
|
||||||
|
</a-page-header>
|
||||||
|
|
||||||
|
<a-card :bordered="false" title="入库单">
|
||||||
|
<DynamicForm
|
||||||
|
:allDisabled="route.query.type === 'SEARCH'"
|
||||||
|
:formItems="unitFormItems"
|
||||||
|
:model="formData"
|
||||||
|
:rules="formRules"
|
||||||
|
ref="formRef1"
|
||||||
|
/>
|
||||||
|
</a-card>
|
||||||
|
|
||||||
|
<a-card :bordered="false" class="mt-4" style="height: 100%">
|
||||||
|
<a-tabs v-model:activeKey="activeKey">
|
||||||
|
<a-tab-pane key="1" tab="汇报明细" forceRender>
|
||||||
|
<a-table
|
||||||
|
:columns="detailColumns"
|
||||||
|
:data-source="detailDataSource"
|
||||||
|
:scroll="{
|
||||||
|
x: 100
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.dataIndex === 'action'">
|
||||||
|
<a type="primary" @click="handleOpenViewScan(record)">查看条码</a>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</a-table>
|
||||||
|
</a-tab-pane>
|
||||||
|
<a-tab-pane key="2" tab="操作信息" v-if="route.query.type !== 'ADD'">
|
||||||
|
<OperationalInformation :detailData="inform" :colSpan="6"></OperationalInformation>
|
||||||
|
</a-tab-pane>
|
||||||
|
</a-tabs>
|
||||||
|
</a-card>
|
||||||
|
|
||||||
|
<!-- 产看条码 -->
|
||||||
|
<a-modal v-model:open="visible" title="查看条码" width="80%">
|
||||||
|
<a-table
|
||||||
|
style="height: 500px"
|
||||||
|
:columns="modalColumns"
|
||||||
|
:data-source="scanTableList"
|
||||||
|
:pagination="false"
|
||||||
|
:scroll="{ x: 100, y: 420 }"
|
||||||
|
:row-key="(record) => record.id"
|
||||||
|
@expand="columnsExpand"
|
||||||
|
bordered
|
||||||
|
/>
|
||||||
|
</a-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import produceReportApi from '@/api/production/produceTask/produceReportApi'
|
||||||
|
import useFormHandler from '@/hook/useFormHandler'
|
||||||
|
import { useRoute } from 'vue-router'
|
||||||
|
import { unitFormItems, formRules } from '@/views/productionBusiness/productionCenter/report/formFields/detailFields'
|
||||||
|
import { detailColumns, modalColumns } from '@/views/productionBusiness/productionCenter/report/columns/detailColumns'
|
||||||
|
import { cloneDeep } from 'lodash-es'
|
||||||
|
import produceReportDetailApi from '@/api/production/produceTask/produceReportDetailApi'
|
||||||
|
import inventoryInboundApi from '@/api/inventory/inventoryInboundApi'
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
const formRef1 = ref(null)
|
||||||
|
const tableRef = ref(null)
|
||||||
|
let extendData = ref([])
|
||||||
|
let searchFormState = ref({})
|
||||||
|
|
||||||
|
let { formData, formRefs, inform, handleBack, fetchData, getExtendField } = useFormHandler(unitFormItems, {
|
||||||
|
getDetail: inventoryInboundApi.inventoryInboundDetail
|
||||||
|
})
|
||||||
|
|
||||||
|
let detailDataSource = ref([])
|
||||||
|
|
||||||
|
const options = {
|
||||||
|
alert: {
|
||||||
|
show: true,
|
||||||
|
clear: () => {
|
||||||
|
selectedRowKeys.value = []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rowSelection: {
|
||||||
|
onChange: (selectedRowKey, selectedRows) => {
|
||||||
|
selectedRowKeys.value = selectedRowKey
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toolConfig: { refresh: true, height: true, columnSetting: true, striped: false }
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
formRefs.value = [formRef1.value]
|
||||||
|
const detailData = await fetchData(route.query.type)
|
||||||
|
searchFormState.value.inboundId = detailData.id
|
||||||
|
// tableRef.value.refresh(true)
|
||||||
|
await loadData()
|
||||||
|
extendData.value = await getExtendField('MATERIAL')
|
||||||
|
})
|
||||||
|
|
||||||
|
// 获取产品包装条码控制器
|
||||||
|
const loadData = async () => {
|
||||||
|
const searchFormParam = cloneDeep(searchFormState.value)
|
||||||
|
return inventoryInboundApi.inventoryInboundDetailList(Object.assign(searchFormParam)).then((data) => {
|
||||||
|
detailDataSource.value = data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
let activeKey = ref('1')
|
||||||
|
|
||||||
|
// 查看条码
|
||||||
|
let visible = ref(false)
|
||||||
|
let scanTableList = ref([])
|
||||||
|
let recordTable = {}
|
||||||
|
const handleOpenViewScan = (record) => {
|
||||||
|
recordTable = record
|
||||||
|
visible.value = true
|
||||||
|
inventoryInboundApi
|
||||||
|
.inventoryInboundBarcodeTree({
|
||||||
|
docsDetailId: record.id,
|
||||||
|
docsId: record.inboundId
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
scanTableList.value = res
|
||||||
|
scanTableList.value.forEach((item) => {
|
||||||
|
if (item.subAmount && item.subAmount > 0) item.children = []
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const columnsExpand = (expanded, record) => {
|
||||||
|
if (expanded) {
|
||||||
|
produceReportApi
|
||||||
|
.produceReportTreeChildrenList({
|
||||||
|
docsDetailId: recordTable.id,
|
||||||
|
docsId: record.docsId,
|
||||||
|
parentBarcode: record.barcode
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
record.children = res
|
||||||
|
record.children &&
|
||||||
|
record.children.forEach((item) => {
|
||||||
|
if (item.subAmount && item.subAmount > 0) item.children = []
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -0,0 +1,69 @@
|
||||||
|
import { required } from '@/utils/formRules'
|
||||||
|
import tool from '@/utils/tool'
|
||||||
|
|
||||||
|
export const unitFormItems = reactive([
|
||||||
|
{
|
||||||
|
label: '单号:',
|
||||||
|
name: 'billNumber',
|
||||||
|
type: 'a-input-number',
|
||||||
|
span: 6,
|
||||||
|
attrs: {
|
||||||
|
placeholder: '请输入编码',
|
||||||
|
allowClear: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '业务日期:',
|
||||||
|
name: 'businessDate',
|
||||||
|
type: 'a-date-picker',
|
||||||
|
span: 6,
|
||||||
|
attrs: {
|
||||||
|
placeholder: '请输入业务日期',
|
||||||
|
allowClear: true,
|
||||||
|
valueFormat: 'YYYY-MM-DD HH:mm:ss'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '状态:',
|
||||||
|
name: 'state',
|
||||||
|
type: 'a-select',
|
||||||
|
span: 6,
|
||||||
|
attrs: {
|
||||||
|
placeholder: '请选择可用状态',
|
||||||
|
options: tool.dictList('PRODUCE_REPORT_STATE')
|
||||||
|
},
|
||||||
|
defaultValue: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '类型:',
|
||||||
|
name: 'produceType',
|
||||||
|
type: 'a-select',
|
||||||
|
span: 6,
|
||||||
|
attrs: {
|
||||||
|
options: tool.dictList('PRODUCE_TYPE')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '生产线:',
|
||||||
|
name: 'productionLineName',
|
||||||
|
type: 'a-select',
|
||||||
|
span: 6,
|
||||||
|
attrs: {
|
||||||
|
placeholder: '请选择是否基本单位',
|
||||||
|
options: tool.dictList('YES_NO')
|
||||||
|
},
|
||||||
|
defaultValue: 'NO'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '备注:',
|
||||||
|
name: 'remarks',
|
||||||
|
type: 'a-textarea',
|
||||||
|
span: 24,
|
||||||
|
attrs: {
|
||||||
|
placeholder: '请输入备注',
|
||||||
|
allowClear: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
export const formRules = {}
|
|
@ -1,12 +1,13 @@
|
||||||
import tool from '@/utils/tool'
|
import tool from '@/utils/tool'
|
||||||
|
|
||||||
export const searchFields = [
|
export const searchFields = [
|
||||||
|
{ name: 'billNumber', label: '单号', component: 'a-input', props: { placeholder: '请输入单号' } },
|
||||||
{ name: 'billNumber', label: '单号', component: 'a-input', props: { placeholder: '请输入单号' } },
|
{ name: 'billNumber', label: '单号', component: 'a-input', props: { placeholder: '请输入单号' } },
|
||||||
{
|
{
|
||||||
label: '类型:',
|
label: '类型:',
|
||||||
name: 'type',
|
name: 'type',
|
||||||
type: 'a-select',
|
component: 'a-select',
|
||||||
attrs: {
|
props: {
|
||||||
placeholder: '请选择类型',
|
placeholder: '请选择类型',
|
||||||
allowClear: true,
|
allowClear: true,
|
||||||
options: tool.dictList('INBOUND_TYPE')
|
options: tool.dictList('INBOUND_TYPE')
|
||||||
|
@ -15,9 +16,8 @@ export const searchFields = [
|
||||||
{
|
{
|
||||||
label: '仓库:',
|
label: '仓库:',
|
||||||
name: 'storeId',
|
name: 'storeId',
|
||||||
type: 'a-tree-select',
|
component: 'a-tree-select',
|
||||||
span: 6,
|
props: {
|
||||||
attrs: {
|
|
||||||
placeholder: '请选择仓库',
|
placeholder: '请选择仓库',
|
||||||
treeData: [],
|
treeData: [],
|
||||||
fieldNames: {
|
fieldNames: {
|
||||||
|
@ -25,8 +25,7 @@ export const searchFields = [
|
||||||
label: 'name',
|
label: 'name',
|
||||||
value: 'id'
|
value: 'id'
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
defaultValue: ''
|
|
||||||
},
|
},
|
||||||
{ name: 'customerName', label: '供货单位名称', component: 'a-input', props: { placeholder: '请输入供货单位名称' } },
|
{ name: 'customerName', label: '供货单位名称', component: 'a-input', props: { placeholder: '请输入供货单位名称' } },
|
||||||
{ name: 'customerNumber', label: '供货单位编码', component: 'a-input', props: { placeholder: '请输入供货单位编码' } }
|
{ name: 'customerNumber', label: '供货单位编码', component: 'a-input', props: { placeholder: '请输入供货单位编码' } }
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
<template>
|
<template>
|
||||||
<AdvancedSearchForm
|
<AdvancedSearchForm
|
||||||
:formState="searchFormState"
|
:formState="searchFormState"
|
||||||
:formFields="searchFields"
|
:formFields="searchFieldsRef"
|
||||||
@search="tableRef.refresh()"
|
@search="tableRef.refresh()"
|
||||||
@reset="tableRef.refresh()"
|
@reset="tableRef.refresh()"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<a-card :bordered="false" class="mt-4" style="height: 100%">
|
<a-card :bordered="false" class="mt-4" style="height: 100%">
|
||||||
<a-row :gutter="24">
|
<a-row :gutter="24">
|
||||||
|
|
||||||
<a-col :span="24">
|
<a-col :span="24">
|
||||||
<s-table
|
<s-table
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
|
@ -18,15 +17,10 @@
|
||||||
bordered
|
bordered
|
||||||
:row-key="(record) => record.id"
|
:row-key="(record) => record.id"
|
||||||
:tool-config="options.toolConfig"
|
:tool-config="options.toolConfig"
|
||||||
:row-selection="options.rowSelection"
|
|
||||||
:scroll="{
|
:scroll="{
|
||||||
x: 100
|
x: 100
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<template #operator>
|
|
||||||
<a-space>
|
|
||||||
</a-space>
|
|
||||||
</template>
|
|
||||||
<template #bodyCell="{ column, record }">
|
<template #bodyCell="{ column, record }">
|
||||||
<template v-if="column.dataIndex === 'billNumber'">
|
<template v-if="column.dataIndex === 'billNumber'">
|
||||||
<span style="color: #0d84ff">{{ record.billNumber }}</span>
|
<span style="color: #0d84ff">{{ record.billNumber }}</span>
|
||||||
|
@ -40,7 +34,7 @@
|
||||||
<a-space>
|
<a-space>
|
||||||
<a
|
<a
|
||||||
@click="
|
@click="
|
||||||
navigateTo('/inventory/inbound/detail', {
|
navigateTo('/inbound/detail', {
|
||||||
type: 'SEARCH',
|
type: 'SEARCH',
|
||||||
id: record.id
|
id: record.id
|
||||||
})
|
})
|
||||||
|
@ -51,13 +45,10 @@
|
||||||
</a>
|
</a>
|
||||||
</a-space>
|
</a-space>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
</s-table>
|
</s-table>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
|
|
||||||
|
|
||||||
</a-card>
|
</a-card>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -67,16 +58,16 @@
|
||||||
import { useTableManagement } from '@/hook/useTableManagement'
|
import { useTableManagement } from '@/hook/useTableManagement'
|
||||||
import { searchFields } from '@/views/productionBusiness/inventory/inbound/formFields/searchFields'
|
import { searchFields } from '@/views/productionBusiness/inventory/inbound/formFields/searchFields'
|
||||||
import { tableColumns } from '@/views/productionBusiness/inventory/inbound/columns/tableColumn'
|
import { tableColumns } from '@/views/productionBusiness/inventory/inbound/columns/tableColumn'
|
||||||
|
import sysStoreApi from '@/api/base/store/sysStoreApi'
|
||||||
|
|
||||||
|
const searchFieldsRef = ref(searchFields)
|
||||||
|
|
||||||
const tagColorList = ['warning', 'success', 'error', 'purple']
|
const tagColorList = ['warning', 'success', 'error', 'purple']
|
||||||
const {
|
const {
|
||||||
searchFormState,
|
searchFormState,
|
||||||
tableRef,
|
tableRef,
|
||||||
selectedRowKeys,
|
|
||||||
columns,
|
columns,
|
||||||
loadData,
|
loadData,
|
||||||
deleteRecord,
|
|
||||||
deleteBatchRecords,
|
|
||||||
options,
|
options,
|
||||||
navigateTo
|
navigateTo
|
||||||
} = useTableManagement(
|
} = useTableManagement(
|
||||||
|
@ -84,15 +75,20 @@
|
||||||
page: inventoryInboundApi.inventoryInboundPage
|
page: inventoryInboundApi.inventoryInboundPage
|
||||||
},
|
},
|
||||||
tableColumns,
|
tableColumns,
|
||||||
['inventoryInbound:export']
|
['customerEdit', 'customerDelete']
|
||||||
)
|
)
|
||||||
// 批量导出
|
// 批量导出
|
||||||
const exportBatchVerify = () =>{
|
const exportBatchVerify = () => {}
|
||||||
|
|
||||||
}
|
onMounted(async () => {
|
||||||
|
const list = await sysStoreApi.sysStoreTree()
|
||||||
|
console.log(list)
|
||||||
|
searchFieldsRef.value.forEach((item) => {
|
||||||
|
if (item.name === 'storeId') {
|
||||||
|
item.props.treeData = list
|
||||||
|
|
||||||
onMounted(() => {
|
console.log(item.props.treeData, 'item.props.treeData')
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<a-card :bordered="false" title="基本信息">
|
<a-card :bordered="false" title="基本信息">
|
||||||
<DynamicForm
|
<DynamicForm
|
||||||
:allDisabled="route.query.type === 'SEARCH'"
|
:allDisabled="route.query.type === 'SEARCH'"
|
||||||
:formItems="basicInfoFormItems"
|
:formItems="basicInfoFormItemsRef"
|
||||||
:rules="basicInfoFormRules"
|
:rules="basicInfoFormRules"
|
||||||
:model="formData"
|
:model="formData"
|
||||||
ref="formRef1"
|
ref="formRef1"
|
||||||
|
@ -19,9 +19,9 @@
|
||||||
readonly
|
readonly
|
||||||
v-bind="{ ...item.attrs }"
|
v-bind="{ ...item.attrs }"
|
||||||
v-model:value="model[item.name]"
|
v-model:value="model[item.name]"
|
||||||
|
@click="openClient"
|
||||||
></a-input>
|
></a-input>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</DynamicForm>
|
</DynamicForm>
|
||||||
</a-card>
|
</a-card>
|
||||||
|
|
||||||
|
@ -33,20 +33,14 @@
|
||||||
title="扩展字段"
|
title="扩展字段"
|
||||||
>
|
>
|
||||||
<DynamicForm
|
<DynamicForm
|
||||||
:allDisabled="route.query.type === 'SEARCH'"
|
:allDisabled="route.query.type === 'SEARCH'"
|
||||||
:formItems="extendData"
|
:formItems="extendData"
|
||||||
:model="extendFormData"
|
:model="extendFormData"
|
||||||
:rules="formRules"
|
v-if="extendData.length > 0"
|
||||||
v-if="extendData.length > 0"
|
/>
|
||||||
/>
|
|
||||||
</a-card>
|
</a-card>
|
||||||
|
|
||||||
<a-card
|
<a-card :bordered="false" class="mt-4" style="height: 100%" title="商品明细信息">
|
||||||
:bordered="false"
|
|
||||||
class="mt-4"
|
|
||||||
style="height: 100%"
|
|
||||||
title="商品明细信息"
|
|
||||||
>
|
|
||||||
<a-space>
|
<a-space>
|
||||||
<a-button v-if="route.query.type !== 'SEARCH'" key="1" type="primary" @click="addRow">新增</a-button>
|
<a-button v-if="route.query.type !== 'SEARCH'" key="1" type="primary" @click="addRow">新增</a-button>
|
||||||
<xn-batch-delete
|
<xn-batch-delete
|
||||||
|
@ -73,7 +67,7 @@
|
||||||
readonly
|
readonly
|
||||||
v-model:value="record['productName']"
|
v-model:value="record['productName']"
|
||||||
placeholder="请选择商品信息"
|
placeholder="请选择商品信息"
|
||||||
@click="openMateriel"
|
@click="openMateriel(record, index)"
|
||||||
></a-input>
|
></a-input>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="column.dataIndex === 'unitName'">
|
<template v-if="column.dataIndex === 'unitName'">
|
||||||
|
@ -81,16 +75,15 @@
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
:options="record.unitArr"
|
:options="record.unitArr"
|
||||||
v-model:value="record['unitName']"
|
v-model:value="record['unitName']"
|
||||||
@change="
|
:fieldNames="{
|
||||||
(value, options) => {
|
label: 'name',
|
||||||
cityChange(value, options, record)
|
value: 'id'
|
||||||
}
|
}"
|
||||||
"
|
|
||||||
:filter-option="filterOption"
|
|
||||||
></a-select>
|
></a-select>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="column.dataIndex === 'planAmount'">
|
<template v-if="column.dataIndex === 'planAmount'">
|
||||||
<a-input-number class="xn-wd"
|
<a-input-number
|
||||||
|
class="xn-wd"
|
||||||
:disabled="route.query.type === 'SEARCH'"
|
:disabled="route.query.type === 'SEARCH'"
|
||||||
v-model:value="record['planAmount']"
|
v-model:value="record['planAmount']"
|
||||||
:min="0"
|
:min="0"
|
||||||
|
@ -98,9 +91,7 @@
|
||||||
</template>
|
</template>
|
||||||
<template v-if="column.dataIndex === 'action'">
|
<template v-if="column.dataIndex === 'action'">
|
||||||
<a-space>
|
<a-space>
|
||||||
<a-button type="link" danger size="small" >
|
<a-button type="link" danger size="small"> <DeleteOutlined />删除 </a-button>
|
||||||
<DeleteOutlined />删除
|
|
||||||
</a-button>
|
|
||||||
</a-space>
|
</a-space>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
|
@ -109,24 +100,29 @@
|
||||||
|
|
||||||
<materiel-selector-plus ref="materielSelectorPlusRef" @ok="materielBackOk"></materiel-selector-plus>
|
<materiel-selector-plus ref="materielSelectorPlusRef" @ok="materielBackOk"></materiel-selector-plus>
|
||||||
|
|
||||||
|
<client-selector-plus ref="clientSelectorPlusRef" @ok="clientBackOk"></client-selector-plus>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="taskDetail">
|
<script setup name="taskDetail">
|
||||||
import { required } from '@/utils/formRules'
|
|
||||||
import inventoryInvoiceApi from '@/api/inventory/inventoryInvoiceApi'
|
import inventoryInvoiceApi from '@/api/inventory/inventoryInvoiceApi'
|
||||||
import sysStoreApi from '@/api/base/store/sysStoreApi'
|
import sysStoreApi from '@/api/base/store/sysStoreApi'
|
||||||
import materialApi from '@/api/base/material/materialApi'
|
import materialApi from '@/api/base/material/materialApi'
|
||||||
import useFormHandler from '@/hook/useFormHandler'
|
import useFormHandler from '@/hook/useFormHandler'
|
||||||
import { basicInfoFormRules, basicInfoFormItems, productDetailFormItems } from '@/views/productionBusiness/inventory/invoice/formFields/detailFields'
|
import {
|
||||||
|
basicInfoFormRules,
|
||||||
|
basicInfoFormItems,
|
||||||
|
productDetailFormItems
|
||||||
|
} from '@/views/productionBusiness/inventory/invoice/formFields/detailFields'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import MaterielSelectorPlus from '@/components/Selector/materielSelectorPlus.vue'
|
import MaterielSelectorPlus from '@/components/Selector/materielSelectorPlus.vue'
|
||||||
|
import ClientSelectorPlus from '@/components/Selector/clientSelectorPlus.vue'
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const formRef1 = ref(null)
|
const formRef1 = ref(null)
|
||||||
let extendData = ref([])
|
let extendData = ref([])
|
||||||
|
|
||||||
|
const basicInfoFormItemsRef = ref(basicInfoFormItems)
|
||||||
|
|
||||||
const { formData, formRefs, inform, extendFormData, onSubmit, handleBack, fetchData, getExtendField } =
|
const { formData, formRefs, inform, extendFormData, onSubmit, handleBack, fetchData, getExtendField } =
|
||||||
useFormHandler([...basicInfoFormItems], {
|
useFormHandler([...basicInfoFormItems], {
|
||||||
submitForm: inventoryInvoiceApi.inventoryInvoiceSubmitForm,
|
submitForm: inventoryInvoiceApi.inventoryInvoiceSubmitForm,
|
||||||
|
@ -142,15 +138,21 @@
|
||||||
formData.storeId = res.storeId // 仓库id
|
formData.storeId = res.storeId // 仓库id
|
||||||
formData.storeName = res.storeName // 仓库名称
|
formData.storeName = res.storeName // 仓库名称
|
||||||
formData.storeNumber = res.storeNumber // 仓库编码
|
formData.storeNumber = res.storeNumber // 仓库编码
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 获取明细列表
|
||||||
|
const detailList = await inventoryInvoiceApi.inventoryInvoiceDetailList({
|
||||||
|
invoiceId: formRefs.value.id
|
||||||
|
})
|
||||||
|
|
||||||
|
productDetailData.value = detailList
|
||||||
|
|
||||||
// 处理表单 元素数据填充
|
// 处理表单 元素数据填充
|
||||||
const sysStoreTreeList = await sysStoreApi.sysStoreTree();
|
const sysStoreTreeList = await sysStoreApi.sysStoreTree()
|
||||||
basicInfoFormItems.forEach((item) => {
|
basicInfoFormItemsRef.value.forEach((item) => {
|
||||||
if (item.name === 'storeId') {
|
if (item.name === 'storeId') {
|
||||||
item.attrs.treeData = (sysStoreTreeList || []);
|
item.attrs.treeData = sysStoreTreeList || []
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -160,64 +162,61 @@
|
||||||
const onSubmitForm = () => {
|
const onSubmitForm = () => {
|
||||||
onSubmit({
|
onSubmit({
|
||||||
isDeep: true,
|
isDeep: true,
|
||||||
...formData
|
...formData,
|
||||||
|
detailList: productDetailData.value
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* 物料选择器 */
|
/* 物料选择器 */
|
||||||
const materielSelectorPlusRef = ref(null)
|
const materielSelectorPlusRef = ref(null)
|
||||||
let materialPackageData = {}
|
let materialPackageData = {}
|
||||||
|
|
||||||
// 打开物料选择
|
// 打开物料选择
|
||||||
const openMateriel = () => {
|
let materielIndex = {}
|
||||||
|
const openMateriel = (record, index) => {
|
||||||
materielSelectorPlusRef.value.showOpen()
|
materielSelectorPlusRef.value.showOpen()
|
||||||
|
materielIndex = index
|
||||||
}
|
}
|
||||||
|
|
||||||
// 物料选择器返回操作
|
// 物料选择器返回操作
|
||||||
const materielBackOk = (event) => {
|
const materielBackOk = async (event) => {
|
||||||
const materielId = event.materielSelectedRows[0].id;
|
productDetailData.value[materielIndex].productName = event.materielSelectedRows[0].name
|
||||||
if(materielId){
|
productDetailData.value[materielIndex].productNumber = event.materielSelectedRows[0].number
|
||||||
// 判断处理 物料-包装关系 数据信息
|
productDetailData.value[materielIndex].specification = event.materielSelectedRows[0].specification
|
||||||
let packageData = handleMaterialPackageData(materielId);
|
productDetailData.value[materielIndex].baseUnitName = event.materielSelectedRows[0].baseUnitName
|
||||||
|
productDetailData.value[materielIndex].batchNumber = event.materielSelectedRows[0].batchNumber
|
||||||
|
productDetailData.value[materielIndex].planAmount = event.materielSelectedRows[0].planAmount
|
||||||
|
|
||||||
|
// 获取单位列表
|
||||||
|
productDetailData.value[materielIndex].unitArr = await handleMaterialPackageData(event.materielSelectedRows[0].id)
|
||||||
|
// record.unitArr
|
||||||
}
|
|
||||||
// 下方无用可删除
|
|
||||||
formData.productName = event.materielSelectedRows[0].name // 物料名称
|
|
||||||
formData.productNumber = event.materielSelectedRows[0].number // 物料名称
|
|
||||||
formData.productId = event.materielSelectedRows[0].id // 物料id
|
|
||||||
// 选择物料自动带出基本单位和生产单位
|
|
||||||
formData.produceUnitName = event.materielSelectedRows[0].produceUnitName // 生产单位
|
|
||||||
formData.produceUnitId = event.materielSelectedRows[0].produceUnitId // 生产单位id
|
|
||||||
|
|
||||||
formData.baseUnitName = event.materielSelectedRows[0].baseUnitName // 生产单位
|
|
||||||
formData.baseUnitId = event.materielSelectedRows[0].baseUnitId // 生产单位id
|
|
||||||
|
|
||||||
formData.unitGroupId = event.materielSelectedRows[0].unitGroupId
|
|
||||||
formData.unitGroupName = event.materielSelectedRows[0].unitGroupName
|
|
||||||
formData.packageProportion = event.materielSelectedRows[0].packageProportion
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleMaterialPackageData = async(materielId)=>{
|
const handleMaterialPackageData = async (materielId) => {
|
||||||
let packageData = [];
|
let packageData = []
|
||||||
if(materielId){
|
if (materielId) {
|
||||||
packageData = materialPackageData[materielId];
|
packageData = materialPackageData[materielId]
|
||||||
if(!packageData || packageData.length === 0){
|
if (!packageData || packageData.length === 0) {
|
||||||
packageData = await materialApi.materialPackageData({
|
packageData = await materialApi.materialPackageData({
|
||||||
materialId: materielId
|
materialId: materielId
|
||||||
})
|
})
|
||||||
if(packageData && packageData.length > 0){
|
|
||||||
materialPackageData[materielId] = packageData;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return packageData;
|
return packageData.filter((item) => item.enabledState === 'ENABLE')
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户选择器
|
||||||
|
* */
|
||||||
|
const clientSelectorPlusRef = ref(null)
|
||||||
|
|
||||||
|
const openClient = () => {
|
||||||
|
clientSelectorPlusRef.value.showOpen()
|
||||||
|
}
|
||||||
|
|
||||||
|
const clientBackOk = (event) => {
|
||||||
|
formData.customerName = event.clientSelectedRows[0].name
|
||||||
|
formData.customerId = event.clientSelectedRows[0].id
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =================================== 商品明细 ============================*/
|
/* =================================== 商品明细 ============================*/
|
||||||
|
|
|
@ -122,8 +122,8 @@ const basicInfoFormItems = [
|
||||||
{
|
{
|
||||||
label: '备注:',
|
label: '备注:',
|
||||||
name: 'remarks',
|
name: 'remarks',
|
||||||
type: 'a-input',
|
type: 'a-textarea',
|
||||||
span: 12,
|
span: 24,
|
||||||
attrs: {
|
attrs: {
|
||||||
placeholder: '请输入备注',
|
placeholder: '请输入备注',
|
||||||
allowClear: true
|
allowClear: true
|
||||||
|
@ -184,4 +184,4 @@ const productDetailFormItems = [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
export { basicInfoFormRules, basicInfoFormItems, productDetailFormItems }
|
export { basicInfoFormRules, basicInfoFormItems, productDetailFormItems }
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
<!--
|
||||||
|
* @Description:
|
||||||
|
* @Author: CcSimple
|
||||||
|
* @Github: https://github.com/CcSimple
|
||||||
|
* @Date: 2023-02-16 14:35:38
|
||||||
|
* @LastEditors: CcSimple
|
||||||
|
* @LastEditTime: 2023-04-11 13:40:27
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="modal" v-if="show">
|
||||||
|
<div class="wrap" @click="close">
|
||||||
|
<div class="box">
|
||||||
|
<div class="modal-box__header" @click.stop="">预览</div>
|
||||||
|
<div class="preview-body" style="max-height: 50vh; overflow: auto">
|
||||||
|
<div class="container"></div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-box__footer">
|
||||||
|
<button class="primary" @click="close">确定</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import $ from 'jquery'
|
||||||
|
export default {
|
||||||
|
name: 'StartPreview',
|
||||||
|
setup() {
|
||||||
|
const show = ref(false)
|
||||||
|
const close = () => {
|
||||||
|
show.value = false
|
||||||
|
}
|
||||||
|
const showModal = (...html) => {
|
||||||
|
show.value = true
|
||||||
|
do {
|
||||||
|
setTimeout(() => {
|
||||||
|
$('.container').empty()
|
||||||
|
$('.container').html(html)
|
||||||
|
}, 200)
|
||||||
|
return
|
||||||
|
} while ($('.container').length <= 0)
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
show,
|
||||||
|
close,
|
||||||
|
showModal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/* 不同模板 间隙 */
|
||||||
|
.container .hiprint-printTemplate {
|
||||||
|
background: #fff;
|
||||||
|
border-bottom: 10px solid #ccc;
|
||||||
|
}
|
||||||
|
/* 批量打印 间隙 */
|
||||||
|
.container .hiprint-printTemplate .hiprint-printPanel:not(:last-of-type) {
|
||||||
|
border-bottom: 5px solid #ccc;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style scoped>
|
||||||
|
.preview-body {
|
||||||
|
background: #ccc;
|
||||||
|
padding: 14px 0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,342 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: "iconfont"; /* Project id 3559670 */
|
||||||
|
src: url("iconfont.woff2?t=1667531544868") format("woff2"),
|
||||||
|
url("iconfont.woff?t=1667531544868") format("woff"),
|
||||||
|
url("iconfont.ttf?t=1667531544868") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconfont {
|
||||||
|
font-family: "iconfont" !important;
|
||||||
|
font-size: 16px;
|
||||||
|
font-style: normal;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-edit-data:before {
|
||||||
|
content: "\e655";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-shimmer:before {
|
||||||
|
content: "\e6d6";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-origin:before {
|
||||||
|
content: "\e6ac";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-zIndex:before {
|
||||||
|
content: "\e603";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-structure:before {
|
||||||
|
content: "\ec6f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-list:before {
|
||||||
|
content: "\e742";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-grid:before {
|
||||||
|
content: "\e849";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-flow:before {
|
||||||
|
content: "\e611";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-switch:before {
|
||||||
|
content: "\e6f6";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-theme:before {
|
||||||
|
content: "\e644";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-element:before {
|
||||||
|
content: "\e615";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-pdf:before {
|
||||||
|
content: "\e67a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-browser:before {
|
||||||
|
content: "\e726";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-font-big:before {
|
||||||
|
content: "\eb04";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-font-small:before {
|
||||||
|
content: "\eb05";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-font-bold:before {
|
||||||
|
content: "\ec83";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-font-tiny:before {
|
||||||
|
content: "\e6c1";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-options:before {
|
||||||
|
content: "\e607";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-close:before {
|
||||||
|
content: "\e646";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-clone:before {
|
||||||
|
content: "\ec7a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-cut:before {
|
||||||
|
content: "\e643";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-preview:before {
|
||||||
|
content: "\e61c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-zoom-in:before {
|
||||||
|
content: "\e60f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-zoom-out:before {
|
||||||
|
content: "\e610";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-edit:before {
|
||||||
|
content: "\e6b9";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-paste:before {
|
||||||
|
content: "\e6c0";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-copy:before {
|
||||||
|
content: "\e6c2";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-unlock:before {
|
||||||
|
content: "\e6e7";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-lock:before {
|
||||||
|
content: "\e6e8";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-zIndex-plus:before {
|
||||||
|
content: "\e715";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-zIndex-minus:before {
|
||||||
|
content: "\e716";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-zIndex-top:before {
|
||||||
|
content: "\e71f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-sigh:before {
|
||||||
|
content: "\e724";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-ask:before {
|
||||||
|
content: "\e725";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-dev-code:before {
|
||||||
|
content: "\e733";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-bug:before {
|
||||||
|
content: "\e73f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-zIndex-bottom:before {
|
||||||
|
content: "\e71d";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-new:before {
|
||||||
|
content: "\e64d";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-clear:before {
|
||||||
|
content: "\e62d";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-base:before {
|
||||||
|
content: "\e7d0";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-export:before {
|
||||||
|
content: "\eabf";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-import:before {
|
||||||
|
content: "\eac0";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-add:before {
|
||||||
|
content: "\eaf3";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-printer:before {
|
||||||
|
content: "\eabe";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-save:before {
|
||||||
|
content: "\eabd";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-more:before {
|
||||||
|
content: "\e625";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-menu:before {
|
||||||
|
content: "\e628";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-nav-right:before {
|
||||||
|
content: "\e629";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-nav-up:before {
|
||||||
|
content: "\e62a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-nav-left:before {
|
||||||
|
content: "\e62b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-nav-down:before {
|
||||||
|
content: "\e62c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-setting:before {
|
||||||
|
content: "\e62e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-delete:before {
|
||||||
|
content: "\e630";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-undo:before {
|
||||||
|
content: "\e631";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-redo:before {
|
||||||
|
content: "\e632";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-refresh:before {
|
||||||
|
content: "\e634";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-history:before {
|
||||||
|
content: "\e635";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-html:before {
|
||||||
|
content: "\e633";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-longText:before {
|
||||||
|
content: "\e64c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-table:before {
|
||||||
|
content: "\ec15";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-qrcode:before {
|
||||||
|
content: "\e642";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-image:before {
|
||||||
|
content: "\e8ba";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-barcode:before {
|
||||||
|
content: "\eb64";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-text:before {
|
||||||
|
content: "\e60b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-vline:before {
|
||||||
|
content: "\e63a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-oval:before {
|
||||||
|
content: "\eb99";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-rect:before {
|
||||||
|
content: "\e620";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-hline:before {
|
||||||
|
content: "\e60a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-print-c:before {
|
||||||
|
content: "\e602";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-print:before {
|
||||||
|
content: "\e601";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-c:before {
|
||||||
|
content: "\e600";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-vertical:before {
|
||||||
|
content: "\e706";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-distributeHor:before {
|
||||||
|
content: "\e707";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-right:before {
|
||||||
|
content: "\e708";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-left:before {
|
||||||
|
content: "\e709";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-distributeVer:before {
|
||||||
|
content: "\e70f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-bottom:before {
|
||||||
|
content: "\e710";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-top:before {
|
||||||
|
content: "\e711";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-horizontal:before {
|
||||||
|
content: "\e712";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-rotate:before {
|
||||||
|
content: "\e66f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-butongbu:before {
|
||||||
|
content: "\e636";
|
||||||
|
}
|
||||||
|
|
||||||
|
.sv-synchronization:before {
|
||||||
|
content: "\e676";
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,174 @@
|
||||||
|
/* 字体样式 */
|
||||||
|
/*@import "./iconfont.css";*/
|
||||||
|
|
||||||
|
/* 定义全局样式 */
|
||||||
|
/* 在 main.js 入库文件引入 */
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* scrollbar */
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
height: 4px;
|
||||||
|
width: 4px;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-corner {
|
||||||
|
height: 4px;
|
||||||
|
width: 4px;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: purple;
|
||||||
|
border-radius: 2px;
|
||||||
|
background-image: -webkit-linear-gradient(
|
||||||
|
45deg,
|
||||||
|
rgba(255, 255, 255, 0.2) 25%,
|
||||||
|
transparent 25%,
|
||||||
|
transparent 50%,
|
||||||
|
rgba(255, 255, 255, 0.2) 50%,
|
||||||
|
rgba(255, 255, 255, 0.2) 75%,
|
||||||
|
transparent 75%,
|
||||||
|
transparent
|
||||||
|
);
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: purple;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* flex */
|
||||||
|
.flex-row {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.flex-col {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.flex-wrap {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
.align-center {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.justify-center {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-1 {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.flex-2 {
|
||||||
|
flex: 2;
|
||||||
|
}
|
||||||
|
.flex-3 {
|
||||||
|
flex: 3;
|
||||||
|
}
|
||||||
|
.flex-4 {
|
||||||
|
flex: 4;
|
||||||
|
}
|
||||||
|
.flex-5 {
|
||||||
|
flex: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ml-10 {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
.mr-10 {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.mt-10 {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.mb-10 {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* button 样式 为了好看点 */
|
||||||
|
button {
|
||||||
|
padding: 10px;
|
||||||
|
min-width: 40px;
|
||||||
|
color: white;
|
||||||
|
opacity: 0.9;
|
||||||
|
cursor: pointer;
|
||||||
|
border-width: 0;
|
||||||
|
border: 1px solid #d9d9d9;
|
||||||
|
}
|
||||||
|
button:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
button i {
|
||||||
|
font-size: 16px !important;
|
||||||
|
}
|
||||||
|
.circle,
|
||||||
|
.circle-4 {
|
||||||
|
border-radius: 4px !important;
|
||||||
|
}
|
||||||
|
.circle-10 {
|
||||||
|
border-radius: 10px !important;
|
||||||
|
}
|
||||||
|
/* 按钮颜色 */
|
||||||
|
.primary {
|
||||||
|
background: purple;
|
||||||
|
}
|
||||||
|
.info {
|
||||||
|
color: #000;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
.info:hover {
|
||||||
|
color: purple;
|
||||||
|
border-color: purple;
|
||||||
|
}
|
||||||
|
.secondary {
|
||||||
|
background: #1976d2;
|
||||||
|
}
|
||||||
|
.warning {
|
||||||
|
background: #d32f2f;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* modal */
|
||||||
|
.modal {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.modal .mask {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 1000;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #00000073;
|
||||||
|
}
|
||||||
|
.modal .wrap {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 1000;
|
||||||
|
overflow: auto;
|
||||||
|
background-color: #00000073;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
.modal .wrap .box {
|
||||||
|
position: relative;
|
||||||
|
margin: 10% auto;
|
||||||
|
width: 40%;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
z-index: 1001;
|
||||||
|
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
.modal-box__header {
|
||||||
|
padding: 10px 14px;
|
||||||
|
border-bottom: 1px solid #e9e9e9;
|
||||||
|
}
|
||||||
|
.modal-box__footer {
|
||||||
|
text-align: end;
|
||||||
|
}
|
||||||
|
.modal-box__footer button {
|
||||||
|
min-width: 100px;
|
||||||
|
}
|
||||||
|
.modal-box__footer button:not(:last-child) {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
|
@ -0,0 +1,108 @@
|
||||||
|
/*
|
||||||
|
* @Description:
|
||||||
|
* @Author: CcSimple
|
||||||
|
* @Github: https://github.com/CcSimple
|
||||||
|
* @Date: 2023-02-09 13:32:39
|
||||||
|
* @LastEditors: CcSimple
|
||||||
|
* @LastEditTime: 2023-02-09 23:38:03
|
||||||
|
*/
|
||||||
|
import { reactive, computed, toRefs } from "vue";
|
||||||
|
import { getHiprintPrintTemplate } from "../utils/template-helper";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vue3 组合式函数
|
||||||
|
* 把一些逻辑抽离出来,方便复用
|
||||||
|
* 返回 使用方 可用的方法和数据
|
||||||
|
*/
|
||||||
|
export function usePaper(key) {
|
||||||
|
// 数据
|
||||||
|
const state = reactive({
|
||||||
|
curPaper: {
|
||||||
|
type: "A4",
|
||||||
|
width: 210,
|
||||||
|
height: 296.6,
|
||||||
|
},
|
||||||
|
paperTypes: {
|
||||||
|
A3: {
|
||||||
|
width: 420,
|
||||||
|
height: 296.6,
|
||||||
|
},
|
||||||
|
A4: {
|
||||||
|
width: 210,
|
||||||
|
height: 296.6,
|
||||||
|
},
|
||||||
|
A5: {
|
||||||
|
width: 210,
|
||||||
|
height: 147.6,
|
||||||
|
},
|
||||||
|
B3: {
|
||||||
|
width: 500,
|
||||||
|
height: 352.6,
|
||||||
|
},
|
||||||
|
B4: {
|
||||||
|
width: 250,
|
||||||
|
height: 352.6,
|
||||||
|
},
|
||||||
|
B5: {
|
||||||
|
width: 250,
|
||||||
|
height: 175.6,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// 自定义纸张
|
||||||
|
paperPopVisible: false,
|
||||||
|
paperWidth: "220",
|
||||||
|
paperHeight: "80",
|
||||||
|
});
|
||||||
|
// 计算属性
|
||||||
|
const curPaperType = computed(() => {
|
||||||
|
let type = "other";
|
||||||
|
let types = state.paperTypes;
|
||||||
|
for (const key in types) {
|
||||||
|
let item = types[key];
|
||||||
|
let { width, height } = state.curPaper;
|
||||||
|
if (item.width === width && item.height === height) {
|
||||||
|
type = key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
});
|
||||||
|
const tp = () => {
|
||||||
|
return getHiprintPrintTemplate(key);
|
||||||
|
};
|
||||||
|
// 方法
|
||||||
|
const showPaperPop = () => {
|
||||||
|
state.paperPopVisible = true;
|
||||||
|
};
|
||||||
|
const hidePaperPop = () => {
|
||||||
|
state.paperPopVisible = false;
|
||||||
|
};
|
||||||
|
const setPaper = (type, value) => {
|
||||||
|
try {
|
||||||
|
if (Object.keys(state.paperTypes).includes(type)) {
|
||||||
|
state.curPaper = { type: type, width: value.width, height: value.height };
|
||||||
|
tp().setPaper(value.width, value.height);
|
||||||
|
} else {
|
||||||
|
state.curPaper = { type: "other", width: value.width, height: value.height };
|
||||||
|
tp().setPaper(value.width, value.height);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
alert(`操作失败: ${error}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const setPaperOther = () => {
|
||||||
|
let value = {};
|
||||||
|
value.width = state.paperWidth;
|
||||||
|
value.height = state.paperHeight;
|
||||||
|
state.paperPopVisible = false;
|
||||||
|
setPaper("other", value);
|
||||||
|
};
|
||||||
|
// 暴露给使用方
|
||||||
|
return {
|
||||||
|
...toRefs(state),
|
||||||
|
curPaperType,
|
||||||
|
showPaperPop,
|
||||||
|
hidePaperPop,
|
||||||
|
setPaper,
|
||||||
|
setPaperOther,
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* @Description:
|
||||||
|
* @Author: CcSimple
|
||||||
|
* @Github: https://github.com/CcSimple
|
||||||
|
* @Date: 2023-02-09 13:32:39
|
||||||
|
* @LastEditors: CcSimple
|
||||||
|
* @LastEditTime: 2023-02-10 16:00:54
|
||||||
|
*/
|
||||||
|
import { reactive, toRefs } from "vue";
|
||||||
|
import { getHiprintPrintTemplate } from "../utils/template-helper";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vue3 组合式函数
|
||||||
|
* 把一些逻辑抽离出来,方便复用
|
||||||
|
* 返回 使用方 可用的方法和数据
|
||||||
|
*/
|
||||||
|
export function useZoom(key) {
|
||||||
|
// 数据
|
||||||
|
const state = reactive({
|
||||||
|
scaleValue: 1,
|
||||||
|
scaleMax: 5,
|
||||||
|
scaleMin: 0.5,
|
||||||
|
});
|
||||||
|
// 获取 template
|
||||||
|
const tp = () => {
|
||||||
|
return getHiprintPrintTemplate(key);
|
||||||
|
};
|
||||||
|
// 方法
|
||||||
|
const changeScale = (big) => {
|
||||||
|
let scaleValue = state.scaleValue;
|
||||||
|
if (big) {
|
||||||
|
scaleValue += 0.1;
|
||||||
|
if (scaleValue > state.scaleMax) scaleValue = 5;
|
||||||
|
} else {
|
||||||
|
scaleValue -= 0.1;
|
||||||
|
if (scaleValue < state.scaleMin) scaleValue = 0.5;
|
||||||
|
}
|
||||||
|
if (tp()) {
|
||||||
|
// scaleValue: 放大缩小值, false: 不保存(不传也一样), 如果传 true, 打印时也会放大
|
||||||
|
tp().zoom(scaleValue);
|
||||||
|
state.scaleValue = scaleValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// 暴露给使用方
|
||||||
|
return {
|
||||||
|
...toRefs(state),
|
||||||
|
changeScale,
|
||||||
|
};
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,127 @@
|
||||||
|
/*
|
||||||
|
* @Description:
|
||||||
|
* @Author: CcSimple
|
||||||
|
* @Github: https://github.com/CcSimple
|
||||||
|
* @Date: 2023-02-09 10:40:26
|
||||||
|
* @LastEditors: CcSimple
|
||||||
|
* @LastEditTime: 2023-02-09 11:37:21
|
||||||
|
*/
|
||||||
|
import { hiprint } from 'vue-plugin-hiprint'
|
||||||
|
export const provider1 = function (options) {
|
||||||
|
var addElementTypes = function (context) {
|
||||||
|
context.removePrintElementTypes('providerModule1')
|
||||||
|
context.addPrintElementTypes('providerModule1', [
|
||||||
|
new hiprint.PrintElementTypeGroup('', [
|
||||||
|
// options.config,
|
||||||
|
{
|
||||||
|
tid: 'providerModule1.text',
|
||||||
|
title: '文本',
|
||||||
|
data: '文本',
|
||||||
|
type: 'text',
|
||||||
|
options: {
|
||||||
|
testData: '文本',
|
||||||
|
height: 17,
|
||||||
|
fontSize: 16.5,
|
||||||
|
fontWeight: '700',
|
||||||
|
textAlign: 'center',
|
||||||
|
hideTitle: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ tid: 'providerModule1.image', title: '图片', data: '', type: 'image' },
|
||||||
|
{
|
||||||
|
tid: 'providerModule1.barcode',
|
||||||
|
title: '条形码',
|
||||||
|
data: 'XS888888888',
|
||||||
|
type: 'text',
|
||||||
|
options: {
|
||||||
|
field: 'barcode',
|
||||||
|
testData: 'XS888888888',
|
||||||
|
height: 32,
|
||||||
|
fontSize: 12,
|
||||||
|
lineHeight: 18,
|
||||||
|
textAlign: 'left',
|
||||||
|
textType: 'barcode'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
tid: 'providerModule1.qrcode',
|
||||||
|
title: '二维码',
|
||||||
|
data: 'XS888888888',
|
||||||
|
type: 'text',
|
||||||
|
options: {
|
||||||
|
field: 'qrcode',
|
||||||
|
testData: 'XS888888888',
|
||||||
|
height: 32,
|
||||||
|
fontSize: 12,
|
||||||
|
lineHeight: 18,
|
||||||
|
textType: 'qrcode'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// tid: 'providerModule1.type',
|
||||||
|
// title: '单据类型',
|
||||||
|
// data: '单据类型',
|
||||||
|
// type: 'text',
|
||||||
|
// options: {
|
||||||
|
// testData: '单据类型',
|
||||||
|
// height: 16,
|
||||||
|
// fontSize: 15,
|
||||||
|
// fontWeight: '700',
|
||||||
|
// textAlign: 'center',
|
||||||
|
// hideTitle: true
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
tid: 'providerModule1.date',
|
||||||
|
title: '日期',
|
||||||
|
data: '2020-01-01',
|
||||||
|
type: 'text',
|
||||||
|
options: {
|
||||||
|
field: 'date',
|
||||||
|
testData: '2020-01-01',
|
||||||
|
height: 16,
|
||||||
|
fontSize: 6.75,
|
||||||
|
fontWeight: '700',
|
||||||
|
textAlign: 'left',
|
||||||
|
textContentVerticalAlign: 'middle'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
])
|
||||||
|
// new hiprint.PrintElementTypeGroup('客户', [
|
||||||
|
// {
|
||||||
|
// tid: 'providerModule1.khname',
|
||||||
|
// title: '客户名称',
|
||||||
|
// data: '高级客户',
|
||||||
|
// type: 'text',
|
||||||
|
// options: {
|
||||||
|
// field: 'name',
|
||||||
|
// testData: '高级客户',
|
||||||
|
// height: 16,
|
||||||
|
// fontSize: 6.75,
|
||||||
|
// fontWeight: '700',
|
||||||
|
// textAlign: 'left',
|
||||||
|
// textContentVerticalAlign: 'middle'
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// tid: 'providerModule1.tel',
|
||||||
|
// title: '客户电话',
|
||||||
|
// data: '18888888888',
|
||||||
|
// type: 'text',
|
||||||
|
// options: {
|
||||||
|
// field: 'tel',
|
||||||
|
// testData: '18888888888',
|
||||||
|
// height: 16,
|
||||||
|
// fontSize: 6.75,
|
||||||
|
// fontWeight: '700',
|
||||||
|
// textAlign: 'left',
|
||||||
|
// textContentVerticalAlign: 'middle'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// ])
|
||||||
|
])
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
addElementTypes: addElementTypes
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,90 @@
|
||||||
|
/*
|
||||||
|
* @Description:
|
||||||
|
* @Author: CcSimple
|
||||||
|
* @Github: https://github.com/CcSimple
|
||||||
|
* @Date: 2023-02-09 10:40:26
|
||||||
|
* @LastEditors: CcSimple
|
||||||
|
* @LastEditTime: 2023-02-09 10:50:02
|
||||||
|
*/
|
||||||
|
import { hiprint } from 'vue-plugin-hiprint'
|
||||||
|
export const provider2 = function (options) {
|
||||||
|
console.log(options)
|
||||||
|
var addElementTypes = function (context) {
|
||||||
|
context.removePrintElementTypes('providerModule2')
|
||||||
|
context.addPrintElementTypes('providerModule2', [
|
||||||
|
new hiprint.PrintElementTypeGroup('', [
|
||||||
|
{
|
||||||
|
tid: 'providerModule2.table',
|
||||||
|
title: '表格',
|
||||||
|
type: 'table',
|
||||||
|
options: {
|
||||||
|
field: 'table',
|
||||||
|
fields: [
|
||||||
|
{ text: '名称', field: 'NAME' },
|
||||||
|
{ text: '数量', field: 'SL' },
|
||||||
|
{ text: '规格', field: 'GG' },
|
||||||
|
{ text: '条码', field: 'TM' },
|
||||||
|
{ text: '单价', field: 'DJ' },
|
||||||
|
{ text: '金额', field: 'JE' },
|
||||||
|
{ text: '备注', field: 'DETAIL' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
columns: [
|
||||||
|
[
|
||||||
|
{ title: '名称', align: 'center', field: 'NAME', width: 100 },
|
||||||
|
{ title: '数量', align: 'center', field: 'SL', width: 100 },
|
||||||
|
{ title: '条码', align: 'center', field: 'TM', width: 100 },
|
||||||
|
{ title: '规格', align: 'center', field: 'GG', width: 100 },
|
||||||
|
{ title: '单价', align: 'center', field: 'DJ', width: 100 },
|
||||||
|
{ title: '金额', align: 'center', field: 'JE', width: 100 },
|
||||||
|
{ title: '备注', align: 'center', field: 'DETAIL', width: 100 }
|
||||||
|
]
|
||||||
|
],
|
||||||
|
footerFormatter: function (options, rows, data, currentPageGridRowsData) {
|
||||||
|
console.log(currentPageGridRowsData)
|
||||||
|
if (data && data['totalCap']) {
|
||||||
|
return `<td style="padding:0 10px" colspan="100">${'应收金额大写: ' + data['totalCap']}</td>`
|
||||||
|
}
|
||||||
|
return '<td style="padding:0 10px" colspan="100">应收金额大写: </td>'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ tid: 'providerModule2.customText', title: '文本', customText: '自定义文本', custom: true, type: 'text' },
|
||||||
|
{
|
||||||
|
tid: 'providerModule2.longText',
|
||||||
|
title: '长文本',
|
||||||
|
type: 'longText',
|
||||||
|
options: {
|
||||||
|
field: 'test.longText',
|
||||||
|
width: 200,
|
||||||
|
testData: '长文本分页/不分页测试'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]),
|
||||||
|
new hiprint.PrintElementTypeGroup('', [
|
||||||
|
{
|
||||||
|
tid: 'providerModule2.hline',
|
||||||
|
title: '横线',
|
||||||
|
type: 'hline'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
tid: 'providerModule2.vline',
|
||||||
|
title: '竖线',
|
||||||
|
type: 'vline'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
tid: 'providerModule2.rect',
|
||||||
|
title: '矩形',
|
||||||
|
type: 'rect'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
tid: 'providerModule2.oval',
|
||||||
|
title: '椭圆',
|
||||||
|
type: 'oval'
|
||||||
|
}
|
||||||
|
])
|
||||||
|
])
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
addElementTypes: addElementTypes
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,365 @@
|
||||||
|
export default {
|
||||||
|
panels: [
|
||||||
|
{
|
||||||
|
index: 0,
|
||||||
|
height: 297,
|
||||||
|
width: 210,
|
||||||
|
paperHeader: 49.5,
|
||||||
|
paperFooter: 780,
|
||||||
|
printElements: [
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 175.5,
|
||||||
|
top: 10.5,
|
||||||
|
height: 27,
|
||||||
|
width: 259,
|
||||||
|
title: 'HiPrint自定义模块打印插件',
|
||||||
|
fontSize: 19,
|
||||||
|
fontWeight: '600',
|
||||||
|
textAlign: 'center',
|
||||||
|
lineHeight: 26,
|
||||||
|
coordinateSync: true,
|
||||||
|
widthHeightSync: true,
|
||||||
|
draggable: false
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 60, top: 27, height: 13, width: 52, title: '页眉线', textAlign: 'center' },
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 25.5, top: 57, height: 705, width: 9, fixed: true, borderStyle: 'dotted' },
|
||||||
|
printElementType: { type: 'vline' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 60, top: 61.5, height: 48, width: 87, src: '', fit: 'contain' },
|
||||||
|
printElementType: { title: '图片', type: 'image' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 153,
|
||||||
|
top: 64.5,
|
||||||
|
height: 39,
|
||||||
|
width: 276,
|
||||||
|
title:
|
||||||
|
'二维码以及条形码均采用svg格式打印。不同打印机打印不会造成失真。图片打印:不同DPI打印可能会导致失真,',
|
||||||
|
fontFamily: '微软雅黑',
|
||||||
|
textAlign: 'center',
|
||||||
|
lineHeight: 18
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 457.5,
|
||||||
|
top: 79.5,
|
||||||
|
height: 13,
|
||||||
|
width: 120,
|
||||||
|
title: '姓名',
|
||||||
|
field: 'name',
|
||||||
|
testData: '古力娜扎',
|
||||||
|
color: '#f00808',
|
||||||
|
textDecoration: 'underline',
|
||||||
|
textAlign: 'center',
|
||||||
|
fields: [
|
||||||
|
{ text: 'id', field: 'id' },
|
||||||
|
{ text: '姓名', field: 'name' },
|
||||||
|
{ text: '性别', field: 'gender' },
|
||||||
|
{ text: '数量', field: 'count' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
printElementType: { title: '文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 483,
|
||||||
|
top: 124.5,
|
||||||
|
height: 43,
|
||||||
|
width: 51,
|
||||||
|
title: '123456789',
|
||||||
|
textType: 'qrcode'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 285,
|
||||||
|
top: 130.5,
|
||||||
|
height: 34,
|
||||||
|
width: 175,
|
||||||
|
title: '123456789',
|
||||||
|
fontFamily: '微软雅黑',
|
||||||
|
textAlign: 'center',
|
||||||
|
textType: 'barcode'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 60,
|
||||||
|
top: 132,
|
||||||
|
height: 19,
|
||||||
|
width: 213,
|
||||||
|
title: '所有打印元素都可已拖拽的方式来改变元素大小',
|
||||||
|
fontFamily: '微软雅黑',
|
||||||
|
textAlign: 'center',
|
||||||
|
lineHeight: 18
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 153,
|
||||||
|
top: 189,
|
||||||
|
height: 13,
|
||||||
|
width: 238,
|
||||||
|
title: '单击元素,右侧可自定义元素属性',
|
||||||
|
textAlign: 'center',
|
||||||
|
fontFamily: '微软雅黑'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 60, top: 190.5, height: 13, width: 51, title: '横线', textAlign: 'center' },
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 415.5,
|
||||||
|
top: 190.5,
|
||||||
|
height: 13,
|
||||||
|
width: 164,
|
||||||
|
title: '可以配置各属性的默认值',
|
||||||
|
textAlign: 'center',
|
||||||
|
fontFamily: '微软雅黑'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 60, top: 214.5, height: 10, width: 475.5 },
|
||||||
|
printElementType: { title: '横线', type: 'hline' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 235.5,
|
||||||
|
top: 220.5,
|
||||||
|
height: 32,
|
||||||
|
width: 342,
|
||||||
|
title:
|
||||||
|
'自定义表格:用户可左键选中表头,右键查看可操作项,操作类似Excel,双击表头单元格可进行编辑。内容:title#field',
|
||||||
|
fontFamily: '微软雅黑',
|
||||||
|
textAlign: 'center',
|
||||||
|
lineHeight: 15
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 156,
|
||||||
|
top: 265.5,
|
||||||
|
height: 13,
|
||||||
|
width: 94,
|
||||||
|
title: '表头列大小可拖动',
|
||||||
|
fontFamily: '微软雅黑',
|
||||||
|
textAlign: 'center'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 60,
|
||||||
|
top: 265.5,
|
||||||
|
height: 13,
|
||||||
|
width: 90,
|
||||||
|
title: '红色区域可拖动',
|
||||||
|
fontFamily: '微软雅黑',
|
||||||
|
textAlign: 'center'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 60,
|
||||||
|
top: 285,
|
||||||
|
height: 56,
|
||||||
|
width: 511.5,
|
||||||
|
field: 'table',
|
||||||
|
tableFooterRepeat: '',
|
||||||
|
fields: [
|
||||||
|
{ text: 'id', field: 'id' },
|
||||||
|
{ text: '姓名', field: 'name' },
|
||||||
|
{ text: '性别', field: 'gender' },
|
||||||
|
{ text: '数量', field: 'count' }
|
||||||
|
],
|
||||||
|
columns: [
|
||||||
|
[
|
||||||
|
{ width: 85.25, colspan: 1, rowspan: 1, checked: true },
|
||||||
|
{
|
||||||
|
title: '性别',
|
||||||
|
field: 'gender',
|
||||||
|
width: 85.25,
|
||||||
|
colspan: 1,
|
||||||
|
rowspan: 1,
|
||||||
|
checked: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '姓名',
|
||||||
|
field: 'name',
|
||||||
|
width: 85.25,
|
||||||
|
align: 'center',
|
||||||
|
colspan: 1,
|
||||||
|
rowspan: 1,
|
||||||
|
checked: true,
|
||||||
|
tableSummary: 'count'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '数量',
|
||||||
|
field: 'count',
|
||||||
|
width: 85.25,
|
||||||
|
align: 'center',
|
||||||
|
colspan: 1,
|
||||||
|
rowspan: 1,
|
||||||
|
checked: true,
|
||||||
|
tableSummary: 'sum'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
width: 85.25,
|
||||||
|
colspan: 1,
|
||||||
|
rowspan: 1,
|
||||||
|
checked: true
|
||||||
|
},
|
||||||
|
{ width: 85.25, colspan: 1, rowspan: 1, checked: true }
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
printElementType: {
|
||||||
|
title: '表格',
|
||||||
|
type: 'table'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 21,
|
||||||
|
top: 346.5,
|
||||||
|
height: 61.5,
|
||||||
|
width: 15,
|
||||||
|
title: '装订线',
|
||||||
|
lineHeight: 18,
|
||||||
|
fixed: true,
|
||||||
|
contentPaddingTop: 3.75,
|
||||||
|
backgroundColor: '#ffffff'
|
||||||
|
},
|
||||||
|
printElementType: { type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 225,
|
||||||
|
top: 355,
|
||||||
|
height: 13,
|
||||||
|
width: 346.5,
|
||||||
|
title: '自定义模块:主要为开发人员设计,能够快速,简单,实现自己功能',
|
||||||
|
textAlign: 'center'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 60, top: 370.5, height: 18, width: 79, title: '配置项表格', textAlign: 'center' },
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 225,
|
||||||
|
top: 385.5,
|
||||||
|
height: 38,
|
||||||
|
width: 346.5,
|
||||||
|
title: '配置模块:主要为客户使用,开发人员可以配置属性,字段,标题等,客户直接使用,配置模块请参考实例2',
|
||||||
|
fontFamily: '微软雅黑',
|
||||||
|
lineHeight: 15,
|
||||||
|
textAlign: 'center',
|
||||||
|
color: '#d93838'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 60,
|
||||||
|
top: 487.5,
|
||||||
|
height: 13,
|
||||||
|
width: 123,
|
||||||
|
title: '长文本会自动分页',
|
||||||
|
textAlign: 'center'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 60, top: 507, height: 40, width: 511.5, field: 'longText' },
|
||||||
|
printElementType: { title: '长文', type: 'longText' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 475.5, top: 565.5, height: 100, width: 100 },
|
||||||
|
printElementType: { title: '矩形', type: 'rect' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 174, top: 568.5, height: 13, width: 90, title: '竖线', textAlign: 'center' },
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 60, top: 574.5, height: 100, width: 10 },
|
||||||
|
printElementType: { title: '竖线', type: 'vline' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 210, top: 604.5, height: 13, width: 120, title: '横线', textAlign: 'center' },
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 130.5, top: 625.5, height: 10, width: 277 },
|
||||||
|
printElementType: { title: '横线', type: 'hline' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 364.5,
|
||||||
|
top: 649.5,
|
||||||
|
height: 13,
|
||||||
|
width: 101,
|
||||||
|
title: '矩形',
|
||||||
|
textAlign: 'center'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 525, top: 784.5, height: 13, width: 63, title: '页尾线', textAlign: 'center' },
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: { left: 12, top: 786, height: 49, width: 49 },
|
||||||
|
printElementType: { title: 'html', type: 'html' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 75,
|
||||||
|
top: 790.5,
|
||||||
|
height: 13,
|
||||||
|
width: 137,
|
||||||
|
title: '红色原型是自动定义的Html',
|
||||||
|
textAlign: 'center'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
options: {
|
||||||
|
left: 334.5,
|
||||||
|
top: 810,
|
||||||
|
height: 13,
|
||||||
|
width: 205,
|
||||||
|
title: '页眉线已上。页尾下以下每页都会重复打印',
|
||||||
|
textAlign: 'center'
|
||||||
|
},
|
||||||
|
printElementType: { title: '自定义文本', type: 'text' }
|
||||||
|
}
|
||||||
|
],
|
||||||
|
paperNumberLeft: 565.5,
|
||||||
|
paperNumberTop: 819
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* @Description:
|
||||||
|
* @Author: CcSimple
|
||||||
|
* @Github: https://github.com/CcSimple
|
||||||
|
* @Date: 2023-02-09 23:26:18
|
||||||
|
* @LastEditors: CcSimple
|
||||||
|
* @LastEditTime: 2023-02-09 23:35:20
|
||||||
|
*/
|
||||||
|
import { hiprint } from "vue-plugin-hiprint";
|
||||||
|
|
||||||
|
const templateMap = {};
|
||||||
|
|
||||||
|
export function newHiprintPrintTemplate(key, options) {
|
||||||
|
let template = new hiprint.PrintTemplate(options);
|
||||||
|
templateMap[key] = template;
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getHiprintPrintTemplate(key) {
|
||||||
|
return templateMap[key];
|
||||||
|
}
|
|
@ -226,14 +226,14 @@ export const modalColumns = [
|
||||||
align: 'center',
|
align: 'center',
|
||||||
ellipsis: true
|
ellipsis: true
|
||||||
},
|
},
|
||||||
{
|
/*{
|
||||||
title: '打码时间',
|
title: '打码时间',
|
||||||
dataIndex: 'subAmount',
|
dataIndex: 'subAmount',
|
||||||
width: 200,
|
width: 200,
|
||||||
resizable: true,
|
resizable: true,
|
||||||
align: 'center',
|
align: 'center',
|
||||||
ellipsis: true
|
ellipsis: true
|
||||||
},
|
},*/
|
||||||
{
|
{
|
||||||
title: '扫描时间',
|
title: '扫描时间',
|
||||||
dataIndex: 'scanTime',
|
dataIndex: 'scanTime',
|
||||||
|
|
|
@ -41,12 +41,14 @@
|
||||||
<!-- 产看条码 -->
|
<!-- 产看条码 -->
|
||||||
<a-modal v-model:open="visible" title="查看条码" width="80%">
|
<a-modal v-model:open="visible" title="查看条码" width="80%">
|
||||||
<a-table
|
<a-table
|
||||||
|
style="height: 500px"
|
||||||
:columns="modalColumns"
|
:columns="modalColumns"
|
||||||
:data-source="scanTableList"
|
:data-source="scanTableList"
|
||||||
:pagination="false"
|
:pagination="false"
|
||||||
:scroll="{ x: 100 }"
|
:scroll="{ x: 100, y: 420 }"
|
||||||
:row-key="(record) => record.id"
|
:row-key="(record) => record.id"
|
||||||
@expand="columnsExpand"
|
@expand="columnsExpand"
|
||||||
|
bordered
|
||||||
/>
|
/>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
</template>
|
</template>
|
||||||
|
@ -110,35 +112,38 @@
|
||||||
// 查看条码
|
// 查看条码
|
||||||
let visible = ref(false)
|
let visible = ref(false)
|
||||||
let scanTableList = ref([])
|
let scanTableList = ref([])
|
||||||
|
let recordTable = {}
|
||||||
const handleOpenViewScan = (record) => {
|
const handleOpenViewScan = (record) => {
|
||||||
|
recordTable = record
|
||||||
visible.value = true
|
visible.value = true
|
||||||
producePackageBarcodeApi
|
produceReportApi
|
||||||
.producePackageBarcodeTreeList({
|
.produceReportTreeList({
|
||||||
reportDetailId: record.id,
|
docsDetailId: record.id,
|
||||||
reportId: record.reportId
|
docsId: record.reportId
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
scanTableList.value = res
|
scanTableList.value = res
|
||||||
scanTableList.value.forEach((item) => {
|
scanTableList.value.forEach((item) => {
|
||||||
// if (item.subAmount > 0) item.children = []
|
if (item.subAmount && item.subAmount > 0) item.children = []
|
||||||
item.children = []
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const columnsExpand = (expanded, record) => {
|
const columnsExpand = (expanded, record) => {
|
||||||
if (expanded) {
|
if (expanded) {
|
||||||
producePackageBarcodeApi
|
produceReportApi
|
||||||
.producePackageBarcodeTreeChildrenList({
|
.produceReportTreeChildrenList({
|
||||||
reportDetailId: record.reportDetailId,
|
docsDetailId: recordTable.id,
|
||||||
reportId: record.reportId,
|
docsId: record.docsId,
|
||||||
parentBarcode: record.barcode
|
parentBarcode: record.barcode
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
record.children = res
|
record.children = res
|
||||||
record.children.forEach((item) => {
|
record.children &&
|
||||||
item.children = []
|
record.children.forEach((item) => {
|
||||||
})
|
if (item.subAmount && item.subAmount > 0)
|
||||||
|
item.children = []
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue