功能修改

This commit is contained in:
hayu 2025-07-30 18:14:42 +08:00
parent 453efb910d
commit f4930c5e31
2 changed files with 230 additions and 51 deletions

View File

@ -45,17 +45,18 @@
<el-table-column label="联系人" align="center" width="170" prop="linkMan" show-overflow-tooltip />
<el-table-column label="联系电话" align="center" width="170" prop="phone" show-overflow-tooltip />
<el-table-column label="日期" align="center" width="170" prop="reserveDate" show-overflow-tooltip />
<el-table-column
label="排号"
align="center"
width="120"
show-overflow-tooltip
>
<!-- 使用作用域插槽获取行数据 -->
<template #default="scope">
{{ scope.row.timeType }}-{{ scope.row.sort }}
</template>
</el-table-column>
<el-table-column label="排号" align="center" width="120" prop="sort" show-overflow-tooltip />
<!-- <el-table-column-->
<!-- label="排号"-->
<!-- align="center"-->
<!-- width="120"-->
<!-- show-overflow-tooltip-->
<!-- >-->
<!-- &lt;!&ndash; 使用作用域插槽获取行数据 &ndash;&gt;-->
<!-- <template #default="scope">-->
<!-- {{ scope.row.timeType }}-{{ scope.row.sort }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="操作" align="center" width="170">
<template slot-scope="{ row }">
<el-button size="mini" v-if="row.sort===null" type="success" @click="handleView(row)">排号</el-button>
@ -77,21 +78,21 @@
<el-dialog title="审核排号" :visible.sync="viewDialogVisible" width="500px" append-to-body>
<el-form :model="viewForm" label-width="60px" class="view-dialog-form">
<el-form-item label="排号:">
<span
style="display: inline-block;
margin-right: 5px;
color: #666;
vertical-align: middle;
font-size: 16px;
font-weight: bold;"
>
{{ timeType }}-
</span>
<!-- <span-->
<!-- style="display: inline-block;-->
<!-- margin-right: 5px;-->
<!-- color: #666;-->
<!-- vertical-align: middle;-->
<!-- font-size: 16px;-->
<!-- font-weight: bold;"-->
<!-- >-->
<!-- {{ timeType }}- -->
<!--</span>-->
<el-input
style="display: inline-block; width: auto; vertical-align: middle;"
v-model.number="viewForm.sort"
v-model="viewForm.sort"
@input="handleSortInput"
placeholder="请输入数字"
placeholder="请输入排号"
></el-input>
</el-form-item>
</el-form>
@ -131,7 +132,7 @@
<table class="ticket-table" style="margin: 0 auto;">
<tr>
<td width="100" style="text-align: center;">号类</td>
<td style="font-weight: bold; font-size: 25px; text-align: center;">{{ currentTicketData.timeType }}-{{ currentTicketData.sort }}</td>
<td style="font-weight: bold; font-size: 25px; text-align: center;">{{ currentTicketData.sort }}</td>
</tr>
<tr>
<td style="text-align: center;">工程名称</td>
@ -155,7 +156,9 @@
</tr>
<tr>
<td style="text-align: center;">签字</td>
<td style="height: 50px; text-align: center;"></td>
<td style="height: 50px; text-align: center;">
<img :src="currentTicketData.signUrl" style="width: 100px;height: 100px;transform: rotate(-90deg);max-width: 100%;" alt="">
</td>
</tr>
</table>
</div>
@ -188,7 +191,7 @@
<table class="loading-ticket-table" style="margin: 0 auto;">
<tr>
<td width="100" style="text-align: center;">号类</td>
<td style="font-weight: bold; font-size: 25px; text-align: center;">{{ loadingTicketData.timeType }}-{{ loadingTicketData.sort }}</td>
<td style="font-weight: bold; font-size: 25px; text-align: center;">{{ loadingTicketData.sort }}</td>
</tr>
<tr>
<td style="text-align: center;">工程名称</td>
@ -212,7 +215,9 @@
</tr>
<tr>
<td style="text-align: center;">签字</td>
<td style="height: 50px; text-align: center;"></td>
<td style="height: 50px; text-align: center;">
<img :src="loadingTicketData.signUrl" style="width: 100px;height: 100px;transform: rotate(-90deg);max-width: 100%;" alt="">
</td>
</tr>
</table>
</div>
@ -315,7 +320,8 @@ export default {
linkMan: '',
phone: '',
reserveDate: '',
sort:''
sort:'',
signUrl:''
},
loadingDialogVisible: false,
loadingTicketData: {
@ -326,7 +332,8 @@ export default {
linkMan: '',
phone: '',
reserveDate: '',
sort:''
sort:'',
signUrl:''
},
timeType:'',
sort:''
@ -348,7 +355,7 @@ export default {
methods: {
//
handleSortInput(value) {
this.viewForm.sort = value.replace(/[^0-9]/g, '');
// this.viewForm.sort = value.replace(/[^0-9]/g, '');
},
//
selectable(row) {
@ -414,14 +421,14 @@ export default {
this.viewForm.sort = row.sort //
this.viewForm.id = row.id // id
const params = {
type:''
}
getSort(params).then(response => {
console.log(response.data)
this.timeType=response.data.timeType,
this.viewForm.sort=response.data.sort
})
// const params = {
// type:''
// }
// getSort(params).then(response => {
// console.log(response.data)
// this.timeType=response.data.timeType,
// this.viewForm.sort=response.data.sort
// })
},
@ -449,7 +456,8 @@ export default {
carCode: row.carCode,
linkMan: row.linkMan,
phone: row.phone,
reserveDate: row.reserveDate
reserveDate: row.reserveDate,
signUrl: row.signUrl,
};
this.currentPreviewImage = null; // 使
this.previewDialogVisible = true;
@ -500,7 +508,8 @@ export default {
carCode: row.carCode,
linkMan: row.linkMan,
phone: row.phone,
reserveDate: row.reserveDate
reserveDate: row.reserveDate,
signUrl: row.signUrl,
};
this.currentPreviewImage = null; // 使
this.loadingDialogVisible = true;

View File

@ -96,17 +96,60 @@
<el-dialog :title="dialogTitle" :visible.sync="authDialogVisible" width="60%" append-to-body>
<el-form :model="authForm" ref="authFormRef" label-width="110px" class="auth-dialog-form" :rules="authFormRules">
<el-form-item label="选择班组:" prop="teamId">
<el-select
v-model="authForm.teamId"
placeholder="请选择班组"
clearable
filterable
style="width: 40%"
:disabled="isEditMode"
<el-form-item label="选择单位:" prop="teamId">
<el-popover
placement="bottom-start"
width="400"
trigger="click"
v-model="teamSelectVisible"
>
<el-option v-for="team in teamList" :key="team.id" :label="team.name" :value="team.id"></el-option>
</el-select>
<div class="tree-container">
<el-input
v-model="treeFilterText"
placeholder="搜索单位"
size="small"
clearable
style="margin-bottom: 10px"
/>
<el-tree
:data="teamTreeData"
:props="treeProps"
node-key="id"
:highlight-current="true"
:expand-on-click-node="false"
:filter-node-method="filterTeamNode"
:default-expand-all="false"
:show-checkbox="false"
ref="teamTree"
@node-click="handleTeamNodeClick"
class="team-tree"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span
:class="{
'selectable-node': isSelectableNode(data),
'disabled-node': !isSelectableNode(data)
}"
>
{{ data.name }}
<!-- <span v-if="data.level" class="node-level">({{ getLevelText(data.level) }})</span>-->
</span>
</span>
</el-tree>
</div>
<el-input
slot="reference"
v-model="authForm.teamName"
placeholder="请选择单位"
readonly
clearable
style="width: 50%"
:disabled="isEditMode"
@clear="handleTeamClear"
>
<i slot="suffix" class="el-input__icon el-icon-arrow-down"></i>
</el-input>
</el-popover>
</el-form-item>
<el-form-item label="授权委托书:" prop="authorizationFile" required>
@ -468,6 +511,14 @@ export default {
detailsList: [],
userName: '',
createTime: ''
},
//
teamSelectVisible: false,
teamTreeData: [],
treeFilterText: '', //
treeProps: {
label: 'name',
children: 'children'
}
}
},
@ -482,9 +533,71 @@ export default {
this.resetUploadState()
this.$refs.authFormRef.resetFields() //
}
},
//
treeFilterText(val) {
this.$refs.teamTree.filter(val)
}
},
methods: {
//
isSelectableNode(node) {
// level"3"
// parentIdparentIdnull
return node.level === '3' || (!node.parentId || node.parentId === null)
},
//
getLevelText(level) {
const levelMap = {
'1': '一级',
'2': '二级',
'3': '三级'
}
return levelMap[level] || ''
},
//
handleTeamNodeClick(node) {
//
if (!this.isSelectableNode(node)) {
// this.$message.warning('')
return
}
this.authForm.teamId = node.id
this.authForm.teamName = node.name
this.teamSelectVisible = false
//
this.$refs.authFormRef.clearValidate(['teamId'])
},
//
handleTeamClear() {
this.authForm.teamId = ''
this.authForm.teamName = ''
},
//
filterTeamNode(value, data) {
if (!value) return true
return data.name.toLowerCase().indexOf(value.toLowerCase()) !== -1
},
//
processTreeData(data) {
if (!Array.isArray(data)) return []
return data.map(item => {
const processedItem = {
...item,
// children
children: item.children ? this.processTreeData(item.children) : []
}
return processedItem
})
},
//
selectable(row) {
return row.authId === null
@ -705,12 +818,13 @@ export default {
},
//
getTeamList() {
// API
const params = {
externalId: null
}
getTeamList(params).then(response => {
this.teamList = response.data
//
this.teamTreeData = this.processTreeData(response.data)
})
},
//
@ -1056,6 +1170,62 @@ export default {
}
</script>
<style lang="scss" scoped>
/* 树形容器样式 */
.tree-container {
max-height: 300px;
overflow-y: auto;
}
/* 自定义树节点样式 */
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
}
/* 可选择节点样式 */
.selectable-node {
color: #333;
font-weight: 500;
cursor: pointer;
&:hover {
color: #409eff;
}
}
/* 不可选择节点样式 */
.disabled-node {
//color: #c0c4cc;
cursor: not-allowed;
font-weight: normal;
}
/* 层级标识样式 */
.node-level {
font-size: 12px;
//color: #909399;
margin-left: 5px;
}
/* 树形组件样式调整 */
.team-tree {
.el-tree-node__content {
height: 32px;
&:hover {
background-color: #f5f7fa;
}
}
.el-tree-node.is-current > .el-tree-node__content {
background-color: #e6f7ff;
color: #409eff;
}
}
/* 批量授权标签容器 */
.selected-items-container {
max-height: 150px;