feat: add delivery notice list
This commit is contained in:
@@ -22,10 +22,7 @@ const devWebpackConfig = merge(baseWebpackConfig, {
|
||||
},
|
||||
devtool: 'eval-cheap-module-source-map',
|
||||
cache: {
|
||||
type: 'filesystem',
|
||||
buildDependencies: {
|
||||
config: [__filename]
|
||||
}
|
||||
type: 'memory'
|
||||
},
|
||||
devServer: {
|
||||
https: true,
|
||||
|
||||
110
db_backups/add_delivery_notice_list_menu_20260626.sql
Normal file
110
db_backups/add_delivery_notice_list_menu_20260626.sql
Normal file
@@ -0,0 +1,110 @@
|
||||
USE [YL_MESDB]
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @Title nvarchar(100) = N'发货通知列表';
|
||||
DECLARE @Path nvarchar(300) = N'DeliveryNoticeList/index';
|
||||
DECLARE @Component nvarchar(300) = N'/ProductionManagement/DeliveryNoticeList/index';
|
||||
DECLARE @Name nvarchar(100) = N'DeliveryNoticeList';
|
||||
DECLARE @Icon nvarchar(100) = N'DocumentImport';
|
||||
DECLARE @TargetRole int = NULL;
|
||||
|
||||
IF OBJECT_ID(N'dbo.登录基础数据_二级菜单', N'U') IS NULL
|
||||
BEGIN
|
||||
RAISERROR(N'未找到表 dbo.登录基础数据_二级菜单。', 16, 1);
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @IdIsIdentity bit = ISNULL(COLUMNPROPERTY(OBJECT_ID(N'dbo.登录基础数据_二级菜单'), N'id', 'IsIdentity'), 0);
|
||||
|
||||
IF @IdIsIdentity = 1
|
||||
BEGIN
|
||||
;WITH SourceRows AS (
|
||||
SELECT
|
||||
src.[账号代码],
|
||||
src.[id] AS [pid]
|
||||
FROM [dbo].[登录基础数据_二级菜单] src
|
||||
WHERE src.[是否启用] = 1
|
||||
AND (@TargetRole IS NULL OR src.[账号代码] = @TargetRole)
|
||||
AND src.[pid] = 0
|
||||
AND src.[title] = N'生产管理'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[登录基础数据_二级菜单] existing
|
||||
WHERE existing.[账号代码] = src.[账号代码]
|
||||
AND (existing.[path] = @Path OR existing.[componet] = @Component OR existing.[title] = @Title)
|
||||
)
|
||||
)
|
||||
INSERT INTO [dbo].[登录基础数据_二级菜单]
|
||||
([pid], [path], [componet], [redirect], [name], [title], [icon], [账号代码], [是否启用], [操作时间])
|
||||
SELECT
|
||||
[pid],
|
||||
@Path,
|
||||
@Component,
|
||||
NULL,
|
||||
@Name,
|
||||
@Title,
|
||||
@Icon,
|
||||
[账号代码],
|
||||
1,
|
||||
GETDATE()
|
||||
FROM SourceRows;
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
;WITH SourceRows AS (
|
||||
SELECT
|
||||
ROW_NUMBER() OVER (ORDER BY src.[账号代码], src.[id]) AS rn,
|
||||
src.[账号代码],
|
||||
src.[id] AS [pid]
|
||||
FROM [dbo].[登录基础数据_二级菜单] src
|
||||
WHERE src.[是否启用] = 1
|
||||
AND (@TargetRole IS NULL OR src.[账号代码] = @TargetRole)
|
||||
AND src.[pid] = 0
|
||||
AND src.[title] = N'生产管理'
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM [dbo].[登录基础数据_二级菜单] existing
|
||||
WHERE existing.[账号代码] = src.[账号代码]
|
||||
AND (existing.[path] = @Path OR existing.[componet] = @Component OR existing.[title] = @Title)
|
||||
)
|
||||
),
|
||||
BaseId AS (
|
||||
SELECT ISNULL(MAX([id]), 0) AS maxId
|
||||
FROM [dbo].[登录基础数据_二级菜单]
|
||||
)
|
||||
INSERT INTO [dbo].[登录基础数据_二级菜单]
|
||||
([id], [pid], [path], [componet], [redirect], [name], [title], [icon], [账号代码], [模块代码], [是否启用], [操作时间])
|
||||
SELECT
|
||||
BaseId.maxId + SourceRows.rn,
|
||||
SourceRows.[pid],
|
||||
@Path,
|
||||
@Component,
|
||||
NULL,
|
||||
@Name,
|
||||
@Title,
|
||||
@Icon,
|
||||
SourceRows.[账号代码],
|
||||
BaseId.maxId + SourceRows.rn,
|
||||
1,
|
||||
GETDATE()
|
||||
FROM SourceRows
|
||||
CROSS JOIN BaseId;
|
||||
END;
|
||||
|
||||
UPDATE [dbo].[登录基础数据_二级菜单]
|
||||
SET
|
||||
[path] = @Path,
|
||||
[componet] = @Component,
|
||||
[name] = @Name,
|
||||
[title] = @Title,
|
||||
[模块代码] = [id],
|
||||
[是否启用] = 1
|
||||
WHERE [title] = @Title OR [componet] = @Component;
|
||||
|
||||
SELECT [id], [pid], [path], [componet], [name], [title], [icon], [账号代码], [模块代码], [是否启用]
|
||||
FROM [dbo].[登录基础数据_二级菜单]
|
||||
WHERE [path] = @Path OR [componet] = @Component OR [title] = @Title
|
||||
ORDER BY [账号代码], [id];
|
||||
GO
|
||||
76
db_backups/update_delivery_notice_list_proc_20260626.sql
Normal file
76
db_backups/update_delivery_notice_list_proc_20260626.sql
Normal file
@@ -0,0 +1,76 @@
|
||||
USE [YL_MESDB]
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[装配中心任务看板_发货状态查询]
|
||||
@生产订单 nvarchar(4000) = N'0',
|
||||
@销售订单 nvarchar(4000) = N'0',
|
||||
@物料名称 nvarchar(4000) = N'0',
|
||||
@物料编码 nvarchar(4000) = N'0',
|
||||
@要求发货日期 datetime = NULL,
|
||||
@齐套 nvarchar(20) = N'',
|
||||
@发料状态 nvarchar(20) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
a.TaskAID,
|
||||
a.[订单编号],
|
||||
a.[合同号],
|
||||
a.[订单类型],
|
||||
a.[订单状态],
|
||||
a.[物料编号],
|
||||
a.[物料描述],
|
||||
a.[计划数量],
|
||||
a.[计量单位],
|
||||
a.[下达日期],
|
||||
a.[计划开始],
|
||||
a.[计划完成],
|
||||
a.[项目代码],
|
||||
a.[重量],
|
||||
a.[占用情况],
|
||||
a.[加急状态],
|
||||
a.[排产状态],
|
||||
a.[同步时间],
|
||||
a.[任务状态],
|
||||
a.[标准工艺],
|
||||
a.[生产工艺],
|
||||
a.[齐套],
|
||||
a.[自制件属性],
|
||||
a.[周转单打印次数],
|
||||
a.[单据状态],
|
||||
a.[发料状态],
|
||||
a.[拣配状态],
|
||||
a.[计划号],
|
||||
a.[加急数量],
|
||||
a.[发货状态],
|
||||
a.[要求发货日期],
|
||||
a.[加急总数],
|
||||
a.[入库数量],
|
||||
b.操作人,
|
||||
c.交货数量
|
||||
FROM [YL_MESDB].[dbo].[View_生产订单_MES] a
|
||||
LEFT JOIN [dbo].[YL_加工中心_操作记录表] b ON a.TaskAID = b.TaskAID
|
||||
LEFT JOIN SAP.SBO_YL.dbo.UBT_ODRF_ODLNMES c ON a.订单编号 = c.生产单号
|
||||
WHERE ISNULL(a.发货状态, N'') = N'1'
|
||||
AND ISNULL(a.任务状态, 0) < 4
|
||||
AND a.自制件属性 LIKE N'%装配%'
|
||||
AND (@生产订单 = N'0' OR CONVERT(nvarchar(100), a.订单编号) LIKE N'%' + @生产订单 + N'%')
|
||||
AND (@销售订单 = N'0' OR ISNULL(a.合同号, N'') LIKE N'%' + @销售订单 + N'%')
|
||||
AND (@物料名称 = N'0' OR ISNULL(a.物料描述, N'') LIKE N'%' + @物料名称 + N'%')
|
||||
AND (@物料编码 = N'0' OR ISNULL(a.物料编号, N'') LIKE N'%' + @物料编码 + N'%')
|
||||
AND (@要求发货日期 IS NULL OR CONVERT(date, a.要求发货日期) = CONVERT(date, @要求发货日期))
|
||||
AND (
|
||||
ISNULL(@齐套, N'') = N''
|
||||
OR (@齐套 = N'是' AND ISNULL(a.齐套, 0) = 1)
|
||||
OR (@齐套 = N'否' AND ISNULL(a.齐套, 0) <> 1)
|
||||
)
|
||||
AND (
|
||||
ISNULL(@发料状态, N'') = N''
|
||||
OR (@发料状态 = N'发料齐套' AND (a.发料状态 = N'发料齐套' OR ISNULL(a.发料状态, N'') = N'1'))
|
||||
OR (@发料状态 = N'发料缺件' AND (a.发料状态 = N'发料缺件' OR ISNULL(a.发料状态, N'') = N'2'))
|
||||
OR (@发料状态 = N'未发料' AND ISNULL(a.发料状态, N'') NOT IN (N'1', N'2', N'发料齐套', N'发料缺件'))
|
||||
)
|
||||
ORDER BY a.要求发货日期;
|
||||
END
|
||||
GO
|
||||
243
src/views/ProductionManagement/DeliveryNoticeList/index.vue
Normal file
243
src/views/ProductionManagement/DeliveryNoticeList/index.vue
Normal file
@@ -0,0 +1,243 @@
|
||||
<template>
|
||||
<div class="delivery-notice-page">
|
||||
<el-card>
|
||||
<!-- <div class="page-title">发货状态列表</div> -->
|
||||
<div class="search-container" @keyup.enter="searchTable">
|
||||
<span class="show-text">生产订单:</span>
|
||||
<el-input
|
||||
v-model="orderNo"
|
||||
clearable
|
||||
placeholder="请输入生产订单"
|
||||
style="width: 130px; margin-right: 10px"
|
||||
/>
|
||||
<span class="show-text">销售订单:</span>
|
||||
<el-input
|
||||
v-model="saleNo"
|
||||
clearable
|
||||
placeholder="请输入销售订单"
|
||||
style="width: 130px; margin-right: 10px"
|
||||
/>
|
||||
<span class="show-text">物料名称:</span>
|
||||
<el-input
|
||||
v-model="materialName"
|
||||
clearable
|
||||
placeholder="请输入物料名称"
|
||||
style="width: 150px; margin-right: 10px"
|
||||
/>
|
||||
<span class="show-text">物料编码:</span>
|
||||
<el-input
|
||||
v-model="materialCode"
|
||||
clearable
|
||||
placeholder="请输入物料编码"
|
||||
style="width: 170px; margin-right: 10px"
|
||||
/>
|
||||
<span class="show-text">要求发货日期:</span>
|
||||
<el-date-picker
|
||||
v-model="deliveryDate"
|
||||
clearable
|
||||
format="yyyy-MM-dd"
|
||||
placeholder="请选择日期"
|
||||
style="width: 150px; margin-right: 10px"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
/>
|
||||
<span class="show-text">齐套:</span>
|
||||
<el-select
|
||||
v-model="complete"
|
||||
clearable
|
||||
placeholder="请选择"
|
||||
style="width: 100px; margin-right: 10px"
|
||||
>
|
||||
<el-option label="全部" value="" />
|
||||
<el-option label="是" value="是" />
|
||||
<el-option label="否" value="否" />
|
||||
</el-select>
|
||||
<span class="show-text">发料状态:</span>
|
||||
<el-select
|
||||
v-model="sendStatus"
|
||||
clearable
|
||||
placeholder="请选择"
|
||||
style="width: 120px; margin-right: 10px"
|
||||
>
|
||||
<el-option label="全部" value="" />
|
||||
<el-option label="发料齐套" value="发料齐套" />
|
||||
<el-option label="发料缺件" value="发料缺件" />
|
||||
<el-option label="未发料" value="未发料" />
|
||||
</el-select>
|
||||
<el-button
|
||||
:disabled="loading"
|
||||
icon="el-icon-search"
|
||||
plain
|
||||
type="primary"
|
||||
@click="searchTable"
|
||||
>查询</el-button>
|
||||
</div>
|
||||
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
:data="tableData"
|
||||
:height="'76vh'"
|
||||
border
|
||||
element-loading-background="rgba(0, 0, 0, 0.2)"
|
||||
element-loading-spinner="el-icon-loading"
|
||||
highlight-current-row
|
||||
size="mini"
|
||||
style="width: 100%; margin-top: 16px"
|
||||
tooltip-effect="dark"
|
||||
>
|
||||
<el-table-column align="center" fixed label="序号" type="index" width="50" />
|
||||
<el-table-column align="center" fixed label="生产订单" prop="订单编号" width="90" />
|
||||
<el-table-column align="center" label="销售订单" prop="合同号" width="110" />
|
||||
<el-table-column align="center" label="物料名称" prop="物料描述" width="160" />
|
||||
<el-table-column align="center" label="物料编码" prop="物料编号" min-width="230" show-overflow-tooltip />
|
||||
<el-table-column align="center" label="数量" width="80">
|
||||
<template slot-scope="scope">{{ formatQuantity(scope.row.交货数量 || scope.row.计划数量) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="要求发货日期" width="120">
|
||||
<template slot-scope="scope">{{ formatDate(scope.row.要求发货日期) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="齐套" width="90">
|
||||
<template slot-scope="scope">
|
||||
<div :style="getStatusStyle(formatComplete(scope.row.齐套))" class="score-cell">
|
||||
{{ formatComplete(scope.row.齐套) }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="发料状态" width="110">
|
||||
<template slot-scope="scope">
|
||||
<div :style="getStatusStyle(formatSendStatus(scope.row.发料状态))" class="score-cell">
|
||||
{{ formatSendStatus(scope.row.发料状态) }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作人" prop="操作人" width="100" />
|
||||
<el-table-column align="center" label="装配开工" width="100">
|
||||
<template slot-scope="scope">
|
||||
<div :style="getStatusStyle(formatStartStatus(scope.row.任务状态))" class="score-cell">
|
||||
{{ formatStartStatus(scope.row.任务状态) }}
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'DeliveryNoticeList',
|
||||
data() {
|
||||
return {
|
||||
orderNo: '',
|
||||
saleNo: '',
|
||||
materialName: '',
|
||||
materialCode: '',
|
||||
deliveryDate: '',
|
||||
complete: '',
|
||||
sendStatus: '',
|
||||
tableData: [],
|
||||
loading: false
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.searchTable()
|
||||
},
|
||||
methods: {
|
||||
async searchTable() {
|
||||
this.loading = true
|
||||
this.tableData = []
|
||||
const param = []
|
||||
param.push(['生产订单', this.normalizeQueryValue(this.orderNo)])
|
||||
param.push(['销售订单', this.normalizeQueryValue(this.saleNo)])
|
||||
param.push(['物料名称', this.normalizeQueryValue(this.materialName)])
|
||||
param.push(['物料编码', this.normalizeQueryValue(this.materialCode)])
|
||||
param.push(['要求发货日期', this.deliveryDate || null])
|
||||
param.push(['齐套', this.complete || ''])
|
||||
param.push(['发料状态', this.sendStatus || ''])
|
||||
|
||||
const data = this.CreateData('11', '装配中心任务看板_发货状态查询', param)
|
||||
try {
|
||||
const response = await this.ExecDatabase(data)
|
||||
this.tableData = response.data || []
|
||||
} catch (error) {
|
||||
console.error('发货通知列表查询失败:', error)
|
||||
this.$message.error('查询失败')
|
||||
} finally {
|
||||
this.loading = false
|
||||
}
|
||||
},
|
||||
normalizeQueryValue(value) {
|
||||
return value === null || value === undefined || value === '' ? '0' : value
|
||||
},
|
||||
formatDate(value) {
|
||||
if (!value) return ''
|
||||
return String(value).split('T')[0].split(' ')[0]
|
||||
},
|
||||
formatQuantity(value) {
|
||||
if (value === null || value === undefined || value === '') return ''
|
||||
const numberValue = Number(value)
|
||||
if (Number.isNaN(numberValue)) return value
|
||||
return Number.isInteger(numberValue) ? String(numberValue) : String(numberValue).replace(/0+$/, '').replace(/\.$/, '')
|
||||
},
|
||||
formatComplete(value) {
|
||||
return Number(value || 0) === 1 ? '是' : '否'
|
||||
},
|
||||
formatSendStatus(value) {
|
||||
if (value === '发料齐套' || value === '发料缺件') return value
|
||||
if (Number(value || 0) === 1) return '发料齐套'
|
||||
if (Number(value || 0) === 2) return '发料缺件'
|
||||
return ''
|
||||
},
|
||||
formatStartStatus(value) {
|
||||
return Number(value || 0) > 0 ? '已开工' : '待执行'
|
||||
},
|
||||
getStatusStyle(value) {
|
||||
if (value === '是' || value === '发料齐套' || value === '已开工') {
|
||||
return {
|
||||
backgroundColor: '#f0f9eb',
|
||||
color: '#67c23a'
|
||||
}
|
||||
}
|
||||
if (value === '否' || value === '发料缺件' || value === '待执行') {
|
||||
return {
|
||||
backgroundColor: '#fdf6ec',
|
||||
color: '#e6a23c'
|
||||
}
|
||||
}
|
||||
return {}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.delivery-notice-page {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
color: #409eff;
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
line-height: 28px;
|
||||
margin-bottom: 12px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.search-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 0;
|
||||
}
|
||||
|
||||
.show-text {
|
||||
line-height: 32px;
|
||||
margin-right: 5px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.score-cell {
|
||||
border-radius: 3px;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user