<template>
|
<div class="gy-driver-edit">
|
<div class="operation-buttons">
|
<el-button
|
type="primary"
|
icon="el-icon-check"
|
@click="handleSave"
|
:disabled="saveDisabled"
|
id="set_SaveBill"
|
>保存</el-button
|
>
|
<el-button
|
type="primary"
|
icon="el-icon-check"
|
@click="handleAudit"
|
:disabled="!canAudit"
|
id="set_CheckBill"
|
>审核</el-button
|
>
|
<el-button
|
type="primary"
|
icon="el-icon-close"
|
@click="handleCancel"
|
id="Cancel"
|
>退出</el-button
|
>
|
</div>
|
<el-form
|
ref="formRef"
|
:model="formData"
|
:rules="formRules"
|
label-width="120px"
|
class="edit-form"
|
>
|
<el-tabs v-model="activeTab" type="card">
|
<el-tab-pane label="基本信息" name="basic">
|
<div class="form-row">
|
<el-form-item label="驾驶员代码" prop="HNumber">
|
<el-input
|
v-model="formData.HNumber"
|
placeholder="请输入驾驶员代码"
|
clearable
|
:disabled="isViewMode"
|
/>
|
<el-input
|
type="hidden"
|
v-model="formData.HCREATEORGID"
|
style="display: none"
|
/>
|
</el-form-item>
|
|
<el-form-item label="驾驶员名称" prop="HName">
|
<el-input
|
v-model="formData.HName"
|
placeholder="请输入驾驶员名称"
|
clearable
|
:disabled="isViewMode"
|
/>
|
</el-form-item>
|
|
<el-form-item label="助记码">
|
<el-input
|
v-model="formData.HHelpCode"
|
placeholder="请输入助记码"
|
clearable
|
:disabled="isViewMode"
|
/>
|
</el-form-item>
|
|
<el-form-item label="所属公司" prop="HDeptID">
|
<div class="dept-select">
|
<el-input
|
v-model="formData.HDeptName"
|
placeholder="请选择所属公司"
|
readonly
|
clearable
|
:disabled="isViewMode"
|
/>
|
<el-input
|
type="hidden"
|
v-model="formData.HDeptID"
|
style="display: none"
|
/>
|
<el-button
|
type="primary"
|
icon="el-icon-search"
|
@click="openDeptDialog"
|
:disabled="isViewMode"
|
style="margin-left: 10px"
|
>
|
</el-button>
|
</div>
|
</el-form-item>
|
</div>
|
|
<div class="form-row">
|
<el-form-item label="禁用标记">
|
<el-checkbox
|
v-model="formData.checkboxHStopflag"
|
:true-label="1"
|
:false-label="0"
|
:disabled="!canEditStopFlag"
|
@change="handleStopFlagChange"
|
>
|
是否禁用
|
</el-checkbox>
|
<el-input
|
type="hidden"
|
v-model="formData.HStopflag"
|
style="display: none"
|
/>
|
</el-form-item>
|
</div>
|
|
<div class="form-row">
|
<el-form-item label="备注">
|
<el-input
|
v-model="formData.HRemark"
|
placeholder="请输入备注"
|
type="textarea"
|
:rows="3"
|
style="width: 75%"
|
:disabled="isViewMode"
|
/>
|
</el-form-item>
|
</div>
|
|
<div class="form-row">
|
<el-form-item label="组织" prop="Organization">
|
<el-select
|
v-model="formData.Organization"
|
placeholder="请选择组织"
|
style="width: 717px"
|
:disabled="isViewMode || orgDisabled"
|
>
|
<el-option
|
v-for="org in organizationList"
|
:key="org.ID"
|
:label="org.Name"
|
:value="org.ID"
|
style="color: blue"
|
/>
|
</el-select>
|
</el-form-item>
|
</div>
|
</el-tab-pane>
|
|
<el-tab-pane label="其他信息" name="other">
|
<div class="form-row">
|
<el-form-item label="身份证号码">
|
<el-input
|
v-model="formData.identityID"
|
placeholder="请输入身份证号码"
|
clearable
|
:disabled="isViewMode"
|
style="width: 150px; background-color: #f5f7fa"
|
/>
|
</el-form-item>
|
|
<el-form-item label="手机号码">
|
<el-input
|
v-model="formData.Telephone"
|
placeholder="请输入手机号码"
|
clearable
|
:disabled="isViewMode"
|
/>
|
</el-form-item>
|
|
<el-form-item label="驾照类型">
|
<el-select
|
v-model="formData.LicenseType"
|
placeholder="请选择驾照类型"
|
:disabled="isViewMode"
|
>
|
<el-option label="A1" value="A1" />
|
<el-option label="A2" value="A2" />
|
<el-option label="A3" value="A3" />
|
<el-option label="B1" value="B1" />
|
<el-option label="B2" value="B2" />
|
</el-select>
|
</el-form-item>
|
|
<el-form-item label="司机类型">
|
<el-select
|
v-model="formData.DriverType"
|
placeholder="请选择司机类型"
|
:disabled="isViewMode"
|
>
|
<el-option label="固定" value="固定" />
|
<el-option label="临时" value="临时" />
|
</el-select>
|
</el-form-item>
|
</div>
|
</el-tab-pane>
|
|
<el-tab-pane label="制单信息" name="record">
|
<div class="form-row">
|
<el-form-item label="制单人">
|
<el-input
|
v-model="formData.HMakeEmp"
|
readonly
|
style="width: 200px; background-color: #f5f7fa"
|
/>
|
</el-form-item>
|
|
<el-form-item label="审核人">
|
<el-input
|
v-model="formData.HCheckEmp"
|
readonly
|
style="width: 200px; background-color: #f5f7fa"
|
/>
|
</el-form-item>
|
|
<el-form-item label="禁用人">
|
<el-input
|
v-model="formData.HStopEmp"
|
readonly
|
style="width: 200px; background-color: #f5f7fa"
|
/>
|
</el-form-item>
|
</div>
|
|
<div class="form-row">
|
<el-form-item label="制单日期">
|
<el-input
|
v-model="formData.HMakeDate"
|
readonly
|
style="width: 200px; background-color: #f5f7fa"
|
/>
|
</el-form-item>
|
|
<el-form-item label="审核日期">
|
<el-input
|
v-model="formData.HCheckDate"
|
readonly
|
style="width: 200px; background-color: #f5f7fa"
|
/>
|
</el-form-item>
|
|
<el-form-item label="禁用日期">
|
<el-input
|
v-model="formData.HStopDate"
|
readonly
|
style="width: 200px; background-color: #f5f7fa"
|
/>
|
</el-form-item>
|
</div>
|
</el-tab-pane>
|
</el-tabs>
|
|
<el-input type="hidden" v-model="formData.HItemID" />
|
</el-form>
|
|
<!-- 部门选择弹窗 -->
|
<el-dialog
|
title="dialogTitle"
|
:visible.sync="openData"
|
width="90%"
|
top="5vh"
|
append-to-body
|
>
|
<Dept @deptEmitDb="dbEmitData" @deptEmit="emitData" v-if="deptShow" />
|
|
<span slot="footer" class="dialog-footer">
|
<el-button type="primary" @click="deptClickSub">确 定</el-button>
|
<el-button @click="closeDeptDialog">取 消</el-button>
|
|
</span>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import axios from "axios";
|
import Dept from "@/views/component/dept";
|
export default {
|
name: "GyDriverEdit",
|
components: { Dept},
|
props: {
|
OperationType: {
|
type: Number,
|
default: 1, // 1:新增, 2:复制, 3:编辑, 4:浏览
|
},
|
|
linterid: {
|
type: String,
|
type: Number,
|
default: "0",
|
},
|
HSouceBillType: {
|
type: String,
|
default: "",
|
},
|
},
|
data() {
|
return {
|
baseURL: process.env.VUE_APP_BASE_API,
|
activeTab: "basic",
|
|
// 部门选择弹窗
|
deptDialogVisible: false,
|
deptDialogUrl: "",
|
dialogTitle: "",
|
deptShow: false,
|
openData: false,
|
deptform: {}, //弹窗选中数据
|
// 组织列表
|
organizationList: [],
|
|
// 表单数据
|
formData: {
|
HItemID: "0",
|
HNumber: "",
|
HName: "",
|
HHelpCode: "",
|
HDeptName: "",
|
HDeptID: "0",
|
HDepNumber: "",
|
identityID: "",
|
Telephone: "",
|
LicenseType: "A1",
|
DriverType: "固定",
|
HStopflag: "0",
|
checkboxHStopflag: 0,
|
HRemark: "",
|
HUSEORGID: "",
|
HCREATEORGID: "0",
|
HMakeEmp: "",
|
HMakeDate: "",
|
HCheckEmp: "",
|
HCheckDate: "",
|
HStopEmp: "",
|
HStopDate: "",
|
Organization: "",
|
},
|
|
// 表单验证规则
|
formRules: {
|
HNumber: [
|
{ required: true, message: "请输入驾驶员代码", trigger: "blur" },
|
],
|
HName: [
|
{ required: true, message: "请输入驾驶员名称", trigger: "blur" },
|
],
|
HUSEORGID: [
|
{ required: true, message: "请选择组织", trigger: "change" },
|
],
|
HDeptID: [
|
{ required: true, message: "请选择所属公司", trigger: "change" },
|
],
|
},
|
saveDisabled: false,
|
orgDisabled: false,
|
isViewMode: false,
|
canEditStopFlag: true,
|
};
|
},
|
computed: {
|
canAudit() {
|
return (
|
this.OperationType === 3 &&
|
this.formData.HItemID !== "0" &&
|
!this.formData.HCheckEmp
|
);
|
},
|
|
// 格式化当前日期
|
currentDate() {
|
const now = new Date();
|
const year = now.getFullYear();
|
const month = String(now.getMonth() + 1).padStart(2, "0");
|
const day = String(now.getDate()).padStart(2, "0");
|
return `${year}-${month}-${day}`;
|
},
|
},
|
created() {
|
this.initData();
|
},
|
methods: {
|
|
async initData() {
|
try {
|
|
await this.getOrganizationList();
|
await this.initByOperationType();
|
} catch (error) {
|
this.$modal.msgError("初始化失败");
|
console.error("初始化错误:", error);
|
}
|
},
|
|
emitData(row) {
|
this.deptform = row; // 存储选中的部门数据
|
},
|
dbEmitData(deptRow){
|
this.formData.HDeptName = deptRow.部门名称;
|
this.formData.HDeptID = deptRow.HItemID;
|
this.openData = false;
|
},
|
deptClickSub() {
|
if (this.deptform && this.deptform.HItemID) {
|
this.formData.HDeptName = this.deptform.部门名称;
|
this.formData.HDeptID = this.deptform.HItemID;
|
this.openData = false;
|
this.deptShow = false;
|
} else {
|
this.$modal.msgWarning("请先选择一个部门");
|
}
|
},
|
deptDialogVisible() {
|
this.deptform = {};
|
this.openData = false;
|
},
|
// 获取组织列表
|
async getOrganizationList() {
|
try {
|
const res = await axios.get(`${this.baseURL}/Web/GetOrganizations`);
|
if (res.data.count === 1) {
|
this.organizationList = res.data.data;
|
const orgId = sessionStorage.getItem("Organization");
|
this.formData.HUSEORGID = sessionStorage.getItem("OrganizationID") || "";
|
this.formData.Organization = orgId;
|
this.formData.HCREATEORGID = sessionStorage.getItem("OrganizationID")|| "0";
|
}
|
} catch (error) {
|
console.error("获取组织列表失败:", error);
|
}
|
},
|
|
|
async initByOperationType() {
|
const { OperationType, linterid } = this;
|
this.formData.HMakeEmp = sessionStorage.getItem("HUserName") || "";
|
this.formData.HMakeDate = this.currentDate;
|
|
switch (OperationType) {
|
case 1: // 新增
|
this.orgDisabled = true;
|
this.formData.HItemID = "0";
|
break;
|
|
case 2: // 复制
|
await this.loadDriverData(linterid);
|
this.formData.HItemID = "0";
|
this.formData.HNumber = "";
|
this.formData.HName = "";
|
this.formData.HMakeEmp = sessionStorage.getItem("HUserName") || "";
|
this.formData.HMakeDate = this.currentDate;
|
this.formData.HCheckEmp = "";
|
this.formData.HCheckDate = "";
|
this.formData.HStopEmp = "";
|
this.formData.HStopDate = "";
|
break;
|
|
case 3: // 编辑
|
this.orgDisabled = true;
|
this.formData.HItemID = linterid;
|
await this.loadDriverData(linterid);
|
break;
|
|
case 4: // 浏览
|
this.isViewMode = true;
|
this.saveDisabled = true;
|
this.canEditStopFlag = false;
|
this.formData.HItemID = linterid;
|
await this.loadDriverData(linterid);
|
break;
|
|
default:
|
this.$modal.msgError("未知操作类型");
|
break;
|
}
|
},
|
|
async loadDriverData(linterid) {
|
try {
|
const res = await axios.get(`${this.baseURL}/Gy_Driver/cx`, {
|
params: { HInterID: linterid },
|
});
|
console.log("驾驶员数据加载响应:", linterid,this.baseURL);
|
console.log("加载驾驶员数据:", res.data.data);
|
if (res.data.data[0]) {
|
const data = res.data.data[0];
|
console.log("加载驾驶员数据:", data);
|
this.mapDataToForm(data);
|
} else {
|
this.$modal.msgError(res.data.msg || "加载数据失败");
|
}
|
} catch (error) {
|
console.error("加载驾驶员数据失败:", error);
|
this.$modal.msgError("加载数据失败");
|
}
|
},
|
|
mapDataToForm(data) {
|
const mapping = {
|
HNumber: "驾驶员代码",
|
HName: "驾驶员名称",
|
HHelpCode: "短代码",
|
HDeptName: "所属公司名称",
|
HDepNumber: "所属公司代码",
|
HDeptID: "所属公司ID",
|
identityID: "身份证号码",
|
Telephone: "手机号码",
|
HStopflag: "禁用标记",
|
HRemark: "备注",
|
HUSEORGID: "HUSEORGID",
|
LicenseType: "驾照类型",
|
DriverType: "司机类型",
|
HMakeEmp: "创建人",
|
HMakeDate: "创建日期",
|
HCheckEmp: "审核人",
|
HCheckDate: "审核日期",
|
HStopEmp: "禁用人",
|
HStopDate: "禁用日期",
|
};
|
|
Object.entries(mapping).forEach(([formKey, dataKey]) => {
|
if (data[dataKey] !== undefined) {
|
if (dataKey.includes("日期")) {
|
this.formData[formKey] = this.formatDate(data[dataKey]);
|
} else {
|
this.formData[formKey] = data[dataKey];
|
}
|
}
|
});
|
|
if (data.禁用标记) {
|
this.formData.checkboxHStopflag = 1;
|
this.formData.HStopflag = "1";
|
} else {
|
this.formData.checkboxHStopflag = 0;
|
this.formData.HStopflag = "0";
|
}
|
},
|
|
formatDate(dateStr) {
|
if (!dateStr) return "";
|
try {
|
const date = new Date(dateStr);
|
const year = date.getFullYear();
|
const month = String(date.getMonth() + 1).padStart(2, "0");
|
const day = String(date.getDate()).padStart(2, "0");
|
return `${year}-${month}-${day}`;
|
} catch (error) {
|
return dateStr;
|
}
|
},
|
|
async handleSave() {
|
try {
|
await this.$refs.formRef.validate();
|
|
if (!this.formData.HNumber) {
|
this.$modal.msgWarning("请输入驾驶员代码!");
|
return;
|
}
|
|
if (!this.formData.HName) {
|
this.$modal.msgWarning("请输入驾驶员名称!");
|
return;
|
}
|
|
const saveData = {
|
...this.formData,
|
HItemID: this.formData.HItemID,
|
HStopflag: this.formData.HStopflag,
|
};
|
console.log("保存数据:", saveData);
|
|
const sMainStr = JSON.stringify(saveData);
|
const res = await axios.post(`${this.baseURL}/Gy_Driver/AddBill1`, {
|
oMain: `${sMainStr};${sessionStorage.getItem("HUserName")};${
|
sessionStorage.getItem("OrganizationID") || 100038
|
}`,
|
});
|
|
if (res.data.count === 1) {
|
this.$modal.msgSuccess("保存成功");
|
this.saveDisabled = true;
|
|
if (this.OperationType === 1 || this.OperationType === 2) {
|
this.isViewMode = true;
|
}
|
} else {
|
this.$modal.msgError(res.data.Message || "保存失败");
|
}
|
} catch (error) {
|
if (error.name !== "Error") {
|
this.$modal.msgError("保存失败");
|
console.error("保存错误:", error);
|
}
|
}
|
},
|
|
async handleAudit() {
|
try {
|
await this.$modal.confirm("确认要审核吗?");
|
|
const res = await axios.get(`${this.baseURL}/Gy_Driver/AuditGy_Driver`, {
|
params: {
|
HInterID: this.formData.HItemID,
|
IsAudit: 0,
|
CurUserName: sessionStorage.getItem("HUserName") || "",
|
},
|
});
|
|
if (res.data.count === 1) {
|
this.$modal.msgSuccess("审核成功");
|
|
|
if (this.formData.HItemID !== "0") {
|
await this.loadDriverData(this.formData.HItemID);
|
}
|
} else {
|
this.$modal.msgError(res.data.Message || "审核失败");
|
}
|
} catch (error) {
|
if (error !== "cancel") {
|
this.$modal.msgError("审核失败");
|
}
|
}
|
},
|
|
|
handleCancel() {
|
this.$emit("editCloseGy", false);
|
},
|
|
|
handleStopFlagChange(value) {
|
this.formData.HStopflag = value ? "1" : "0";
|
},
|
|
|
openDeptDialog() {
|
this.deptShow = false;
|
this.dialogTitle = "部门列表";
|
this.deptShow = true;
|
this.openData = true;
|
},
|
|
|
|
clearDept() {
|
this.formData.HDeptName = "";
|
this.formData.HDeptID = "0";
|
this.formData.HDepNumber = "";
|
},
|
|
handleMessage(event) {
|
|
if (event.data && event.data.type === "deptSelected") {
|
const dept = event.data.data;
|
if (dept) {
|
this.formData.HDeptName = dept.部门名称;
|
this.formData.HDeptID = dept.HItemID;
|
this.formData.HDepNumber = dept.部门代码;
|
this.deptDialogVisible = false;
|
}
|
}
|
},
|
},
|
};
|
</script>
|
|
<style scoped>
|
.gy-driver-edit {
|
padding: 15px;
|
height: 100%;
|
box-sizing: border-box;
|
}
|
|
.operation-buttons {
|
margin-bottom: 20px;
|
}
|
|
.operation-buttons .el-button {
|
margin-right: 10px;
|
}
|
|
.edit-form {
|
height: calc(100% - 60px);
|
overflow-y: auto;
|
}
|
|
.form-row {
|
display: flex;
|
flex-wrap: wrap;
|
margin-bottom: 15px;
|
}
|
|
.form-row .el-form-item {
|
flex: 1 1 300px;
|
margin-right: 20px;
|
margin-bottom: 0;
|
min-width: 300px;
|
}
|
|
.form-row .el-form-item:last-child {
|
margin-right: 0;
|
}
|
|
.dept-select {
|
display: flex;
|
align-items: center;
|
}
|
|
.dept-select .el-input {
|
flex: 1;
|
}
|
|
/* 调整标签页样式 */
|
::v-deep .el-tabs__header {
|
margin-bottom: 20px;
|
}
|
|
::v-deep .el-tabs__content {
|
padding: 0 20px;
|
}
|
|
/* 响应式调整 */
|
@media (max-width: 1200px) {
|
.form-row .el-form-item {
|
flex: 1 1 100%;
|
margin-right: 0;
|
}
|
}
|
|
/* 隐藏字段样式 */
|
input[type="hidden"] {
|
display: none;
|
}
|
</style>
|