|
@@ -70,7 +70,7 @@
|
|
|
</template>
|
|
</template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
|
|
|
|
|
- <el-table-column label="附件管理" align="center" prop="annex" />
|
|
|
|
|
|
|
+ <!-- <el-table-column label="附件管理" align="center" prop="annex" /> -->
|
|
|
<el-table-column v-if="!isViewMode" label="操作" align="center" class-name="small-padding fixed-width">
|
|
<el-table-column v-if="!isViewMode" label="操作" align="center" class-name="small-padding fixed-width">
|
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['customer:contract:edit']">编辑</el-button>
|
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['customer:contract:edit']">编辑</el-button>
|
|
@@ -92,12 +92,12 @@
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
|
<el-form-item label="合同名称" prop="contractName">
|
|
<el-form-item label="合同名称" prop="contractName">
|
|
|
- <el-input v-model="form.contractName" placeholder="请输入合同名称" :disabled="isViewMode" />
|
|
|
|
|
|
|
+ <el-input v-model="form.contractName" placeholder="请输入合同名称" :disabled="isDisabled" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
|
<el-form-item label="合同类型" prop="contractType">
|
|
<el-form-item label="合同类型" prop="contractType">
|
|
|
- <el-select v-model="form.contractType" placeholder="请选择合同类型" class="w-full" :disabled="isViewMode">
|
|
|
|
|
|
|
+ <el-select v-model="form.contractType" placeholder="请选择合同类型" class="w-full" :disabled="isDisabled">
|
|
|
<el-option v-for="dict in contract_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
|
<el-option v-for="dict in contract_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -106,7 +106,7 @@
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
|
<el-form-item label="合同金额" prop="contractAmount">
|
|
<el-form-item label="合同金额" prop="contractAmount">
|
|
|
- <el-input v-model="form.contractAmount" placeholder="请输入合同金额" :disabled="isViewMode" />
|
|
|
|
|
|
|
+ <el-input v-model="form.contractAmount" placeholder="请输入合同金额" :disabled="isDisabled" @input="handleAmountInput" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
@@ -116,19 +116,19 @@
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
|
<el-form-item label="客户名称" prop="customerName">
|
|
<el-form-item label="客户名称" prop="customerName">
|
|
|
- <el-input v-model="form.customerName" placeholder="请输入客户名称" :disabled="isViewMode" />
|
|
|
|
|
|
|
+ <el-input v-model="form.customerName" placeholder="请输入客户名称" :disabled="isDisabled" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
|
<el-form-item label="客户负责人" prop="customerLeader">
|
|
<el-form-item label="客户负责人" prop="customerLeader">
|
|
|
- <el-input v-model="form.customerLeader" placeholder="请输入客户负责人" :disabled="isViewMode" />
|
|
|
|
|
|
|
+ <el-input v-model="form.customerLeader" placeholder="请输入客户负责人" :disabled="isDisabled" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
|
<el-form-item label="我方负责人" prop="projectLeader">
|
|
<el-form-item label="我方负责人" prop="projectLeader">
|
|
|
- <el-input v-model="form.projectLeader" placeholder="请输入我方负责人" :disabled="isViewMode" />
|
|
|
|
|
|
|
+ <el-input v-model="form.projectLeader" placeholder="请输入我方负责人" :disabled="isDisabled" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
<el-col :span="8">
|
|
@@ -140,7 +140,7 @@
|
|
|
placeholder="请选择起始时间"
|
|
placeholder="请选择起始时间"
|
|
|
class="w-full"
|
|
class="w-full"
|
|
|
style="width: 100%"
|
|
style="width: 100%"
|
|
|
- :disabled="isViewMode"
|
|
|
|
|
|
|
+ :disabled="isDisabled"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
@@ -156,7 +156,7 @@
|
|
|
placeholder="请选择截止时间"
|
|
placeholder="请选择截止时间"
|
|
|
class="w-full"
|
|
class="w-full"
|
|
|
style="width: 100%"
|
|
style="width: 100%"
|
|
|
- :disabled="isViewMode"
|
|
|
|
|
|
|
+ :disabled="isDisabled"
|
|
|
:disabled-date="disabledEndDate"
|
|
:disabled-date="disabledEndDate"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -165,17 +165,20 @@
|
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
|
<el-col :span="16">
|
|
<el-col :span="16">
|
|
|
<el-form-item label="附件管理" prop="annex">
|
|
<el-form-item label="附件管理" prop="annex">
|
|
|
- <el-upload action="#" :auto-upload="false" :disabled="isViewMode">
|
|
|
|
|
- <el-button type="primary" :disabled="isViewMode">选择文件</el-button>
|
|
|
|
|
- </el-upload>
|
|
|
|
|
|
|
+ <FileUpload
|
|
|
|
|
+ v-model="form.annex"
|
|
|
|
|
+ :file-size="5"
|
|
|
|
|
+ :file-type="['jpg', 'jpeg', 'png', 'xlsx', 'xls', 'doc', 'docx', 'pdf']"
|
|
|
|
|
+ :disabled="isDisabled"
|
|
|
|
|
+ />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
|
- <el-button v-if="!isViewMode" :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
|
|
|
|
- <el-button @click="cancel">{{ isViewMode ? '关 闭' : '取 消' }}</el-button>
|
|
|
|
|
|
|
+ <el-button v-if="!isDisabled" :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
|
|
|
|
+ <el-button @click="cancel">{{ isDisabled ? '关 闭' : '取 消' }}</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</el-drawer>
|
|
</el-drawer>
|
|
@@ -198,6 +201,8 @@ const { contract_type, contract_status } = toRefs<any>(proxy?.useDict('contract_
|
|
|
|
|
|
|
|
// 查看模式
|
|
// 查看模式
|
|
|
const isViewMode = computed(() => route.query.status === 'view');
|
|
const isViewMode = computed(() => route.query.status === 'view');
|
|
|
|
|
+const isDialogView = ref(false);
|
|
|
|
|
+const isDisabled = computed(() => isViewMode.value || isDialogView.value);
|
|
|
|
|
|
|
|
const contractList = ref<ContractVO[]>([]);
|
|
const contractList = ref<ContractVO[]>([]);
|
|
|
const buttonLoading = ref(false);
|
|
const buttonLoading = ref(false);
|
|
@@ -261,7 +266,10 @@ const data = reactive<PageData<ContractForm, ContractQuery>>({
|
|
|
},
|
|
},
|
|
|
rules: {
|
|
rules: {
|
|
|
customerNo: [{ required: true, message: '客户编号不能为空', trigger: 'blur' }],
|
|
customerNo: [{ required: true, message: '客户编号不能为空', trigger: 'blur' }],
|
|
|
- contractAmount: [{ required: true, message: '合同金额不能为空', trigger: 'blur' }],
|
|
|
|
|
|
|
+ contractAmount: [
|
|
|
|
|
+ { required: true, message: '合同金额不能为空', trigger: 'blur' },
|
|
|
|
|
+ { pattern: /^\d+(\.\d{1,6})?$/ as RegExp, message: '金额最多6位小数', trigger: 'blur' }
|
|
|
|
|
+ ],
|
|
|
contractType: [{ required: true, message: '合同类型不能为空', trigger: 'change' }],
|
|
contractType: [{ required: true, message: '合同类型不能为空', trigger: 'change' }],
|
|
|
startTime: [{ required: true, message: '合同开始时间不能为空', trigger: 'blur' }],
|
|
startTime: [{ required: true, message: '合同开始时间不能为空', trigger: 'blur' }],
|
|
|
endTime: [{ required: true, message: '合同结束时间不能为空', trigger: 'blur' }]
|
|
endTime: [{ required: true, message: '合同结束时间不能为空', trigger: 'blur' }]
|
|
@@ -304,6 +312,20 @@ const cancel = () => {
|
|
|
const reset = () => {
|
|
const reset = () => {
|
|
|
form.value = { ...initFormData };
|
|
form.value = { ...initFormData };
|
|
|
contractFormRef.value?.resetFields();
|
|
contractFormRef.value?.resetFields();
|
|
|
|
|
+ isDialogView.value = false;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+/** 过滤金额输入:仅允许数字和一个小数点,小数位最多6位 */
|
|
|
|
|
+const handleAmountInput = (val: string) => {
|
|
|
|
|
+ let value = val.replace(/[^\d.]/g, '');
|
|
|
|
|
+ const parts = value.split('.');
|
|
|
|
|
+ if (parts.length > 2) {
|
|
|
|
|
+ value = parts[0] + '.' + parts.slice(1).join('');
|
|
|
|
|
+ }
|
|
|
|
|
+ if (parts[0] !== undefined && parts[1] !== undefined && parts[1].length > 6) {
|
|
|
|
|
+ value = parts[0] + '.' + parts[1].slice(0, 6);
|
|
|
|
|
+ }
|
|
|
|
|
+ form.value.contractAmount = value;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/** 搜索按钮操作 */
|
|
/** 搜索按钮操作 */
|
|
@@ -338,6 +360,7 @@ const handleAdd = () => {
|
|
|
if (props.customerName) {
|
|
if (props.customerName) {
|
|
|
form.value.customerName = props.customerName;
|
|
form.value.customerName = props.customerName;
|
|
|
}
|
|
}
|
|
|
|
|
+ isDialogView.value = false;
|
|
|
dialog.visible = true;
|
|
dialog.visible = true;
|
|
|
dialog.title = '添加客户合同';
|
|
dialog.title = '添加客户合同';
|
|
|
};
|
|
};
|
|
@@ -348,6 +371,7 @@ const handleUpdate = async (row?: ContractVO) => {
|
|
|
const _id = row?.id || ids.value[0];
|
|
const _id = row?.id || ids.value[0];
|
|
|
const res = await getContract(_id);
|
|
const res = await getContract(_id);
|
|
|
Object.assign(form.value, res.data);
|
|
Object.assign(form.value, res.data);
|
|
|
|
|
+ isDialogView.value = false;
|
|
|
dialog.visible = true;
|
|
dialog.visible = true;
|
|
|
dialog.title = '修改客户合同';
|
|
dialog.title = '修改客户合同';
|
|
|
};
|
|
};
|
|
@@ -357,6 +381,7 @@ const handleReview = async (row?: ContractVO) => {
|
|
|
const _id = row?.id || ids.value[0];
|
|
const _id = row?.id || ids.value[0];
|
|
|
const res = await getContract(_id);
|
|
const res = await getContract(_id);
|
|
|
Object.assign(form.value, res.data);
|
|
Object.assign(form.value, res.data);
|
|
|
|
|
+ isDialogView.value = true;
|
|
|
dialog.visible = true;
|
|
dialog.visible = true;
|
|
|
dialog.title = '查看合同详情';
|
|
dialog.title = '查看合同详情';
|
|
|
};
|
|
};
|