Merge remote-tracking branch 'websoft/master'
This commit is contained in:
@@ -370,7 +370,7 @@ export default {
|
||||
label: '详细地址',
|
||||
prop: 'detailAddress',
|
||||
type: 'textarea',
|
||||
minRows: 3,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
minWidth: 220,
|
||||
overHidden: false,
|
||||
@@ -429,7 +429,7 @@ export default {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
hide: true,
|
||||
maxlength: 200,
|
||||
|
||||
@@ -271,7 +271,7 @@ export default {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
hide: true,
|
||||
maxlength: 200,
|
||||
|
||||
@@ -75,6 +75,7 @@
|
||||
filterable
|
||||
:disabled="isParentRegionLocked"
|
||||
:placeholder="isParentRegionLocked ? '自动带出' : '请选择国家'"
|
||||
autocomplete="off"
|
||||
style="width: 100%"
|
||||
@change="handleCountryChange"
|
||||
>
|
||||
@@ -171,6 +172,27 @@
|
||||
<template #detailAddress="{ row }">
|
||||
<span class="port-terminal-page__detail-address">{{ row.detailAddress || '-' }}</span>
|
||||
</template>
|
||||
<template #detailAddress-form>
|
||||
<el-input
|
||||
v-model="form.detailAddress"
|
||||
class="detail-address-input"
|
||||
clearable
|
||||
maxlength="255"
|
||||
show-word-limit
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</template>
|
||||
<template #remark-form>
|
||||
<el-input
|
||||
v-model="form.remark"
|
||||
class="remark-input"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
maxlength="200"
|
||||
show-word-limit
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</template>
|
||||
<template #longitude-form>
|
||||
<el-input
|
||||
v-model="form.longitude"
|
||||
@@ -195,7 +217,7 @@
|
||||
@load="onLoad(page, query)"
|
||||
/>
|
||||
|
||||
<el-dialog title="港口码头主数据导入" append-to-body v-model="excelBox" width="555px">
|
||||
<el-dialog title="港口码头主数据导入" append-to-body v-model="excelBox" width="500px">
|
||||
<avue-form :option="excelOption" v-model="excelForm">
|
||||
<template #excelTemplate>
|
||||
<el-button type="primary" @click="handleTemplate">
|
||||
@@ -303,6 +325,7 @@ const removeExcelColumnsByHeaders = async (blob, options = {}) => {
|
||||
return new Blob([buffer], { type: 'application/vnd.ms-excel' });
|
||||
};
|
||||
|
||||
const newLocal = '请选择类型';
|
||||
export default {
|
||||
data() {
|
||||
const validateCode = (rule, value, callback) => {
|
||||
@@ -368,9 +391,10 @@ export default {
|
||||
option: {
|
||||
height: 'auto',
|
||||
calcHeight: 32,
|
||||
dialogWidth: 980,
|
||||
dialogWidth: 900,
|
||||
dialogCustomClass: 'port-terminal-edit-dialog',
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
labelWidth: '108px',
|
||||
tip: false,
|
||||
searchShow: true,
|
||||
searchLabelWidth: 160,
|
||||
@@ -396,7 +420,7 @@ export default {
|
||||
formslot: true,
|
||||
width: 140,
|
||||
span: 12,
|
||||
order: 70,
|
||||
order: 89,
|
||||
placeholder: '请输入编码',
|
||||
rules: [
|
||||
{ required: true, message: '请输入编码', trigger: 'blur' },
|
||||
@@ -412,7 +436,7 @@ export default {
|
||||
search: true,
|
||||
searchOrder: 7,
|
||||
span: 12,
|
||||
order: 80,
|
||||
order: 90,
|
||||
placeholder: '请输入',
|
||||
rules: [{ required: true, message: '请输入港口/码头名称', trigger: 'blur' }],
|
||||
},
|
||||
@@ -444,7 +468,7 @@ export default {
|
||||
dicData: [],
|
||||
hide: true,
|
||||
span: 12,
|
||||
order: 90,
|
||||
order: 100,
|
||||
placeholder: '请选择',
|
||||
rules: [{ required: false, message: '请选择上级港口', trigger: 'change' }],
|
||||
change: ({ value }) => this.handleParentChange(value),
|
||||
@@ -478,7 +502,7 @@ export default {
|
||||
filterable: true,
|
||||
dicData: [],
|
||||
span: 12,
|
||||
order: 60,
|
||||
order: 89,
|
||||
minWidth: 140,
|
||||
overHidden: false,
|
||||
placeholder: '自动带出',
|
||||
@@ -492,7 +516,7 @@ export default {
|
||||
formslot: true,
|
||||
hide: true,
|
||||
span: 12,
|
||||
order: 50,
|
||||
order: 88,
|
||||
placeholder: '自动带出',
|
||||
rules: [{ required: true, message: '请选择所属城市', trigger: 'change' }],
|
||||
},
|
||||
@@ -515,6 +539,7 @@ export default {
|
||||
type: 'select',
|
||||
formslot: true,
|
||||
hide: true,
|
||||
order: 87,
|
||||
props: {
|
||||
label: 'title',
|
||||
value: 'id',
|
||||
@@ -543,7 +568,7 @@ export default {
|
||||
formslot: true,
|
||||
minWidth: 130,
|
||||
span: 12,
|
||||
order: 20,
|
||||
order: 68,
|
||||
placeholder: '请输入',
|
||||
overHidden: false,
|
||||
rules: [
|
||||
@@ -557,7 +582,7 @@ export default {
|
||||
formslot: true,
|
||||
minWidth: 130,
|
||||
span: 12,
|
||||
order: 10,
|
||||
order: 66,
|
||||
placeholder: '请输入',
|
||||
overHidden: false,
|
||||
rules: [
|
||||
@@ -578,13 +603,12 @@ export default {
|
||||
{
|
||||
label: '详细地址',
|
||||
prop: 'detailAddress',
|
||||
type: 'textarea',
|
||||
slot: true,
|
||||
minRows: 3,
|
||||
span: 24,
|
||||
formslot: true,
|
||||
span: 12,
|
||||
minWidth: 220,
|
||||
overHidden: false,
|
||||
order: 30,
|
||||
order: 86,
|
||||
placeholder: '请输入',
|
||||
maxlength: 255,
|
||||
showWordLimit: true,
|
||||
@@ -611,8 +635,9 @@ export default {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
formslot: true,
|
||||
hide: true,
|
||||
maxlength: 200,
|
||||
showWordLimit: true,
|
||||
@@ -805,9 +830,12 @@ export default {
|
||||
this.clearCityValue();
|
||||
},
|
||||
handleCategoryChange(value, reset = true) {
|
||||
const required = value === '码头';
|
||||
const parentColumn = this.findColumn(this.option.column, 'parentId');
|
||||
parentColumn.rules[0].required = value === '码头';
|
||||
this.setColumnDisplay('parentId', value === '码头');
|
||||
if (parentColumn && parentColumn.rules && parentColumn.rules[0]) {
|
||||
parentColumn.rules[0].required = required;
|
||||
}
|
||||
this.setColumnDisplay('parentId', required);
|
||||
if (value === '港口') {
|
||||
this.form.parentId = undefined;
|
||||
this.form.parentCode = '';
|
||||
@@ -1057,7 +1085,7 @@ export default {
|
||||
return false;
|
||||
}
|
||||
if (isBlank(row.category)) {
|
||||
this.$message.warning('请选择类型');
|
||||
this.$message.warning(newLocal);
|
||||
return false;
|
||||
}
|
||||
if (row.category === '码头' && isBlank(row.parentId)) {
|
||||
@@ -1209,6 +1237,7 @@ export default {
|
||||
this.handleCategoryChange(this.form.category, false);
|
||||
this.syncTerminalCode();
|
||||
done();
|
||||
setTimeout(() => this.disableDialogAutocomplete(), 50);
|
||||
});
|
||||
});
|
||||
return;
|
||||
@@ -1232,8 +1261,21 @@ export default {
|
||||
this.handleDistrictChange(this.form.districtCode);
|
||||
}
|
||||
done();
|
||||
setTimeout(() => this.disableDialogAutocomplete(), 50);
|
||||
});
|
||||
},
|
||||
disableDialogAutocomplete() {
|
||||
this.$nextTick(() => {
|
||||
const dialog = document.querySelector('.port-terminal-edit-dialog');
|
||||
if (!dialog) return;
|
||||
dialog.querySelectorAll('input, textarea').forEach(el => {
|
||||
el.setAttribute('autocomplete', 'off');
|
||||
el.setAttribute('autocorrect', 'off');
|
||||
el.setAttribute('autocapitalize', 'off');
|
||||
el.setAttribute('spellcheck', 'false');
|
||||
});
|
||||
});
|
||||
},
|
||||
searchReset() {
|
||||
this.query = {};
|
||||
this.setCityOptions([]);
|
||||
@@ -1338,3 +1380,44 @@ export default {
|
||||
padding: 4px 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss">
|
||||
/* 港口码头编辑/新增弹窗:对齐 railway-station 统一风格(灰底 + 白卡表单 + 浮动底栏,padding 24px 与全局弹窗标准一致) */
|
||||
//.port-terminal-edit-dialog {
|
||||
// /* 灰底内容区 */
|
||||
// .el-dialog__body {
|
||||
// background-color: #f2f2f2;
|
||||
// padding: 8px;
|
||||
// }
|
||||
// /* 表单白卡(与全局 .el-dialog .avue-form 一致,padding 24px 对齐 customer-archive / railway-station) */
|
||||
// .avue-form {
|
||||
// background: #fff;
|
||||
// border-radius: 6px;
|
||||
// box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
|
||||
// padding: 24px !important;
|
||||
// margin-bottom: 0;
|
||||
// }
|
||||
// /* 底部按钮区白卡(Avue 弹窗 footer 在 body 内,接续白卡) */
|
||||
// .avue-dialog__footer {
|
||||
// background: #fff;
|
||||
// border-radius: 0 0 6px 6px;
|
||||
// box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
|
||||
// padding: 16px 24px !important;
|
||||
// display: flex;
|
||||
// justify-content: flex-end;
|
||||
// }
|
||||
// /* label 宽度统一 108px(对齐 railway-station,标签对齐更整齐) */
|
||||
// .el-form-item__label {
|
||||
// width: 108px !important;
|
||||
// }
|
||||
// /* 所有 input 文本框、select 下拉控件统一宽度 250px */
|
||||
// .el-input,
|
||||
// .el-select {
|
||||
// width: 250px !important;
|
||||
// }
|
||||
// /* 备注宽度 85% */
|
||||
// .remark-input {
|
||||
// width: 85% !important;
|
||||
// }
|
||||
//}
|
||||
</style>
|
||||
|
||||
@@ -202,8 +202,9 @@ export default {
|
||||
height: 'auto',
|
||||
calcHeight: 32,
|
||||
dialogWidth: 980,
|
||||
dialogCustomClass: 'railway-station-edit-dialog',
|
||||
labelPosition: 'right',
|
||||
labelWidth: 'auto',
|
||||
labelWidth: '140px',
|
||||
tip: false,
|
||||
searchShow: true,
|
||||
searchMenuSpan: 24,
|
||||
@@ -339,7 +340,7 @@ export default {
|
||||
label: '详细地址',
|
||||
prop: 'detailAddress',
|
||||
type: 'textarea',
|
||||
minRows: 3,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
minWidth: 220,
|
||||
overHidden: false,
|
||||
@@ -393,7 +394,7 @@ export default {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
type: 'textarea',
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
hide: true,
|
||||
maxlength: 200,
|
||||
@@ -892,5 +893,16 @@ export default {
|
||||
:deep(.el-table td .cell) {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<style lang="scss">
|
||||
/* 铁路车站编辑/新增弹窗:强制 label 宽度 140px(覆盖 Avue 默认 auto 计算值),灰底白卡与浮动底栏由全局 element-ui.scss 弹窗标准规则统一提供 */
|
||||
.railway-station-edit-dialog {
|
||||
.el-form-item__label {
|
||||
width: 140px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
:icon="actionButtonLikeSearch ? undefined : 'el-icon-plus'"
|
||||
v-if="canCreate"
|
||||
@click="$refs.crud.rowAdd()"
|
||||
>{{ config.createText || '新增' }}
|
||||
>{{ config.createText || '新增' }}
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@@ -39,7 +39,7 @@
|
||||
!readonlyScope
|
||||
"
|
||||
@click="handleImport"
|
||||
>{{ config.importText || '批量导入' }}
|
||||
>{{ config.importText || '批量导入' }}
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@@ -47,7 +47,7 @@
|
||||
plain
|
||||
v-if="config.templateUrl && hasPermission(`${config.permission}_template`)"
|
||||
@click="handleTemplate"
|
||||
>下载模板
|
||||
>下载模板
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@@ -55,7 +55,7 @@
|
||||
plain
|
||||
v-if="config.exportUrl && hasPermission(`${config.permission}_export`)"
|
||||
@click="handleExport"
|
||||
>批量导出
|
||||
>批量导出
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
@@ -63,14 +63,14 @@
|
||||
plain
|
||||
v-if="canBatchComplete"
|
||||
@click="handleBatchComplete"
|
||||
>批量完成
|
||||
>批量完成
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
:plain="!actionButtonLikeSearch"
|
||||
v-if="canRoadLoading"
|
||||
@click="handleRoadLoading"
|
||||
>{{ config.roadLoadingText || '公路配载' }}
|
||||
>{{ config.roadLoadingText || '公路配载' }}
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
@@ -82,7 +82,7 @@
|
||||
!readonlyScope
|
||||
"
|
||||
@click="handleDelete"
|
||||
>批量删除
|
||||
>批量删除
|
||||
</el-button>
|
||||
</template>
|
||||
|
||||
@@ -1130,20 +1130,20 @@
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<template v-if="hasTransportType">
|
||||
<el-form-item v-if="isCarrierMode" label="承运商" required>
|
||||
<el-select
|
||||
v-model="form.carrierName"
|
||||
placeholder="请选择承运商"
|
||||
filterable
|
||||
clearable
|
||||
:loading="taskCarrierLoading"
|
||||
:disabled="dialogReadonly || form.carrierType !== '承运商'"
|
||||
@visible-change="visible => visible && loadTaskCarrierOptions()"
|
||||
@change="handleTaskCarrierChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in taskCarrierOptions"
|
||||
:key="
|
||||
<el-form-item v-if="isCarrierMode" label="承运商" required>
|
||||
<el-select
|
||||
v-model="form.carrierName"
|
||||
placeholder="请选择承运商"
|
||||
filterable
|
||||
clearable
|
||||
:loading="taskCarrierLoading"
|
||||
:disabled="dialogReadonly || form.carrierType !== '承运商'"
|
||||
@visible-change="visible => visible && loadTaskCarrierOptions()"
|
||||
@change="handleTaskCarrierChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in taskCarrierOptions"
|
||||
:key="
|
||||
item.id ||
|
||||
item.customerName ||
|
||||
item.carrierName ||
|
||||
@@ -1151,275 +1151,275 @@
|
||||
item.name ||
|
||||
item.customerCode
|
||||
"
|
||||
:label="item.customerName || item.carrierName || item.fullName || item.name"
|
||||
:value="item.customerName || item.carrierName || item.fullName || item.name"
|
||||
:label="item.customerName || item.carrierName || item.fullName || item.name"
|
||||
:value="item.customerName || item.carrierName || item.fullName || item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="isRoadTransport"
|
||||
label="司机"
|
||||
:required="form.carrierType === '自运'"
|
||||
>
|
||||
<el-select
|
||||
v-model="form.driverName"
|
||||
placeholder="请选择或输入司机"
|
||||
filterable
|
||||
clearable
|
||||
allow-create
|
||||
default-first-option
|
||||
:loading="taskDriverLoading"
|
||||
:disabled="dialogReadonly"
|
||||
@visible-change="visible => visible && loadTaskDriverOptions()"
|
||||
@change="handleTaskDriverChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in taskDriverOptions"
|
||||
:key="item.id || item.driverName || item.mobile"
|
||||
:label="item.driverName || item.name"
|
||||
:value="item.driverName || item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="isRoadTransport"
|
||||
label="手机号"
|
||||
:required="form.carrierType === '自运'"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.driverPhone"
|
||||
placeholder="请输入手机号"
|
||||
clearable
|
||||
maxlength="20"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="isRoadTransport"
|
||||
label="司机"
|
||||
:required="form.carrierType === '自运'"
|
||||
>
|
||||
<el-select
|
||||
v-model="form.driverName"
|
||||
placeholder="请选择或输入司机"
|
||||
filterable
|
||||
clearable
|
||||
allow-create
|
||||
default-first-option
|
||||
:loading="taskDriverLoading"
|
||||
:disabled="dialogReadonly"
|
||||
@visible-change="visible => visible && loadTaskDriverOptions()"
|
||||
@change="handleTaskDriverChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in taskDriverOptions"
|
||||
:key="item.id || item.driverName || item.mobile"
|
||||
:label="item.driverName || item.name"
|
||||
:value="item.driverName || item.name"
|
||||
</el-form-item>
|
||||
<el-form-item :label="transportVehicleNoLabel" required>
|
||||
<el-input
|
||||
v-model="form.vehicleNo"
|
||||
:placeholder="`请输入${transportVehicleNoLabel}`"
|
||||
clearable
|
||||
maxlength="30"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="isRoadTransport"
|
||||
label="手机号"
|
||||
:required="form.carrierType === '自运'"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.driverPhone"
|
||||
placeholder="请输入手机号"
|
||||
clearable
|
||||
maxlength="20"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="transportVehicleNoLabel" required>
|
||||
<el-input
|
||||
v-model="form.vehicleNo"
|
||||
:placeholder="`请输入${transportVehicleNoLabel}`"
|
||||
clearable
|
||||
maxlength="30"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="isNonRoadTransport" label="船长">
|
||||
<el-input
|
||||
v-model="form.captainName"
|
||||
placeholder="请输入船长"
|
||||
clearable
|
||||
maxlength="20"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="isNonRoadTransport && isCarrierMode" label="联系电话">
|
||||
<el-input
|
||||
v-model="form.driverPhone"
|
||||
placeholder="请输入联系电话"
|
||||
clearable
|
||||
maxlength="20"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="isNonRoadTransport" label="箱号">
|
||||
<el-input
|
||||
v-model="form.containerNo"
|
||||
placeholder="请输入箱号"
|
||||
clearable
|
||||
maxlength="30"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="isNonRoadTransport" label="舱位">
|
||||
<el-input
|
||||
v-model="form.cabinNo"
|
||||
placeholder="请输入舱位"
|
||||
clearable
|
||||
maxlength="30"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="showRoadEscortFields" label="挂车车牌号">
|
||||
<el-input
|
||||
v-model="form.trailerVehicleNo"
|
||||
placeholder="请输入挂车车牌号"
|
||||
clearable
|
||||
maxlength="30"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="showRoadEscortFields" label="押运人">
|
||||
<el-input
|
||||
v-model="form.escortName"
|
||||
placeholder="请输入押运人"
|
||||
clearable
|
||||
maxlength="20"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="showRoadEscortFields" label="押运人手机号">
|
||||
<el-input
|
||||
v-model="form.escortPhone"
|
||||
placeholder="请输入押运人手机号"
|
||||
clearable
|
||||
maxlength="20"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="货物类型" required>
|
||||
<el-cascader
|
||||
v-model="form.cargoTypePath"
|
||||
:options="transportCargoTypeOptions"
|
||||
:props="transportCargoTypeCascaderProps"
|
||||
placeholder="请选择到二级"
|
||||
clearable
|
||||
filterable
|
||||
:disabled="dialogReadonly"
|
||||
:filter-method="filterBillingCargoType"
|
||||
@visible-change="visible => visible && ensureBillingCargoTypeOptions()"
|
||||
@change="handleTaskCargoTypeChange"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="货物名称">
|
||||
<el-select
|
||||
v-model="form.cargoName"
|
||||
placeholder="请选择或输入货物"
|
||||
filterable
|
||||
allow-create
|
||||
default-first-option
|
||||
clearable
|
||||
:disabled="dialogReadonly || !form.cargoType"
|
||||
:loading="taskCargoLoading"
|
||||
@visible-change="visible => visible && loadTaskCargoOptionsForForm()"
|
||||
@change="handleTaskCargoChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in taskCargoOptions"
|
||||
:key="item.id || item.cargoCode || item.cargoName"
|
||||
:label="formatBillingCargoTypeLabel(item)"
|
||||
:value="formatBillingCargoTypeLabel(item)"
|
||||
</el-form-item>
|
||||
<el-form-item v-if="isNonRoadTransport" label="船长">
|
||||
<el-input
|
||||
v-model="form.captainName"
|
||||
placeholder="请输入船长"
|
||||
clearable
|
||||
maxlength="20"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="规格">
|
||||
<el-input
|
||||
v-model="form.specification"
|
||||
placeholder="选择货物自动回填"
|
||||
clearable
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="型号">
|
||||
<el-input
|
||||
v-model="form.model"
|
||||
placeholder="选择货物自动回填"
|
||||
clearable
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="数量">
|
||||
<el-input
|
||||
v-model="form.quantity"
|
||||
placeholder="请输入数量"
|
||||
clearable
|
||||
:disabled="dialogReadonly"
|
||||
@input="value => handleTaskNumberInput('quantity', value)"
|
||||
>
|
||||
<template #append>
|
||||
<el-select
|
||||
v-model="form.quantityUnit"
|
||||
class="business-crud-page__append-select business-crud-page__append-select--wide"
|
||||
placeholder="单位"
|
||||
:disabled="dialogReadonly"
|
||||
@visible-change="visible => visible && loadTaskQuantityUnitOptions()"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in taskQuantityUnitOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="里程(km)">
|
||||
<el-input
|
||||
v-model="form.mileage"
|
||||
placeholder="请输入里程"
|
||||
clearable
|
||||
maxlength="10"
|
||||
inputmode="numeric"
|
||||
:disabled="dialogReadonly"
|
||||
@input="handleTaskMileageInput"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="isRoadTransport ? '计划发货日期' : '预计发货日期'">
|
||||
<el-date-picker
|
||||
v-model="form.estimatedStartTime"
|
||||
type="date"
|
||||
placeholder="请选择预计发货日期"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="isRoadTransport ? '计划完成日期' : '预计完成日期'">
|
||||
<el-date-picker
|
||||
v-model="form.estimatedEndTime"
|
||||
type="date"
|
||||
placeholder="请选择预计完成日期"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单价">
|
||||
<el-input
|
||||
v-model="form.unitPrice"
|
||||
placeholder="请输入单价"
|
||||
clearable
|
||||
:disabled="dialogReadonly"
|
||||
@input="value => handleTaskNumberInput('unitPrice', value)"
|
||||
>
|
||||
<template #append>
|
||||
<el-select
|
||||
v-model="form.priceUnit"
|
||||
class="business-crud-page__append-select business-crud-page__append-select--wide"
|
||||
placeholder="单位"
|
||||
:disabled="dialogReadonly"
|
||||
@visible-change="visible => visible && loadTaskFeeUnitOptions()"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in taskFeeUnitOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="其他费用合计">
|
||||
<el-input
|
||||
v-model="form.otherFeeTotal"
|
||||
placeholder="请输入其他费用合计"
|
||||
clearable
|
||||
:disabled="dialogReadonly"
|
||||
@input="value => handleTaskNumberInput('otherFeeTotal', value)"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" class="business-crud-page__task-remark">
|
||||
<el-input
|
||||
v-model="form.taskRemark"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
maxlength="200"
|
||||
show-word-limit
|
||||
placeholder="请输入备注,200字以内"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="isNonRoadTransport && isCarrierMode" label="联系电话">
|
||||
<el-input
|
||||
v-model="form.driverPhone"
|
||||
placeholder="请输入联系电话"
|
||||
clearable
|
||||
maxlength="20"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="isNonRoadTransport" label="箱号">
|
||||
<el-input
|
||||
v-model="form.containerNo"
|
||||
placeholder="请输入箱号"
|
||||
clearable
|
||||
maxlength="30"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="isNonRoadTransport" label="舱位">
|
||||
<el-input
|
||||
v-model="form.cabinNo"
|
||||
placeholder="请输入舱位"
|
||||
clearable
|
||||
maxlength="30"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="showRoadEscortFields" label="挂车车牌号">
|
||||
<el-input
|
||||
v-model="form.trailerVehicleNo"
|
||||
placeholder="请输入挂车车牌号"
|
||||
clearable
|
||||
maxlength="30"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="showRoadEscortFields" label="押运人">
|
||||
<el-input
|
||||
v-model="form.escortName"
|
||||
placeholder="请输入押运人"
|
||||
clearable
|
||||
maxlength="20"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="showRoadEscortFields" label="押运人手机号">
|
||||
<el-input
|
||||
v-model="form.escortPhone"
|
||||
placeholder="请输入押运人手机号"
|
||||
clearable
|
||||
maxlength="20"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="货物类型" required>
|
||||
<el-cascader
|
||||
v-model="form.cargoTypePath"
|
||||
:options="transportCargoTypeOptions"
|
||||
:props="transportCargoTypeCascaderProps"
|
||||
placeholder="请选择到二级"
|
||||
clearable
|
||||
filterable
|
||||
:disabled="dialogReadonly"
|
||||
:filter-method="filterBillingCargoType"
|
||||
@visible-change="visible => visible && ensureBillingCargoTypeOptions()"
|
||||
@change="handleTaskCargoTypeChange"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="货物名称">
|
||||
<el-select
|
||||
v-model="form.cargoName"
|
||||
placeholder="请选择或输入货物"
|
||||
filterable
|
||||
allow-create
|
||||
default-first-option
|
||||
clearable
|
||||
:disabled="dialogReadonly || !form.cargoType"
|
||||
:loading="taskCargoLoading"
|
||||
@visible-change="visible => visible && loadTaskCargoOptionsForForm()"
|
||||
@change="handleTaskCargoChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in taskCargoOptions"
|
||||
:key="item.id || item.cargoCode || item.cargoName"
|
||||
:label="formatBillingCargoTypeLabel(item)"
|
||||
:value="formatBillingCargoTypeLabel(item)"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="规格">
|
||||
<el-input
|
||||
v-model="form.specification"
|
||||
placeholder="选择货物自动回填"
|
||||
clearable
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="型号">
|
||||
<el-input
|
||||
v-model="form.model"
|
||||
placeholder="选择货物自动回填"
|
||||
clearable
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="数量">
|
||||
<el-input
|
||||
v-model="form.quantity"
|
||||
placeholder="请输入数量"
|
||||
clearable
|
||||
:disabled="dialogReadonly"
|
||||
@input="value => handleTaskNumberInput('quantity', value)"
|
||||
>
|
||||
<template #append>
|
||||
<el-select
|
||||
v-model="form.quantityUnit"
|
||||
class="business-crud-page__append-select business-crud-page__append-select--wide"
|
||||
placeholder="单位"
|
||||
:disabled="dialogReadonly"
|
||||
@visible-change="visible => visible && loadTaskQuantityUnitOptions()"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in taskQuantityUnitOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="里程(km)">
|
||||
<el-input
|
||||
v-model="form.mileage"
|
||||
placeholder="请输入里程"
|
||||
clearable
|
||||
maxlength="10"
|
||||
inputmode="numeric"
|
||||
:disabled="dialogReadonly"
|
||||
@input="handleTaskMileageInput"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="isRoadTransport ? '计划发货日期' : '预计发货日期'">
|
||||
<el-date-picker
|
||||
v-model="form.estimatedStartTime"
|
||||
type="date"
|
||||
placeholder="请选择预计发货日期"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="isRoadTransport ? '计划完成日期' : '预计完成日期'">
|
||||
<el-date-picker
|
||||
v-model="form.estimatedEndTime"
|
||||
type="date"
|
||||
placeholder="请选择预计完成日期"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单价">
|
||||
<el-input
|
||||
v-model="form.unitPrice"
|
||||
placeholder="请输入单价"
|
||||
clearable
|
||||
:disabled="dialogReadonly"
|
||||
@input="value => handleTaskNumberInput('unitPrice', value)"
|
||||
>
|
||||
<template #append>
|
||||
<el-select
|
||||
v-model="form.priceUnit"
|
||||
class="business-crud-page__append-select business-crud-page__append-select--wide"
|
||||
placeholder="单位"
|
||||
:disabled="dialogReadonly"
|
||||
@visible-change="visible => visible && loadTaskFeeUnitOptions()"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in taskFeeUnitOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="其他费用合计">
|
||||
<el-input
|
||||
v-model="form.otherFeeTotal"
|
||||
placeholder="请输入其他费用合计"
|
||||
clearable
|
||||
:disabled="dialogReadonly"
|
||||
@input="value => handleTaskNumberInput('otherFeeTotal', value)"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" class="business-crud-page__task-remark">
|
||||
<el-input
|
||||
v-model="form.taskRemark"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
maxlength="200"
|
||||
show-word-limit
|
||||
placeholder="请输入备注,200字以内"
|
||||
:disabled="dialogReadonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-form>
|
||||
</div>
|
||||
@@ -2285,7 +2285,7 @@
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-link type="primary" v-if="showDetailButton(row)" @click="openDetail(row)"
|
||||
>详情</el-link
|
||||
>详情</el-link
|
||||
>
|
||||
<el-link
|
||||
type="primary"
|
||||
@@ -2376,8 +2376,8 @@
|
||||
><strong>{{
|
||||
detailRow.departureName || detailRow.departureAddress || '-'
|
||||
}}</strong
|
||||
><b class="end">终</b
|
||||
><strong>{{ detailRow.arrivalName || detailRow.arrivalAddress || '-' }}</strong>
|
||||
><b class="end">终</b
|
||||
><strong>{{ detailRow.arrivalName || detailRow.arrivalAddress || '-' }}</strong>
|
||||
</div>
|
||||
<div class="business-crud-page__waybill-route-text">
|
||||
{{ detailRow.departureAddress || '-' }} → {{ detailRow.arrivalAddress || '-' }}
|
||||
@@ -2417,7 +2417,7 @@
|
||||
<el-table-column prop="deviceCode" label="设备编码" min-width="130" />
|
||||
<el-table-column prop="brand" label="品牌" min-width="110" />
|
||||
<el-table-column label="规格型号" min-width="140"
|
||||
><template #default="{ row }">{{
|
||||
><template #default="{ row }">{{
|
||||
[row.specification, row.model].filter(Boolean).join('/') || '-'
|
||||
}}</template></el-table-column
|
||||
>
|
||||
@@ -2439,13 +2439,13 @@
|
||||
>
|
||||
<span>司机</span
|
||||
><strong
|
||||
>{{ detailRow.driverName || '-' }} {{ detailRow.driverPhone || '' }}</strong
|
||||
>
|
||||
>{{ detailRow.driverName || '-' }} {{ detailRow.driverPhone || '' }}</strong
|
||||
>
|
||||
</div>
|
||||
<div class="business-crud-page__waybill-detail-field">
|
||||
<span>{{
|
||||
waybillIsRoadTransport(detailRow) ? '车牌号' : '航班号/船次号/班列号'
|
||||
}}</span
|
||||
waybillIsRoadTransport(detailRow) ? '车牌号' : '航班号/船次号/班列号'
|
||||
}}</span
|
||||
><strong>{{ detailRow.vehicleNo || '-' }}</strong>
|
||||
</div>
|
||||
<div
|
||||
@@ -2460,8 +2460,8 @@
|
||||
>
|
||||
<span>押运人</span
|
||||
><strong
|
||||
>{{ detailRow.escortName || '-' }} {{ detailRow.escortPhone || '' }}</strong
|
||||
>
|
||||
>{{ detailRow.escortName || '-' }} {{ detailRow.escortPhone || '' }}</strong
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-if="!waybillIsRoadTransport(detailRow)"
|
||||
@@ -2514,7 +2514,7 @@
|
||||
v-for="(node, index) in waybillDetailProcessNodes"
|
||||
:key="node.key || index"
|
||||
:timestamp="node.time || ''"
|
||||
>{{ node.name || node.nodeName || node.label }}</el-timeline-item
|
||||
>{{ node.name || node.nodeName || node.label }}</el-timeline-item
|
||||
>
|
||||
</el-timeline>
|
||||
<el-empty v-else description="暂无打卡详情" :image-size="50" />
|
||||
@@ -2550,7 +2550,7 @@
|
||||
<template #extra>
|
||||
<div class="business-crud-page__waybill-track-actions">
|
||||
<el-button plain @click="handleWaybillTrackAction('playback')"
|
||||
>轨迹回放</el-button
|
||||
>轨迹回放</el-button
|
||||
>
|
||||
<el-button plain @click="handleWaybillTrackAction('locate')">实时定位</el-button>
|
||||
</div>
|
||||
@@ -2924,7 +2924,7 @@
|
||||
<el-button type="primary">添加附件</el-button>
|
||||
</el-upload>
|
||||
<span class="business-crud-page__import-file-tip"
|
||||
>请上传计划明细表,仅支持 Excel 格式</span
|
||||
>请上传计划明细表,仅支持 Excel 格式</span
|
||||
>
|
||||
<el-link type="primary" @click="handleTransportPlanTemplate">下载模板</el-link>
|
||||
</el-form-item>
|
||||
@@ -3030,7 +3030,7 @@
|
||||
type="primary"
|
||||
:loading="transportPlanImportLoading"
|
||||
@click="submitTransportPlanImport"
|
||||
>提交</el-button
|
||||
>提交</el-button
|
||||
>
|
||||
<el-button @click="transportPlanImportBox = false">返回</el-button>
|
||||
</template>
|
||||
@@ -3835,7 +3835,7 @@
|
||||
<el-table-column label="操作" width="100" align="center" fixed="right">
|
||||
<template #default="{ $index }">
|
||||
<el-link type="danger" @click="removeDispatchItemAttachment($index)"
|
||||
>删除</el-link
|
||||
>删除</el-link
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -4505,7 +4505,7 @@
|
||||
<div class="business-crud-page__map-info">
|
||||
<span>{{ transportMapStatus }}</span>
|
||||
<span v-if="transportMapSelected.regionName"
|
||||
>行政区划:{{ transportMapSelected.regionName }}</span
|
||||
>行政区划:{{ transportMapSelected.regionName }}</span
|
||||
>
|
||||
</div>
|
||||
<template #footer>
|
||||
@@ -5422,9 +5422,9 @@ export default {
|
||||
this.getDispatchQuantityUnit(row),
|
||||
'total',
|
||||
row.quantity ||
|
||||
row.cargoQuantity ||
|
||||
row.goodsQuantity ||
|
||||
row.totalQuantity ||
|
||||
row.cargoQuantity ||
|
||||
row.goodsQuantity ||
|
||||
row.totalQuantity ||
|
||||
row.totalCargoQuantity
|
||||
);
|
||||
});
|
||||
@@ -6206,8 +6206,8 @@ export default {
|
||||
const taskInfo = this.parseJsonObject(this.detailRow.taskInfoJson);
|
||||
this.waybillRouteChangeRecords = Array.isArray(taskInfo.routeChangeRecords)
|
||||
? [...taskInfo.routeChangeRecords].sort((a, b) =>
|
||||
String(b.changeTime).localeCompare(String(a.changeTime))
|
||||
)
|
||||
String(b.changeTime).localeCompare(String(a.changeTime))
|
||||
)
|
||||
: [];
|
||||
},
|
||||
openWaybillRouteChangeDialog() {
|
||||
@@ -6302,8 +6302,8 @@ export default {
|
||||
|
||||
const content = changed
|
||||
? `${row.waybillNo || '运单'}:发货地 ${row.originalDepartureAddress || '-'} → ${
|
||||
row.departureAddress || '-'
|
||||
};到货地 ${row.originalArrivalAddress || '-'} → ${row.arrivalAddress || '-'}`
|
||||
row.departureAddress || '-'
|
||||
};到货地 ${row.originalArrivalAddress || '-'} → ${row.arrivalAddress || '-'}`
|
||||
: '调整运输路线顺序';
|
||||
const records = [
|
||||
{
|
||||
@@ -8031,21 +8031,21 @@ export default {
|
||||
const goodsRows = this.isTaskFullMode
|
||||
? this.transportCargoRows.map(item => this.normalizeTransportCargoRow(item))
|
||||
: [
|
||||
{
|
||||
cargoType: row.cargoType,
|
||||
cargoTypeCode: row.cargoTypeCode,
|
||||
cargoTypePath: row.cargoTypePath,
|
||||
cargoName: row.cargoName,
|
||||
specification: row.specification,
|
||||
model: row.model,
|
||||
quantity: row.quantity,
|
||||
quantityUnit: row.quantityUnit,
|
||||
mileage: row.mileage,
|
||||
unitPrice: row.unitPrice,
|
||||
priceUnit: row.priceUnit,
|
||||
remark: row.taskRemark,
|
||||
},
|
||||
];
|
||||
{
|
||||
cargoType: row.cargoType,
|
||||
cargoTypeCode: row.cargoTypeCode,
|
||||
cargoTypePath: row.cargoTypePath,
|
||||
cargoName: row.cargoName,
|
||||
specification: row.specification,
|
||||
model: row.model,
|
||||
quantity: row.quantity,
|
||||
quantityUnit: row.quantityUnit,
|
||||
mileage: row.mileage,
|
||||
unitPrice: row.unitPrice,
|
||||
priceUnit: row.priceUnit,
|
||||
remark: row.taskRemark,
|
||||
},
|
||||
];
|
||||
if (this.isTaskFullMode) {
|
||||
const firstCargo = goodsRows[0] || {};
|
||||
taskInfo.unitPrice = firstCargo.unitPrice || '';
|
||||
@@ -9398,8 +9398,8 @@ export default {
|
||||
const children =
|
||||
level === 1
|
||||
? (cargoType.children || [])
|
||||
.map(item => this.normalizeBillingCargoTypeNode(item, level + 1, path))
|
||||
.filter(Boolean)
|
||||
.map(item => this.normalizeBillingCargoTypeNode(item, level + 1, path))
|
||||
.filter(Boolean)
|
||||
: [];
|
||||
return {
|
||||
...cargoType,
|
||||
@@ -9466,8 +9466,8 @@ export default {
|
||||
const children =
|
||||
level === 1
|
||||
? (region.children || [])
|
||||
.map(item => this.normalizeBillingMatchRegionNode(item, level + 1))
|
||||
.filter(Boolean)
|
||||
.map(item => this.normalizeBillingMatchRegionNode(item, level + 1))
|
||||
.filter(Boolean)
|
||||
: [];
|
||||
return {
|
||||
...region,
|
||||
@@ -11008,8 +11008,8 @@ export default {
|
||||
mode === 'draft'
|
||||
? '生成草稿成功'
|
||||
: shouldCompletePlan
|
||||
? '确认生成成功,运输计划已完成'
|
||||
: '确认生成成功';
|
||||
? '确认生成成功,运输计划已完成'
|
||||
: '确认生成成功';
|
||||
this.$message.success(message);
|
||||
this.dispatchBox = false;
|
||||
this.onLoad(this.page, this.query);
|
||||
|
||||
@@ -2348,7 +2348,7 @@ export default {
|
||||
.loading-detail {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
//gap: 8px;
|
||||
color: #303133;
|
||||
.loading-detail__summary { display: flex; align-items: center; flex-wrap: wrap; gap: 24px; padding: 4px 0 16px; }
|
||||
.loading-detail__heading { font-size: 20px; font-weight: 600; margin-right: 8px; }
|
||||
|
||||
@@ -416,7 +416,7 @@ export default {
|
||||
.master-list-panel {
|
||||
background: #fff;
|
||||
.toolbar {
|
||||
padding: 12px 12px 0;
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
.master-card {
|
||||
|
||||
@@ -80,106 +80,100 @@
|
||||
</template>
|
||||
|
||||
<template #basicInfo-form>
|
||||
<div class="process-config-page__section">
|
||||
<div class="dialog-section-title">基本信息</div>
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="8">
|
||||
<div class="process-config-page__field">
|
||||
<span
|
||||
class="process-config-page__field-label process-config-page__field-label--required"
|
||||
>
|
||||
配置名称
|
||||
</span>
|
||||
<el-input
|
||||
v-model="form.configName"
|
||||
:disabled="dialogReadonly"
|
||||
maxlength="100"
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="process-config-page__field">
|
||||
<span
|
||||
class="process-config-page__field-label process-config-page__field-label--required"
|
||||
>
|
||||
项目
|
||||
</span>
|
||||
<el-select
|
||||
v-model="selectedProjectId"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="loadProjectOptions"
|
||||
:loading="projectLoading"
|
||||
:disabled="dialogReadonly"
|
||||
placeholder="请选择"
|
||||
style="width: 100%"
|
||||
@change="handleProjectChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in projectOptions"
|
||||
:key="item.id"
|
||||
:label="formatProjectLabel(item)"
|
||||
:value="String(item.id)"
|
||||
/>
|
||||
</el-select>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="process-config-page__field">
|
||||
<span class="process-config-page__field-label">运输完成时限</span>
|
||||
<div class="process-config-page__finish-days">
|
||||
<span>默认</span>
|
||||
<section-card title="基本信息">
|
||||
<el-form
|
||||
:model="form"
|
||||
label-position="right"
|
||||
label-width="calc(6em + 24px)"
|
||||
>
|
||||
<el-row :gutter="18">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="配置名称" required>
|
||||
<el-input
|
||||
v-model="form.defaultFinishDays"
|
||||
v-model="form.configName"
|
||||
:disabled="dialogReadonly"
|
||||
maxlength="3"
|
||||
maxlength="100"
|
||||
placeholder="请输入"
|
||||
@input="handleFinishDaysInput"
|
||||
/>
|
||||
<span>天后完成运输</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<div class="process-config-page__field">
|
||||
<span class="process-config-page__field-label">备注</span>
|
||||
<el-input
|
||||
v-model="form.remark"
|
||||
type="textarea"
|
||||
:rows="4"
|
||||
:disabled="dialogReadonly"
|
||||
maxlength="500"
|
||||
show-word-limit
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="项目" required>
|
||||
<el-select
|
||||
v-model="selectedProjectId"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="loadProjectOptions"
|
||||
:loading="projectLoading"
|
||||
:disabled="dialogReadonly"
|
||||
placeholder="请选择"
|
||||
style="width: 100%"
|
||||
@change="handleProjectChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in projectOptions"
|
||||
:key="item.id"
|
||||
:label="formatProjectLabel(item)"
|
||||
:value="String(item.id)"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="运输完成时限">
|
||||
<div class="process-config-page__finish-days">
|
||||
<span>默认</span>
|
||||
<el-input
|
||||
v-model="form.defaultFinishDays"
|
||||
:disabled="dialogReadonly"
|
||||
maxlength="3"
|
||||
placeholder="请输入"
|
||||
@input="handleFinishDaysInput"
|
||||
/>
|
||||
<span>天后完成运输</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注">
|
||||
<el-input
|
||||
v-model="form.remark"
|
||||
type="textarea"
|
||||
:rows="4"
|
||||
:disabled="dialogReadonly"
|
||||
maxlength="500"
|
||||
show-word-limit
|
||||
placeholder="请输入"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</section-card>
|
||||
</template>
|
||||
|
||||
<template #nodeConfigJson-form>
|
||||
<div class="process-config-page__custom-form">
|
||||
<div class="dialog-section-title">现行过程节点</div>
|
||||
<div class="process-config-page__timeline" v-if="enabledNodes.length">
|
||||
<div class="process-config-page__timeline-line"></div>
|
||||
<div
|
||||
v-for="node in enabledNodes"
|
||||
:key="node.key"
|
||||
class="process-config-page__timeline-item"
|
||||
>
|
||||
<span class="process-config-page__timeline-dot"></span>
|
||||
<div class="process-config-page__timeline-name">{{ node.name }}</div>
|
||||
<div class="process-config-page__timeline-desc">
|
||||
<div v-for="text in timelineDescriptions(node)" :key="text">{{ text }}</div>
|
||||
<section-card title="现行过程节点">
|
||||
<div class="process-config-page__timeline" v-if="enabledNodes.length">
|
||||
<div class="process-config-page__timeline-line"></div>
|
||||
<div
|
||||
v-for="node in enabledNodes"
|
||||
:key="node.key"
|
||||
class="process-config-page__timeline-item"
|
||||
>
|
||||
<span class="process-config-page__timeline-dot"></span>
|
||||
<div class="process-config-page__timeline-name">{{ node.name }}</div>
|
||||
<div class="process-config-page__timeline-desc">
|
||||
<div v-for="text in timelineDescriptions(node)" :key="text">{{ text }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-empty v-else description="请在节点设置中勾选过程节点" :image-size="72" />
|
||||
<el-empty v-else description="请在节点设置中勾选过程节点" :image-size="72" />
|
||||
</section-card>
|
||||
|
||||
<div class="dialog-section-title">节点设置</div>
|
||||
<section-card title="节点设置">
|
||||
<el-table
|
||||
class="process-config-page__node-table"
|
||||
border
|
||||
@@ -363,6 +357,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</section-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1106,32 +1101,6 @@ export default {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.process-config-page {
|
||||
&__section {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&__field {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 10px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
&__field-label {
|
||||
flex: 0 0 150px;
|
||||
line-height: 32px;
|
||||
color: #303133;
|
||||
font-weight: 500;
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
|
||||
&--required::before {
|
||||
margin-right: 4px;
|
||||
color: #f56c6c;
|
||||
content: '*';
|
||||
}
|
||||
}
|
||||
|
||||
&__node-value {
|
||||
white-space: normal;
|
||||
word-break: break-all;
|
||||
|
||||
@@ -1908,7 +1908,7 @@ export default {
|
||||
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
||||
column-gap: 72px;
|
||||
row-gap: 0;
|
||||
margin-bottom: 16px;
|
||||
margin-bottom: 12px;
|
||||
background: #fff;
|
||||
border-radius: 0 0 6px 6px;
|
||||
padding: 14px 16px 4px;
|
||||
@@ -1934,7 +1934,7 @@ export default {
|
||||
|
||||
&__table {
|
||||
width: 100%;
|
||||
margin-bottom: 16px;
|
||||
margin-bottom: 12px;
|
||||
background: #fff;
|
||||
border-radius: 0 0 6px 6px;
|
||||
padding: 12px;
|
||||
@@ -1952,7 +1952,7 @@ export default {
|
||||
}
|
||||
|
||||
&__textarea-list {
|
||||
margin-bottom: 16px;
|
||||
margin-bottom: 12px;
|
||||
background: #fff;
|
||||
border-radius: 0 0 6px 6px;
|
||||
padding: 14px 16px 4px;
|
||||
@@ -1975,7 +1975,7 @@ export default {
|
||||
}
|
||||
|
||||
&__material-card {
|
||||
margin-bottom: 16px;
|
||||
margin-bottom: 12px;
|
||||
background: #fff;
|
||||
border-radius: 6px;
|
||||
padding: 14px 16px;
|
||||
@@ -2016,7 +2016,7 @@ export default {
|
||||
margin: 0 0 16px;
|
||||
background: #fff;
|
||||
border-radius: 6px;
|
||||
padding: 12px;
|
||||
padding: 12px 0;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
|
||||
}
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@ export default {
|
||||
prop: 'oldData',
|
||||
type: 'textarea',
|
||||
span: 24,
|
||||
minRows: 3,
|
||||
minRows: 2,
|
||||
hide: true,
|
||||
},
|
||||
{
|
||||
@@ -208,7 +208,7 @@ export default {
|
||||
prop: 'newData',
|
||||
type: 'textarea',
|
||||
span: 24,
|
||||
minRows: 3,
|
||||
minRows: 2,
|
||||
hide: true,
|
||||
},
|
||||
{
|
||||
@@ -216,7 +216,7 @@ export default {
|
||||
prop: 'recordResult',
|
||||
type: 'textarea',
|
||||
span: 24,
|
||||
minRows: 3,
|
||||
minRows: 2,
|
||||
hide: true,
|
||||
},
|
||||
{
|
||||
|
||||
@@ -153,7 +153,7 @@ const option = reactive({
|
||||
url: 'link',
|
||||
},
|
||||
hide: true,
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
},
|
||||
],
|
||||
|
||||
@@ -155,7 +155,7 @@ export default {
|
||||
url: 'link',
|
||||
},
|
||||
hide: true,
|
||||
minRows: 4,
|
||||
minRows: 2,
|
||||
span: 24,
|
||||
},
|
||||
|
||||
|
||||
@@ -21,12 +21,24 @@
|
||||
<el-tag>{{ row.suspensionState === 1 ? '激活' : '挂起' }}</el-tag>
|
||||
</template>
|
||||
</avue-crud>
|
||||
<el-dialog title="流程删除" append-to-body v-model="followBox" width="20%">
|
||||
<el-form :model="form" ref="form" label-width="auto">
|
||||
<el-form-item label="删除理由">
|
||||
<el-input v-model="deleteReason" placeholder="请输入删除理由" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-dialog
|
||||
title="流程删除"
|
||||
append-to-body
|
||||
v-model="followBox"
|
||||
width="400px"
|
||||
class="dialog-form--carded"
|
||||
>
|
||||
<section-card title="删除理由">
|
||||
<el-form :model="form" ref="form" label-position="right" label-width="calc(6em + 24px)">
|
||||
<el-row :gutter="18">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="删除理由">
|
||||
<el-input v-model="deleteReason" placeholder="请输入删除理由" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</section-card>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="followBox = false">关 闭</el-button>
|
||||
|
||||
+26
-14
@@ -81,20 +81,32 @@
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<el-dialog title="流程变更" append-to-body v-model="stateBox" width="20%">
|
||||
<el-form :model="form" ref="form" label-width="auto">
|
||||
<el-form-item label="流程状态">
|
||||
<el-select v-model="flowState" placeholder="请选择" value="">
|
||||
<el-option
|
||||
v-for="item in stateOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-dialog
|
||||
title="流程变更"
|
||||
append-to-body
|
||||
v-model="stateBox"
|
||||
width="400px"
|
||||
class="dialog-form--carded"
|
||||
>
|
||||
<section-card title="流程状态">
|
||||
<el-form :model="form" ref="form" label-position="right" label-width="calc(6em + 24px)">
|
||||
<el-row :gutter="18">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="流程状态">
|
||||
<el-select v-model="flowState" placeholder="请选择" value="">
|
||||
<el-option
|
||||
v-for="item in stateOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</section-card>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="stateBox = false">关 闭</el-button>
|
||||
|
||||
@@ -61,38 +61,60 @@
|
||||
</el-drawer>
|
||||
|
||||
<!-- 手动锁定用户 -->
|
||||
<el-dialog title="锁定用户" append-to-body v-model="lockUserBox" width="500px">
|
||||
<el-form :model="lockUserForm" label-width="auto" :rules="lockUserRules" ref="lockUserFormRef">
|
||||
<el-form-item label="用户账号">
|
||||
<el-input :model-value="lockUserForm.account" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="锁定原因" prop="lockReason">
|
||||
<el-input
|
||||
v-model="lockUserForm.lockReason"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
placeholder="请输入锁定原因"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="锁定开始" prop="lockBeginTime">
|
||||
<el-date-picker
|
||||
v-model="lockUserForm.lockBeginTime"
|
||||
type="datetime"
|
||||
placeholder="不填则立即生效"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="锁定结束" prop="lockEndTime">
|
||||
<el-date-picker
|
||||
v-model="lockUserForm.lockEndTime"
|
||||
type="datetime"
|
||||
placeholder="不填则永久锁定"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-dialog
|
||||
title="锁定用户"
|
||||
append-to-body
|
||||
v-model="lockUserBox"
|
||||
width="520px"
|
||||
class="dialog-form--carded"
|
||||
>
|
||||
<section-card title="锁定信息">
|
||||
<el-form
|
||||
:model="lockUserForm"
|
||||
label-position="right"
|
||||
label-width="calc(6em + 24px)"
|
||||
:rules="lockUserRules"
|
||||
ref="lockUserFormRef"
|
||||
>
|
||||
<el-row :gutter="18">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="用户账号">
|
||||
<el-input :model-value="lockUserForm.account" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="锁定原因" prop="lockReason">
|
||||
<el-input
|
||||
v-model="lockUserForm.lockReason"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
placeholder="请输入锁定原因"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="锁定开始" prop="lockBeginTime">
|
||||
<el-date-picker
|
||||
v-model="lockUserForm.lockBeginTime"
|
||||
type="datetime"
|
||||
placeholder="不填则立即生效"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="锁定结束" prop="lockEndTime">
|
||||
<el-date-picker
|
||||
v-model="lockUserForm.lockEndTime"
|
||||
type="datetime"
|
||||
placeholder="不填则永久锁定"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</section-card>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="lockUserBox = false">取 消</el-button>
|
||||
@@ -102,17 +124,33 @@
|
||||
</el-dialog>
|
||||
|
||||
<!-- 解锁原因确认 -->
|
||||
<el-dialog title="解锁确认" append-to-body v-model="unlockReasonBox" width="450px">
|
||||
<el-form :model="unlockReasonForm" label-width="auto">
|
||||
<el-form-item label="解锁原因">
|
||||
<el-input
|
||||
v-model="unlockReasonForm.unlockReason"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
placeholder="请输入解锁原因(可选)"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-dialog
|
||||
title="解锁确认"
|
||||
append-to-body
|
||||
v-model="unlockReasonBox"
|
||||
width="520px"
|
||||
class="dialog-form--carded"
|
||||
>
|
||||
<section-card title="解锁原因">
|
||||
<el-form
|
||||
:model="unlockReasonForm"
|
||||
label-position="right"
|
||||
label-width="calc(6em + 24px)"
|
||||
>
|
||||
<el-row :gutter="18">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="解锁原因">
|
||||
<el-input
|
||||
v-model="unlockReasonForm.unlockReason"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
placeholder="请输入解锁原因(可选)"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</section-card>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="unlockReasonBox = false">取 消</el-button>
|
||||
|
||||
+46
-28
@@ -126,37 +126,55 @@
|
||||
<el-dialog
|
||||
:title="title"
|
||||
v-model="box"
|
||||
width="50%"
|
||||
width="560px"
|
||||
:before-close="beforeClose"
|
||||
append-to-body
|
||||
class="dialog-form--carded"
|
||||
>
|
||||
<el-form :disabled="view" ref="form" :model="form" label-width="auto">
|
||||
<!-- 表单字段 -->
|
||||
<el-form-item label="参数名:" prop="paramName">
|
||||
<el-input v-model="form.paramName" placeholder="请输入参数名" />
|
||||
</el-form-item>
|
||||
<el-form-item prop="paramKey">
|
||||
<template #label>
|
||||
<el-tooltip content="参数键为系统内部唯一标识,请勿随意修改" placement="top">
|
||||
<el-icon style="margin-right: 4px; vertical-align: middle; color: #909399; cursor: pointer"><el-icon-question-filled /></el-icon>
|
||||
</el-tooltip>
|
||||
<span>参数键:</span>
|
||||
</template>
|
||||
<el-input v-model="form.paramKey" placeholder="请输入参数键" />
|
||||
</el-form-item>
|
||||
<el-form-item prop="paramValue">
|
||||
<template #label>
|
||||
<el-tooltip content="包含敏感关键词的配置不展示具体数值" placement="top">
|
||||
<el-icon style="margin-right: 4px; vertical-align: middle; color: #909399; cursor: pointer"><el-icon-question-filled /></el-icon>
|
||||
</el-tooltip>
|
||||
<span>参数值:</span>
|
||||
</template>
|
||||
<el-input v-model="form.paramValue" placeholder="请输入参数值" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注:" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<section-card title="参数信息">
|
||||
<el-form
|
||||
:disabled="view"
|
||||
ref="form"
|
||||
:model="form"
|
||||
label-position="right"
|
||||
label-width="calc(6em + 24px)"
|
||||
>
|
||||
<el-row :gutter="18">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="参数名" prop="paramName">
|
||||
<el-input v-model="form.paramName" placeholder="请输入参数名" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="paramKey">
|
||||
<template #label>
|
||||
<el-tooltip content="参数键为系统内部唯一标识,请勿随意修改" placement="top">
|
||||
<el-icon style="margin-right: 4px; vertical-align: middle; color: #909399; cursor: pointer"><el-icon-question-filled /></el-icon>
|
||||
</el-tooltip>
|
||||
<span>参数键</span>
|
||||
</template>
|
||||
<el-input v-model="form.paramKey" placeholder="请输入参数键" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="paramValue">
|
||||
<template #label>
|
||||
<el-tooltip content="包含敏感关键词的配置不展示具体数值" placement="top">
|
||||
<el-icon style="margin-right: 4px; vertical-align: middle; color: #909399; cursor: pointer"><el-icon-question-filled /></el-icon>
|
||||
</el-tooltip>
|
||||
<span>参数值</span>
|
||||
</template>
|
||||
<el-input v-model="form.paramValue" placeholder="请输入参数值" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</section-card>
|
||||
<!-- 表单按钮 -->
|
||||
<template #footer>
|
||||
<span v-if="!view" class="dialog-footer">
|
||||
|
||||
@@ -216,7 +216,7 @@ export default {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
span: 24,
|
||||
minRows: 3,
|
||||
minRows: 2,
|
||||
hide: true,
|
||||
type: 'textarea',
|
||||
},
|
||||
|
||||
+53
-34
@@ -181,27 +181,29 @@
|
||||
top="5vh"
|
||||
append-to-body
|
||||
destroy-on-close
|
||||
class="user-edit-dialog"
|
||||
class="user-edit-dialog dialog-form--carded"
|
||||
>
|
||||
<template #header>
|
||||
<span class="dialog-title">{{ userDialogMode === 'add' ? '新增用户' : '编辑用户' }}</span>
|
||||
</template>
|
||||
<el-form ref="userFormRef" :model="form" :rules="userRules" label-position="right" label-width="120px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6"><el-form-item label="账号名" prop="account"><el-input v-model="form.account" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="姓名" prop="realName"><el-input v-model="form.realName" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="手机号" prop="phone"><el-input v-model="form.phone" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="邮箱"><el-input v-model="form.email" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="性别"><el-select v-model="form.sex" class="full-width"><el-option label="男" :value="1" /><el-option label="女" :value="2" /><el-option label="未知" :value="3" /></el-select></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="岗位" prop="postId"><el-tree-select v-model="form.postId" :data="postList" :props="{ label: 'postName', value: 'id' }" check-strictly class="full-width" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="所属组织" prop="deptId"><el-tree-select v-model="form.deptId" :data="permissionDeptTree" :props="{ label: 'title', value: 'id' }" multiple check-strictly show-checkbox class="full-width" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="工号"><el-input v-model="form.code" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="人员类别"><el-select v-model="form.personCategory" class="full-width"><el-option label="内部员工" :value="1" /><el-option label="承运商" :value="2" /></el-select></el-form-item></el-col>
|
||||
<el-col :span="18"><el-form-item label="数据权限范围"><el-radio-group v-model="form.dataScopeRange"><el-radio :value="1">仅所属组织</el-radio><el-radio :value="2">全部组织</el-radio><el-radio :value="3">自定义</el-radio></el-radio-group></el-form-item></el-col>
|
||||
<el-col :span="18" :offset="6"><el-form-item label="数据层级范围"><el-radio-group v-model="form.dataLevelRange"><el-radio :value="1">包含下级</el-radio><el-radio :value="2">仅本级</el-radio></el-radio-group></el-form-item></el-col>
|
||||
<el-col :span="24"><el-form-item label="备注"><el-input v-model="form.remark" type="textarea" :rows="3" maxlength="200" show-word-limit /></el-form-item></el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<section-card title="用户信息">
|
||||
<el-form ref="userFormRef" :model="form" :rules="userRules" label-position="right" label-width="calc(6em + 24px)">
|
||||
<el-row :gutter="18">
|
||||
<el-col :span="6"><el-form-item label="账号名" prop="account"><el-input v-model="form.account" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="姓名" prop="realName"><el-input v-model="form.realName" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="手机号" prop="phone"><el-input v-model="form.phone" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="邮箱"><el-input v-model="form.email" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="性别"><el-select v-model="form.sex"><el-option label="男" :value="1" /><el-option label="女" :value="2" /><el-option label="未知" :value="3" /></el-select></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="岗位" prop="postId"><el-tree-select v-model="form.postId" :data="postList" :props="{ label: 'postName', value: 'id' }" check-strictly /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="所属组织" prop="deptId"><el-tree-select v-model="form.deptId" :data="permissionDeptTree" :props="{ label: 'title', value: 'id' }" multiple check-strictly show-checkbox /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="工号"><el-input v-model="form.code" /></el-form-item></el-col>
|
||||
<el-col :span="6"><el-form-item label="人员类别"><el-select v-model="form.personCategory"><el-option label="内部员工" :value="1" /><el-option label="承运商" :value="2" /></el-select></el-form-item></el-col>
|
||||
<el-col :span="18"><el-form-item label="数据权限范围"><el-radio-group v-model="form.dataScopeRange"><el-radio :value="1">仅所属组织</el-radio><el-radio :value="2">全部组织</el-radio><el-radio :value="3">自定义</el-radio></el-radio-group></el-form-item></el-col>
|
||||
<el-col :span="18" :offset="6"><el-form-item label="数据层级范围"><el-radio-group v-model="form.dataLevelRange"><el-radio :value="1">包含下级</el-radio><el-radio :value="2">仅本级</el-radio></el-radio-group></el-form-item></el-col>
|
||||
<el-col :span="24"><el-form-item label="备注"><el-input v-model="form.remark" type="textarea" :rows="3" maxlength="200" show-word-limit /></el-form-item></el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</section-card>
|
||||
<el-tabs class="user-permission-tabs">
|
||||
<el-tab-pane label="已拥有角色">
|
||||
<el-table :data="formRoleList" border>
|
||||
@@ -288,23 +290,40 @@
|
||||
</el-dialog>
|
||||
|
||||
<!-- 管理员修改密码 -->
|
||||
<el-dialog title="修改密码" append-to-body v-model="passwordBox" width="460px">
|
||||
<el-form
|
||||
ref="passwordFormRef"
|
||||
:model="passwordForm"
|
||||
:rules="passwordRules"
|
||||
label-width="auto"
|
||||
>
|
||||
<el-form-item label="账号名">
|
||||
<el-input v-model="passwordForm.account" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="新密码" prop="password">
|
||||
<el-input v-model="passwordForm.password" type="password" show-password />
|
||||
</el-form-item>
|
||||
<el-form-item label="确认密码" prop="password2">
|
||||
<el-input v-model="passwordForm.password2" type="password" show-password />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-dialog
|
||||
title="修改密码"
|
||||
append-to-body
|
||||
v-model="passwordBox"
|
||||
width="520px"
|
||||
class="dialog-form--carded"
|
||||
>
|
||||
<section-card title="密码信息">
|
||||
<el-form
|
||||
ref="passwordFormRef"
|
||||
:model="passwordForm"
|
||||
:rules="passwordRules"
|
||||
label-position="right"
|
||||
label-width="calc(6em + 24px)"
|
||||
>
|
||||
<el-row :gutter="18">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="账号名">
|
||||
<el-input v-model="passwordForm.account" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="新密码" prop="password">
|
||||
<el-input v-model="passwordForm.password" type="password" show-password />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="确认密码" prop="password2">
|
||||
<el-input v-model="passwordForm.password2" type="password" show-password />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</section-card>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="passwordBox = false">取 消</el-button>
|
||||
|
||||
@@ -217,7 +217,7 @@ export default {
|
||||
label: '备注',
|
||||
prop: 'remark',
|
||||
span: 24,
|
||||
minRows: 3,
|
||||
minRows: 2,
|
||||
hide: true,
|
||||
type: 'textarea',
|
||||
},
|
||||
|
||||
@@ -967,179 +967,181 @@
|
||||
class="score-detail-dialog"
|
||||
@closed="resetScoreDialog"
|
||||
>
|
||||
<el-form
|
||||
ref="scoreForm"
|
||||
:model="currentScore"
|
||||
label-position="right"
|
||||
label-width="auto"
|
||||
:disabled="readonly"
|
||||
class="score-detail-form"
|
||||
>
|
||||
<el-row :gutter="42">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="评定日期" required>
|
||||
<el-date-picker
|
||||
v-model="currentScore.scoreDate"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="拟申请总资金使用额度(万元)" required>
|
||||
<el-input
|
||||
v-model="currentScore.applyCreditLimit"
|
||||
maxlength="18"
|
||||
@input="value => handleScoreDecimalInput('applyCreditLimit', value)"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="最终得分">
|
||||
<el-input :model-value="formatScoreValue(currentScore.finalScore)" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="临时额度申请使用期限">
|
||||
<div class="score-detail-form__range">
|
||||
<section-card>
|
||||
<el-form
|
||||
ref="scoreForm"
|
||||
:model="currentScore"
|
||||
label-position="right"
|
||||
label-width="auto"
|
||||
:disabled="readonly"
|
||||
class="score-detail-form"
|
||||
>
|
||||
<el-row :gutter="42">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="评定日期" required>
|
||||
<el-date-picker
|
||||
v-model="currentScore.tempCreditStartDate"
|
||||
v-model="currentScore.scoreDate"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
/>
|
||||
<span>至</span>
|
||||
<el-date-picker
|
||||
v-model="currentScore.tempCreditEndDate"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
</el-form-item>
|
||||
<el-form-item label="拟申请总资金使用额度(万元)" required>
|
||||
<el-input
|
||||
v-model="currentScore.applyCreditLimit"
|
||||
maxlength="18"
|
||||
@input="value => handleScoreDecimalInput('applyCreditLimit', value)"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="最大资金使用额度(万元)">
|
||||
<el-input
|
||||
:model-value="formatScoreValue(currentScore.maxCreditLimit)"
|
||||
disabled
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="信用等级">
|
||||
<el-input :model-value="formatScoreValue(currentScore.creditLevel)" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="临时申请额度">
|
||||
<el-input
|
||||
v-model="currentScore.tempApplyCreditLimit"
|
||||
maxlength="18"
|
||||
@input="value => handleScoreDecimalInput('tempApplyCreditLimit', value)"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="currentScore.remark" maxlength="200" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="评分量化表" required>
|
||||
<el-select
|
||||
v-model="currentScore.quantificationId"
|
||||
filterable
|
||||
clearable
|
||||
:loading="scoreQuantificationLoading"
|
||||
placeholder="请选择评分量化表"
|
||||
@change="handleScoreQuantificationChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in scoreQuantificationOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="String(item.id)"
|
||||
</el-form-item>
|
||||
<el-form-item label="最终得分">
|
||||
<el-input :model-value="formatScoreValue(currentScore.finalScore)" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="临时额度申请使用期限">
|
||||
<div class="score-detail-form__range">
|
||||
<el-date-picker
|
||||
v-model="currentScore.tempCreditStartDate"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
/>
|
||||
<span>至</span>
|
||||
<el-date-picker
|
||||
v-model="currentScore.tempCreditEndDate"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="最大资金使用额度(万元)">
|
||||
<el-input
|
||||
:model-value="formatScoreValue(currentScore.maxCreditLimit)"
|
||||
disabled
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-form-item>
|
||||
<el-form-item label="信用等级">
|
||||
<el-input :model-value="formatScoreValue(currentScore.creditLevel)" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="临时申请额度">
|
||||
<el-input
|
||||
v-model="currentScore.tempApplyCreditLimit"
|
||||
maxlength="18"
|
||||
@input="value => handleScoreDecimalInput('tempApplyCreditLimit', value)"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="currentScore.remark" maxlength="200" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="评分量化表" required>
|
||||
<el-select
|
||||
v-model="currentScore.quantificationId"
|
||||
filterable
|
||||
clearable
|
||||
:loading="scoreQuantificationLoading"
|
||||
placeholder="请选择评分量化表"
|
||||
@change="handleScoreQuantificationChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in scoreQuantificationOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="String(item.id)"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<el-table
|
||||
v-if="currentScore.quantificationId"
|
||||
ref="scoreCategoryTable"
|
||||
:data="scoreCategoryRows"
|
||||
border
|
||||
:show-header="false"
|
||||
row-key="categoryCode"
|
||||
:expand-row-keys="expandedScoreCategoryKeys"
|
||||
class="score-category-table"
|
||||
@row-click="toggleScoreCategory"
|
||||
@expand-change="handleScoreCategoryExpandChange"
|
||||
>
|
||||
<el-table-column type="expand" width="1" class-name="score-category-table__expand-column">
|
||||
<template #default="{ row }">
|
||||
<el-table
|
||||
:data="getScoreCategoryDetails(row.categoryCode)"
|
||||
border
|
||||
class="score-detail-table score-detail-table--inline"
|
||||
max-height="520"
|
||||
>
|
||||
<el-table-column label="评分项目" prop="itemName" width="150" align="center" />
|
||||
<el-table-column label="评分标准" min-width="430">
|
||||
<template #default="{ row: detail }">
|
||||
<div class="score-standard-cell">
|
||||
<div class="score-standard-cell__label">请选择:</div>
|
||||
<el-select
|
||||
v-model="detail.selectedOption"
|
||||
filterable
|
||||
:disabled="readonly"
|
||||
@change="scoreOptionChange(detail, $event)"
|
||||
<el-table
|
||||
v-if="currentScore.quantificationId"
|
||||
ref="scoreCategoryTable"
|
||||
:data="scoreCategoryRows"
|
||||
border
|
||||
:show-header="false"
|
||||
row-key="categoryCode"
|
||||
:expand-row-keys="expandedScoreCategoryKeys"
|
||||
class="score-category-table"
|
||||
@row-click="toggleScoreCategory"
|
||||
@expand-change="handleScoreCategoryExpandChange"
|
||||
>
|
||||
<el-table-column type="expand" width="1" class-name="score-category-table__expand-column">
|
||||
<template #default="{ row }">
|
||||
<el-table
|
||||
:data="getScoreCategoryDetails(row.categoryCode)"
|
||||
border
|
||||
class="score-detail-table score-detail-table--inline"
|
||||
max-height="520"
|
||||
>
|
||||
<el-table-column label="评分项目" prop="itemName" width="150" align="center" />
|
||||
<el-table-column label="评分标准" min-width="430">
|
||||
<template #default="{ row: detail }">
|
||||
<div class="score-standard-cell">
|
||||
<div class="score-standard-cell__label">请选择:</div>
|
||||
<el-select
|
||||
v-model="detail.selectedOption"
|
||||
filterable
|
||||
:disabled="readonly"
|
||||
@change="scoreOptionChange(detail, $event)"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in parseScoreOptions(detail.optionsJson)"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="得分说明" prop="scoreDescription" min-width="160" />
|
||||
<el-table-column label="自评得分" width="130" align="center">
|
||||
<template #default="{ row: detail }">
|
||||
<span>{{ formatScoreValue(getSignedScore(detail, 'selfScore')) }}分</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="复评得分" width="150" align="center">
|
||||
<template #default="{ row: detail }">
|
||||
<el-input
|
||||
v-model="detail.reviewScore"
|
||||
maxlength="10"
|
||||
inputmode="numeric"
|
||||
:disabled="readonly || !hasPermission('customer_type_re_cert')"
|
||||
@input="value => handleScoreDetailScoreInput(detail, 'reviewScore', value)"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in parseScoreOptions(detail.optionsJson)"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="得分说明" prop="scoreDescription" min-width="160" />
|
||||
<el-table-column label="自评得分" width="130" align="center">
|
||||
<template #default="{ row: detail }">
|
||||
<span>{{ formatScoreValue(getSignedScore(detail, 'selfScore')) }}分</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="复评得分" width="150" align="center">
|
||||
<template #default="{ row: detail }">
|
||||
<el-input
|
||||
v-model="detail.reviewScore"
|
||||
maxlength="10"
|
||||
inputmode="numeric"
|
||||
:disabled="readonly || !hasPermission('customer_type_re_cert')"
|
||||
@input="value => handleScoreDetailScoreInput(detail, 'reviewScore', value)"
|
||||
>
|
||||
<template v-if="isMinusScoreDetail(detail) && Number(detail.reviewScore) > 0" #prefix>
|
||||
-
|
||||
</template>
|
||||
<template #suffix>分</template>
|
||||
</el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="序号" prop="index" width="50" align="center" />
|
||||
<el-table-column min-width="560">
|
||||
<template #default="{ row }">
|
||||
<span class="score-category-table__name">{{ row.categoryName }}</span>
|
||||
<span>自评:{{ getSignedScore(row, 'selfScore') }}分</span>
|
||||
<span>复评:{{ getSignedScore(row, 'reviewScore') }}分</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="60" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-icon
|
||||
class="score-category-table__arrow"
|
||||
:class="{ 'is-expanded': isScoreCategoryExpanded(row.categoryCode) }"
|
||||
>
|
||||
<ArrowRight />
|
||||
</el-icon>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<template v-if="isMinusScoreDetail(detail) && Number(detail.reviewScore) > 0" #prefix>
|
||||
-
|
||||
</template>
|
||||
<template #suffix>分</template>
|
||||
</el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="序号" prop="index" width="50" align="center" />
|
||||
<el-table-column min-width="560">
|
||||
<template #default="{ row }">
|
||||
<span class="score-category-table__name">{{ row.categoryName }}</span>
|
||||
<span>自评:{{ getSignedScore(row, 'selfScore') }}分</span>
|
||||
<span>复评:{{ getSignedScore(row, 'reviewScore') }}分</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="60" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-icon
|
||||
class="score-category-table__arrow"
|
||||
:class="{ 'is-expanded': isScoreCategoryExpanded(row.categoryCode) }"
|
||||
>
|
||||
<ArrowRight />
|
||||
</el-icon>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</section-card>
|
||||
|
||||
<section-card title="证明材料" class="score-material-card">
|
||||
<template #extra>
|
||||
@@ -3797,7 +3799,7 @@ export default {
|
||||
}
|
||||
|
||||
.archive-detail-card {
|
||||
margin-top: 8px;
|
||||
margin-top: 12px;
|
||||
}
|
||||
.archive-tabs {
|
||||
:deep(.el-tabs__header) {
|
||||
@@ -3849,7 +3851,7 @@ export default {
|
||||
|
||||
.score-category-table {
|
||||
width: calc(100% - 72px);
|
||||
margin: 8px 36px 0;
|
||||
margin: 8px 36px 16px;
|
||||
|
||||
:deep(.el-table__body td) {
|
||||
height: 56px;
|
||||
|
||||
Reference in New Issue
Block a user