This commit is contained in:
zmj 2024-04-07 18:06:06 +08:00
parent 6d9813e77e
commit 685d39ce11
68 changed files with 4177 additions and 348 deletions

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 市场经营--分支机构备案列表
export function apiMarketingBranchFilingLists(params: any) {
return request.get({ url: '/marketing.marketing_branch_filing/lists', params })
}
// 添加市场经营--分支机构备案
export function apiMarketingBranchFilingAdd(params: any) {
return request.post({ url: '/marketing.marketing_branch_filing/add', params })
}
// 编辑市场经营--分支机构备案
export function apiMarketingBranchFilingEdit(params: any) {
return request.post({ url: '/marketing.marketing_branch_filing/edit', params })
}
// 删除市场经营--分支机构备案
export function apiMarketingBranchFilingDelete(params: any) {
return request.post({ url: '/marketing.marketing_branch_filing/delete', params })
}
// 市场经营--分支机构备案详情
export function apiMarketingBranchFilingDetail(params: any) {
return request.get({ url: '/marketing.marketing_branch_filing/detail', params })
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 市场经营--合同信息列表
export function apiMarketingContractLists(params: any) {
return request.get({ url: '/marketing.marketing_contract/lists', params })
}
// 添加市场经营--合同信息
export function apiMarketingContractAdd(params: any) {
return request.post({ url: '/marketing.marketing_contract/add', params })
}
// 编辑市场经营--合同信息
export function apiMarketingContractEdit(params: any) {
return request.post({ url: '/marketing.marketing_contract/edit', params })
}
// 删除市场经营--合同信息
export function apiMarketingContractDelete(params: any) {
return request.post({ url: '/marketing.marketing_contract/delete', params })
}
// 市场经营--合同信息详情
export function apiMarketingContractDetail(params: any) {
return request.get({ url: '/marketing.marketing_contract/detail', params })
}

View File

@ -0,0 +1,35 @@
import request from '@/utils/request'
// 市场经营--项目备案明细列表
export function apimketingFrameworkAgreementLists(params: any) {
return request.get({ url: '/marketing.marketing_framework_agreement/lists', params })
}
// 添加市场经营--项目备案明细
export function apimketingFrameworkAgreementAdd(params: any) {
return request.post({ url: '/marketing.marketing_framework_agreement/add', params })
}
// 编辑市场经营--项目备案明细
export function apimketingFrameworkAgreementEdit(params: any) {
return request.post({ url: '/marketing.marketing_framework_agreement/edit', params })
}
// 删除市场经营--项目备案明细
export function apimketingFrameworkAgreementDelete(params: any) {
return request.post({ url: '/marketing.marketing_framework_agreement/delete', params })
}
// 市场经营--项目备案明细详情
export function apimketingFrameworkAgreementDetail(params: any) {
return request.get({ url: '/marketing.marketing_framework_agreement/detail', params })
}
// 市场经营--项目备案明细列表
export function apimarketingFrameworkAgreementFlows(params: any) {
return request.get({ url: '/marketing.marketing_framework_agreement/flows', params })
}
// 市场经营--项目备案明细列表
export function apimarketingFrameworkAgreementApprove(params: any) {
return request.post({ url: '/marketing.marketing_framework_agreement/approve', params })
}

View File

@ -0,0 +1,12 @@
import request from '@/utils/request'
// 市场经营--项目备案明细列表
export function apiMarketingHandoverContractLists(params: any) {
return request.get({ url: '/marketing.marketing_handover_contract/lists', params })
}
// 添加市场经营--项目备案明细
export function apiMarketingHandoverContractHandover(params: any) {
return request.post({ url: '/marketing.marketing_handover_contract/handover', params })
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 市场经营--项目备案列表
export function apiMarketingProjectFilingLists(params: any) {
return request.get({ url: '/marketing.marketing_project_filing/lists', params })
}
// 添加市场经营--项目备案
export function apiMarketingProjectFilingAdd(params: any) {
return request.post({ url: '/marketing.marketing_project_filing/add', params })
}
// 编辑市场经营--项目备案
export function apiMarketingProjectFilingEdit(params: any) {
return request.post({ url: '/marketing.marketing_project_filing/edit', params })
}
// 删除市场经营--项目备案
export function apiMarketingProjectFilingDelete(params: any) {
return request.post({ url: '/marketing.marketing_project_filing/delete', params })
}
// 市场经营--项目备案详情
export function apiMarketingProjectFilingDetail(params: any) {
return request.get({ url: '/marketing.marketing_project_filing/detail', params })
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 市场经营--项目备案明细列表
export function apiMarketingProjectFilingDetailLists(params: any) {
return request.get({ url: '/marketing.marketing_project_filing_detail/lists', params })
}
// 添加市场经营--项目备案明细
export function apiMarketingProjectFilingDetailAdd(params: any) {
return request.post({ url: '/marketing.marketing_project_filing_detail/add', params })
}
// 编辑市场经营--项目备案明细
export function apiMarketingProjectFilingDetailEdit(params: any) {
return request.post({ url: '/marketing.marketing_project_filing_detail/edit', params })
}
// 删除市场经营--项目备案明细
export function apiMarketingProjectFilingDetailDelete(params: any) {
return request.post({ url: '/marketing.marketing_project_filing_detail/delete', params })
}
// 市场经营--项目备案明细详情
export function apiMarketingProjectFilingDetailDetail(params: any) {
return request.get({ url: '/marketing.marketing_project_filing_detail/detail', params })
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 市场经营--项目备案列表
export function apiMarketingSupplementaryAgreementLists(params: any) {
return request.get({ url: '/marketing.marketing_supplementary_agreement/lists', params })
}
// 添加市场经营--项目备案
export function apiMarketingSupplementaryAgreementAdd(params: any) {
return request.post({ url: '/marketing.marketing_supplementary_agreement/add', params })
}
// 编辑市场经营--项目备案
export function apiMarketingSupplementaryAgreementEdit(params: any) {
return request.post({ url: '/marketing.marketing_supplementary_agreement/edit', params })
}
// 删除市场经营--项目备案
export function apiMarketingSupplementaryAgreementDelete(params: any) {
return request.post({ url: '/marketing.marketing_supplementary_agreement/delete', params })
}
// 市场经营--项目备案详情
export function apiMarketingSupplementaryAgreementDetail(params: any) {
return request.get({ url: '/marketing.marketing_supplementary_agreement/detail', params })
}

View File

@ -7,7 +7,7 @@
<el-table-column label="操作">
<template #default="{ row }">
<el-form-item label-width="0">
<div class="!flex justify-center items-center w-[100%]">
<div class="my-0 mx-auto">
<el-button @click="handleAdd">+</el-button>
<el-button @click="handleDelete(row)">-</el-button>
</div>
@ -20,38 +20,51 @@
<template #default="{ row, $index }">
<!-- 下拉框 -->
<el-form-item v-if="item.select" label-width="0">
<el-select v-model="row[item.value]">
<el-option v-for="items in (Array.isArray(item.select) ? item.select : dictData[item.select])"
:label="items.name" :value="items.value"></el-option>
</el-select>
<div class="my-0 mx-auto">
<el-select v-model="row[item.value]">
<el-option
v-for="items in (Array.isArray(item.select) ? item.select : dictData[item.select])"
:label="items.name" :value="items.value"></el-option>
</el-select>
</div>
</el-form-item>
<!-- 时间框 -->
<el-form-item v-else-if="item.date" :prop="`${item.check[0]}[${$index}].${item.value}`" :rules="item?.check ? {
validator: item.check[1],
trigger: ['blur'],
} : ''" label-width="0">
<el-form-item v-else-if="item.date && !item.check" label-width=" 0">
<el-date-picker class="flex-1 !flex" v-model="row[item.value]" clearable value-format="YYYY-MM-DD"
placeholder="请选择日期">
</el-date-picker>
</el-form-item>
<!-- 带校验的时间框 -->
<el-form-item v-else-if="item.date && item.check" :prop="`${item.check[0]}[${$index}].${item.value}`"
:rules="item?.check ? {
validator: item.check[1],
trigger: ['blur'],
} : ''" label-width="0">
<el-date-picker class="flex-1 !flex" v-model="row[item.value]" clearable value-format="YYYY-MM-DD"
placeholder="请选择日期">
</el-date-picker>
</el-form-item>
<!-- 校验单位不能为数字的文本输入框 -->
<el-form-item v-else-if="item.label.includes('单位')" :prop="item.check ? item.value : ''"
label-width="0">
<el-input v-model="row[item.value]"
@input="row[item.value] = row[item.value].replace(/\d+/g, '')" />
</el-form-item>
<el-form-item v-else-if="item.check" label-width="0" :prop="`${item.check[0]}[${$index}].${item.value}`"
:rules="item?.check ? {
<!-- 自定义校验的文本输入框 -->
<el-form-item v-else-if="item.check && ($index >= 0)" label-width="0"
:prop="`${item.check[0]}[${$index}].${item.value}`" :rules="item?.check ? {
validator: item.check[1],
trigger: ['blur'],
} : ''">
<el-input v-model="row[item.value]" :type="item.type == 'number' ? 'number' : 'text'" />
</el-form-item>
<el-form-item v-else label-width="0">
<!-- 普通文本输入框type为number为数字输入框 -->
<el-form-item label-width="0" v-else>
<el-input v-model="row[item.value]" :type="item.type == 'number' ? 'number' : 'text'" />
</el-form-item>
</template>
@ -97,7 +110,7 @@ const getInitialData = () => {
acc[curr] = '';
return acc;
}, {});
}
};
const handleAdd = () => {
@ -113,4 +126,5 @@ const handleDelete = async (row: any) => {
props.formData.splice(index, 1);
};
</script>

View File

@ -22,9 +22,8 @@ export function isEmail(data: string) {
}
// input框校验
//电话
// 电话
export function checkPhone(rules: any, value: any, callback: any) {
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(
value
)
@ -40,8 +39,9 @@ export function checkEmail(rules: any, value: any, callback: any) {
}
//idcard
export function checkIdcard(rules: any, value: any, callback: any) {
export function checkIdCard(rules: any, value: any, callback: any) {
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)
? callback()
: callback(new Error("请输入正确的身份证号码"));
}

View File

@ -140,8 +140,8 @@
</el-form-item>
</el-col> <el-col :span="8">
<el-form-item label="账号" prop="bank_accnout">
<el-input v-model="formData.bank_accnout" clearable placeholder="请输入开票公司名称" type="number" />
<el-form-item label="银行账号" prop="bank_accnout">
<el-input v-model="formData.bank_accnout" clearable placeholder="请输入银行账号" type="number" />
</el-form-item>
</el-col> <el-col :span="8">

View File

@ -40,7 +40,10 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="预计退还时间" prop="refund_date">
<el-form-item label="预计退还时间" prop="refund_date" :rules="{
validator: chekcDate,
trigger: ['blur']
}">
<el-date-picker class="flex-1 !flex" v-model="formData.refund_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="选择日期">
</el-date-picker>
@ -184,6 +187,15 @@ const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑投标保证金表' : '新增投标保证金表'
})
const chekcDate = (rule: any, value: any, callback: any) => {
if (new Date(formData.refund_date) < new Date(bidding_time.value)) {
callback(new Error('预计退还时间不能早于投标时间'))
} else {
callback()
}
}
//
const formData = reactive({
id: '',

View File

@ -133,13 +133,13 @@
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="收款开户银行" prop="payee_bank"
<el-form-item label="银行名称" prop="payee_bank"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.payee_bank" clearable placeholder="请输入开户银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款开户银行名称" prop="payee_account_name"
<el-form-item label="行支行名称" prop="payee_account_name"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.payee_account_name" clearable placeholder="请输入收款开户银行名称" />
</el-form-item>

View File

@ -220,12 +220,12 @@ const customEvent1 = (e: any) => {
//Name
const getTaxValue = (value) => {
let i = props.dictData.tax_rate.findIndex((item) => item.value == value)
return (props.dictData.tax_rate[i]?.name / 100) || 0
let i = dictData.tax_rate.findIndex((item) => item.value == value)
return (dictData.tax_rate[i]?.name / 100) || 0
}
//
const amountinput = (e) => {
const amountinput = () => {
formData.tax = (formData.invoice_amount * getTaxValue(formData.invoice_tax_rate)).toFixed(2)
formData.amount_excluding_tax = (formData.invoice_amount - formData.tax).toFixed(2)
formData.invoice_amount_daxie = toChinesNum(formData.invoice_amount)
@ -281,7 +281,9 @@ const setFormData = async (data: Record<any, any>) => {
contract_name.value = data.contract_name
project_name.value = data.project_name
project_code.value = data.project_code
amountinput()
setTimeout(() => {
amountinput()
}, 700)
}
@ -308,9 +310,7 @@ const handleSubmit = async () => {
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getAllProjectTypes().then((res) => {
protype.splice('', protype.length, ...res);
})
}

View File

@ -164,12 +164,6 @@ const handledetail = async (data: any) => {
const table = ref('')
setTimeout(() => {
table.value.doLayout()
console.log(table.value)
console.log("出发了")
}, 3000);
if (route.query?.listId) {

View File

@ -239,7 +239,7 @@ const amountinput = (e) => {
}
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑退款纪录表' : '新增退款纪录表'
return mode.value == 'edit' ? '编辑退款记录表' : '新增退款记录表'
})
//

View File

@ -93,6 +93,16 @@ const customEvent = (e: any) => {
formData.project_name = e.project_name
showDialog.value = false
}
const chekcDate = (rule: any, value: any, callback: any) => {
if (new Date(formData.accept_date) < new Date(formData.send_date)) {
callback(new Error('收文日期不能早于发文日期开始时间'))
} else {
callback()
}
}
//
const formRules = reactive<any>({
project_id: [{
@ -124,7 +134,13 @@ const formRules = reactive<any>({
required: true,
message: '请输入收文日期',
trigger: ['blur']
}],
},
{
validator: chekcDate,
trigger: ['blur']
}
],
read_user: [{
required: true,
message: '请输入传阅人',

View File

@ -1,7 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form ref="formRef" :model="formData" label-width="150px" :rules="formRules">
<el-form-item label="项目名称" prop="project_name">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@click="showDialog = true" />
@ -11,7 +11,7 @@
value-format="YYYY-MM" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="累计工程进度" prop="progress">
<el-form-item label="累计工程进度%" prop="progress">
<el-input v-model="formData.progress" clearable placeholder="请输入累计工程进度" type="number" />
</el-form-item>
<el-form-item label="工程状态" prop="status">
@ -31,7 +31,6 @@
</el-form-item>
<el-form-item label="附件" prop="annex">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-form>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
@ -66,14 +65,6 @@ const popupTitle = computed(() => {
})
const handleAvatarSuccess_four = (response: any) => {
formData.annex ||= []
// @ts-ignore
response.code != 0 ? formData.annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
//
const formData = reactive({

View File

@ -263,8 +263,13 @@ const chekcDate1 = (rule: any, value: any, callback: any) => {
}
}
const chekcDate2 = (rule: any, value: any, callback: any) => {
if (new Date(formData.initiation_date) < new Date(formData.actual_start_date)) {
callback(new Error('立项日期不能早于实际开工日期'))
} else {
callback()
}
}
//
const formRules = reactive<any>({
@ -380,6 +385,10 @@ const formRules = reactive<any>({
required: true,
message: '请输入立项日期',
trigger: ['blur']
},
{
validator: chekcDate2,
trigger: ['blur']
}],
project_leader: [{
required: true,

View File

@ -0,0 +1,325 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="机构名称" prop="org_name">
<el-input v-model="formData.org_name" clearable placeholder="请输入机构名称" />
</el-form-item>
<el-form-item label="备案类型" prop="filing_type">
<el-input v-model="formData.filing_type" clearable placeholder="请输入备案类型" />
</el-form-item>
<el-form-item label="法定代表人" prop="fddbr">
<el-input v-model="formData.fddbr" clearable placeholder="请输入法定代表人" />
</el-form-item>
<el-form-item label="联系电话" prop="telephone">
<el-input v-model="formData.telephone" clearable placeholder="请输入联系电话" />
</el-form-item>
<el-form-item label="营业执照编号" prop="yyzzbh">
<el-input v-model="formData.yyzzbh" clearable placeholder="请输入营业执照编号" />
</el-form-item>
<el-form-item label="资质证书编号" prop="zzzsbh">
<el-input v-model="formData.zzzsbh" clearable placeholder="请输入资质证书编号" />
</el-form-item>
<el-form-item label="组织机构代码证" prop="zzjgdmz">
<el-input v-model="formData.zzjgdmz" clearable placeholder="请输入组织机构代码证" />
</el-form-item>
<el-form-item label="总公司联系电话" prop="zgslxdh">
<el-input v-model="formData.zgslxdh" clearable placeholder="请输入总公司联系电话" />
</el-form-item>
<el-form-item label="主项监理范围" prop="zyxjlfw">
<el-input v-model="formData.zyxjlfw" clearable placeholder="请输入主项监理范围" />
</el-form-item>
<el-form-item label="增项监理范围" prop="zjxjlfw">
<el-input v-model="formData.zjxjlfw" clearable placeholder="请输入增项监理范围" />
</el-form-item>
<el-form-item label="本地办公地址" prop="bdbgdz">
<el-input v-model="formData.bdbgdz" clearable placeholder="请输入本地办公地址" />
</el-form-item>
<el-form-item label="本地公司联系电话" prop="bdgslxdh">
<el-input v-model="formData.bdgslxdh" clearable placeholder="请输入本地公司联系电话" />
</el-form-item>
<el-form-item label="人员信息" prop="ryxx">
<el-input v-model="formData.ryxx" clearable placeholder="请输入人员信息" />
</el-form-item>
<el-form-item label="机构注册地址" prop="jgzcdz">
<el-input v-model="formData.jgzcdz" clearable placeholder="请输入机构注册地址" />
</el-form-item>
<el-form-item label="备案开始期" prop="baksq">
<el-input v-model="formData.baksq" clearable placeholder="请输入备案开始期" />
</el-form-item>
<el-form-item label="备案结束期" prop="bajsq">
<el-input v-model="formData.bajsq" clearable placeholder="请输入备案结束期" />
</el-form-item>
<el-form-item label="备案时间" prop="basj">
<el-input v-model="formData.basj" clearable placeholder="请输入备案时间" />
</el-form-item>
<el-form-item label="经办人" prop="jbr">
<el-input v-model="formData.jbr" clearable placeholder="请输入经办人" />
</el-form-item>
<el-form-item label="年检时间" prop="njsj">
<el-input v-model="formData.njsj" clearable placeholder="请输入年检时间" />
</el-form-item>
<el-form-item label="负责人" prop="fzr">
<el-input v-model="formData.fzr" clearable placeholder="请输入负责人" />
</el-form-item>
<el-form-item label="负责人手机" prop="fzrsj">
<el-input v-model="formData.fzrsj" clearable placeholder="请输入负责人手机" />
</el-form-item>
<el-form-item label="技术负责人" prop="jsfzr">
<el-input v-model="formData.jsfzr" clearable placeholder="请输入技术负责人" />
</el-form-item>
<el-form-item label="技术负责人手机" prop="jsfzrsj">
<el-input v-model="formData.jsfzrsj" clearable placeholder="请输入技术负责人手机" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
<el-form-item label="" prop="annex">
<el-input v-model="formData.annex" clearable placeholder="请输入" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="marketingBranchFilingEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiMarketingBranchFilingAdd, apiMarketingBranchFilingEdit, apiMarketingBranchFilingDetail } from '@/api/marketing_branch_filing'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑市场经营--分支机构备案' : '新增市场经营--分支机构备案'
})
//
const formData = reactive({
id: '',
org_name: '',
filing_type: '',
fddbr: '',
telephone: '',
yyzzbh: '',
zzzsbh: '',
zzjgdmz: '',
zgslxdh: '',
zyxjlfw: '',
zjxjlfw: '',
bdbgdz: '',
bdgslxdh: '',
ryxx: '',
jgzcdz: '',
baksq: '',
bajsq: '',
basj: '',
jbr: '',
njsj: '',
fzr: '',
fzrsj: '',
jsfzr: '',
jsfzrsj: '',
remark: '',
annex: '',
})
//
const formRules = reactive<any>({
org_name: [{
required: true,
message: '请输入机构名称',
trigger: ['blur']
}],
filing_type: [{
required: true,
message: '请输入备案类型',
trigger: ['blur']
}],
fddbr: [{
required: true,
message: '请输入法定代表人',
trigger: ['blur']
}],
telephone: [{
required: true,
message: '请输入联系电话',
trigger: ['blur']
}],
yyzzbh: [{
required: true,
message: '请输入营业执照编号',
trigger: ['blur']
}],
zzzsbh: [{
required: true,
message: '请输入资质证书编号',
trigger: ['blur']
}],
zzjgdmz: [{
required: true,
message: '请输入组织机构代码证',
trigger: ['blur']
}],
zgslxdh: [{
required: true,
message: '请输入总公司联系电话',
trigger: ['blur']
}],
zyxjlfw: [{
required: true,
message: '请输入主项监理范围',
trigger: ['blur']
}],
zjxjlfw: [{
required: true,
message: '请输入增项监理范围',
trigger: ['blur']
}],
bdbgdz: [{
required: true,
message: '请输入本地办公地址',
trigger: ['blur']
}],
bdgslxdh: [{
required: true,
message: '请输入本地公司联系电话',
trigger: ['blur']
}],
ryxx: [{
required: true,
message: '请输入人员信息',
trigger: ['blur']
}],
jgzcdz: [{
required: true,
message: '请输入机构注册地址',
trigger: ['blur']
}],
baksq: [{
required: true,
message: '请输入备案开始期',
trigger: ['blur']
}],
bajsq: [{
required: true,
message: '请输入备案结束期',
trigger: ['blur']
}],
basj: [{
required: true,
message: '请输入备案时间',
trigger: ['blur']
}],
jbr: [{
required: true,
message: '请输入经办人',
trigger: ['blur']
}],
njsj: [{
required: true,
message: '请输入年检时间',
trigger: ['blur']
}],
fzr: [{
required: true,
message: '请输入负责人',
trigger: ['blur']
}],
fzrsj: [{
required: true,
message: '请输入负责人手机',
trigger: ['blur']
}],
jsfzr: [{
required: true,
message: '请输入技术负责人',
trigger: ['blur']
}],
jsfzrsj: [{
required: true,
message: '请输入技术负责人手机',
trigger: ['blur']
}],
remark: [{
required: true,
message: '请输入备注',
trigger: ['blur']
}],
annex: [{
required: true,
message: '请输入',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiMarketingBranchFilingDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiMarketingBranchFilingEdit(data)
: await apiMarketingBranchFilingAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,146 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="机构名称" prop="org_name">
<el-input class="w-[280px]" v-model="queryParams.org_name" clearable placeholder="请输入机构名称" />
</el-form-item>
<el-form-item label="法定代表人" prop="fddbr">
<el-input class="w-[280px]" v-model="queryParams.fddbr" clearable placeholder="请输入法定代表人" />
</el-form-item>
<el-form-item label="联系电话" prop="telephone">
<el-input class="w-[280px]" v-model="queryParams.telephone" clearable placeholder="请输入联系电话" />
</el-form-item>
<el-form-item label="机构注册地址" prop="jgzcdz">
<el-input class="w-[280px]" v-model="queryParams.jgzcdz" clearable placeholder="请输入机构注册地址" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['marketing.marketing_branch_filing/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['marketing.marketing_branch_filing/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="机构名称" prop="org_name" show-overflow-tooltip />
<el-table-column label="法定代表人" prop="fddbr" show-overflow-tooltip />
<el-table-column label="联系电话" prop="telephone" show-overflow-tooltip />
<el-table-column label="机构注册地址" prop="jgzcdz" show-overflow-tooltip />
<el-table-column label="备案开始期" prop="baksq" show-overflow-tooltip />
<el-table-column label="备案结束期" prop="bajsq" show-overflow-tooltip />
<el-table-column label="经办人" prop="jbr" show-overflow-tooltip />
<el-table-column label="年检时间" prop="njsj" show-overflow-tooltip />
<el-table-column label="负责人" prop="fzr" show-overflow-tooltip />
<el-table-column label="负责人手机" prop="fzrsj" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['marketing.marketing_branch_filing/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['marketing.marketing_branch_filing/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="marketingBranchFilingLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiMarketingBranchFilingLists, apiMarketingBranchFilingDelete } from '@/api/marketing_branch_filing'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
org_name: '',
fddbr: '',
telephone: '',
jgzcdz: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiMarketingBranchFilingLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiMarketingBranchFilingDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -0,0 +1,475 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="关联主合同id" prop="related_contract_id">
<el-input v-model="formData.related_contract_id" clearable placeholder="请输入关联主合同id" />
</el-form-item>
<el-form-item label="合同类型 0-主合同 1-框架协议 2-补充协议" prop="contract_type">
<el-input v-model="formData.contract_type" clearable placeholder="请输入合同类型 0-主合同 1-框架协议 2-补充协议" />
</el-form-item>
<el-form-item label="合同名称" prop="contract_name">
<el-input v-model="formData.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
<el-form-item label="合同编号" prop="contract_code">
<el-input v-model="formData.contract_code" clearable placeholder="请输入合同编号" />
</el-form-item>
<el-form-item label="甲方签约单位" prop="part_a">
<el-input v-model="formData.part_a" clearable placeholder="请输入甲方签约单位" />
</el-form-item>
<el-form-item label="联系人" prop="part_a_contact">
<el-input v-model="formData.part_a_contact" clearable placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="业主地址" prop="part_a_address">
<el-input v-model="formData.part_a_address" clearable placeholder="请输入业主地址" />
</el-form-item>
<el-form-item label="乙方签约单位" prop="part_b">
<el-input v-model="formData.part_b" clearable placeholder="请输入乙方签约单位" />
</el-form-item>
<el-form-item label="乙方签约人" prop="part_b_signatory">
<el-input v-model="formData.part_b_signatory" clearable placeholder="请输入乙方签约人" />
</el-form-item>
<el-form-item label="业务性质" prop="business_nature">
<el-input v-model="formData.business_nature" clearable placeholder="请输入业务性质" />
</el-form-item>
<el-form-item label="行业性质" prop="industry_nature">
<el-input v-model="formData.industry_nature" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item label="资金来源" prop="fund_sources">
<el-input v-model="formData.fund_sources" clearable placeholder="请输入资金来源" />
</el-form-item>
<el-form-item label="建设区域" prop="const_area">
<el-input v-model="formData.const_area" clearable placeholder="请输入建设区域" />
</el-form-item>
<el-form-item label="协议性质" prop="agreement_nature">
<el-input v-model="formData.agreement_nature" clearable placeholder="请输入协议性质" />
</el-form-item>
<el-form-item label="工程总投资" prop="project_money">
<el-input v-model="formData.project_money" clearable placeholder="请输入工程总投资" />
</el-form-item>
<el-form-item label="工程规模及概况" prop="project_scale">
<el-input v-model="formData.project_scale" clearable placeholder="请输入工程规模及概况" />
</el-form-item>
<el-form-item label="签订金额" prop="signed_amount">
<el-input v-model="formData.signed_amount" clearable placeholder="请输入签订金额" />
</el-form-item>
<el-form-item label="合同签订费率" prop="signed_rate">
<el-input v-model="formData.signed_rate" clearable placeholder="请输入合同签订费率" />
</el-form-item>
<el-form-item label="合同服务工期" prop="service_duration">
<el-input v-model="formData.service_duration" clearable placeholder="请输入合同服务工期" />
</el-form-item>
<el-form-item label="计划开始日期" prop="start_date">
<el-input v-model="formData.start_date" clearable placeholder="请输入计划开始日期" />
</el-form-item>
<el-form-item label="计划结束日期" prop="end_date">
<el-input v-model="formData.end_date" clearable placeholder="请输入计划结束日期" />
</el-form-item>
<el-form-item label="履约金" prop="performance_money">
<el-input v-model="formData.performance_money" clearable placeholder="请输入履约金" />
</el-form-item>
<el-form-item label="履约金到期时间" prop="performance_money_expiration_time">
<el-input v-model="formData.performance_money_expiration_time" clearable placeholder="请输入履约金到期时间" />
</el-form-item>
<el-form-item label="合同付款方式" prop="payment_method">
<el-input v-model="formData.payment_method" clearable placeholder="请输入合同付款方式" />
</el-form-item>
<el-form-item label="合同主要内容" prop="content">
<el-input v-model="formData.content" clearable placeholder="请输入合同主要内容" />
</el-form-item>
<el-form-item label="附件" prop="annex">
<el-input v-model="formData.annex" clearable placeholder="请输入附件" />
</el-form-item>
<el-form-item label="签订部门" prop="signed_dept">
<el-input v-model="formData.signed_dept" clearable placeholder="请输入签订部门" />
</el-form-item>
<el-form-item label="签订负责人" prop="signed_head">
<el-input v-model="formData.signed_head" clearable placeholder="请输入签订负责人" />
</el-form-item>
<el-form-item label="监管部门" prop="supervise_dept">
<el-input v-model="formData.supervise_dept" clearable placeholder="请输入监管部门" />
</el-form-item>
<el-form-item label="项目总监/经理" prop="project_manager">
<el-input v-model="formData.project_manager" clearable placeholder="请输入项目总监/经理" />
</el-form-item>
<el-form-item label="实施方式" prop="implement_method">
<el-input v-model="formData.implement_method" clearable placeholder="请输入实施方式" />
</el-form-item>
<el-form-item label="盖章名称" prop="seal_name">
<el-input v-model="formData.seal_name" clearable placeholder="请输入盖章名称" />
</el-form-item>
<el-form-item label="是否限制" prop="is_limit">
<el-input v-model="formData.is_limit" clearable placeholder="请输入是否限制" />
</el-form-item>
<el-form-item label="限制次数" prop="limit_num">
<el-input v-model="formData.limit_num" clearable placeholder="请输入限制次数" />
</el-form-item>
<el-form-item label="文件类型" prop="file_type">
<el-input v-model="formData.file_type" clearable placeholder="请输入文件类型" />
</el-form-item>
<el-form-item label="盖章份数" prop="seal_num">
<el-input v-model="formData.seal_num" clearable placeholder="请输入盖章份数" />
</el-form-item>
<el-form-item label="盖章人" prop="seal_user">
<el-input v-model="formData.seal_user" clearable placeholder="请输入盖章人" />
</el-form-item>
<el-form-item label="骑缝盖章" prop="plance_seal">
<el-input v-model="formData.plance_seal" clearable placeholder="请输入骑缝盖章" />
</el-form-item>
<el-form-item label="发出日期" prop="send_date">
<el-input v-model="formData.send_date" clearable placeholder="请输入发出日期" />
</el-form-item>
<el-form-item label="邮寄编号" prop="mailing_number">
<el-input v-model="formData.mailing_number" clearable placeholder="请输入邮寄编号" />
</el-form-item>
<el-form-item label="评审状态 0-待移交 1-已移交" prop="review_status">
<el-input v-model="formData.review_status" clearable placeholder="请输入评审状态 0-待移交 1-已移交" />
</el-form-item>
<el-form-item label="立项状态 0-待立项 1-已立项" prop="status">
<el-input v-model="formData.status" clearable placeholder="请输入立项状态 0-待立项 1-已立项" />
</el-form-item>
<el-form-item label="录入人" prop="create_user">
<el-input v-model="formData.create_user" clearable placeholder="请输入录入人" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="marketingContractEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiMarketingContractAdd, apiMarketingContractEdit, apiMarketingContractDetail } from '@/api/marketing_contract'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑市场经营--合同信息' : '新增市场经营--合同信息'
})
//
const formData = reactive({
id: '',
related_contract_id: '',
contract_type: '',
contract_name: '',
contract_code: '',
part_a: '',
part_a_contact: '',
part_a_address: '',
part_b: '',
part_b_signatory: '',
business_nature: '',
industry_nature: '',
fund_sources: '',
const_area: '',
agreement_nature: '',
project_money: '',
project_scale: '',
signed_amount: '',
signed_rate: '',
service_duration: '',
start_date: '',
end_date: '',
performance_money: '',
performance_money_expiration_time: '',
payment_method: '',
content: '',
annex: '',
signed_dept: '',
signed_head: '',
supervise_dept: '',
project_manager: '',
implement_method: '',
seal_name: '',
is_limit: '',
limit_num: '',
file_type: '',
seal_num: '',
seal_user: '',
plance_seal: '',
send_date: '',
mailing_number: '',
review_status: '',
status: '',
create_user: '',
})
//
const formRules = reactive<any>({
related_contract_id: [{
required: true,
message: '请输入关联主合同id',
trigger: ['blur']
}],
contract_type: [{
required: true,
message: '请输入合同类型 0-主合同 1-框架协议 2-补充协议',
trigger: ['blur']
}],
contract_name: [{
required: true,
message: '请输入合同名称',
trigger: ['blur']
}],
contract_code: [{
required: true,
message: '请输入合同编号',
trigger: ['blur']
}],
part_a: [{
required: true,
message: '请输入甲方签约单位',
trigger: ['blur']
}],
part_a_contact: [{
required: true,
message: '请输入联系人',
trigger: ['blur']
}],
part_a_address: [{
required: true,
message: '请输入业主地址',
trigger: ['blur']
}],
part_b: [{
required: true,
message: '请输入乙方签约单位',
trigger: ['blur']
}],
part_b_signatory: [{
required: true,
message: '请输入乙方签约人',
trigger: ['blur']
}],
business_nature: [{
required: true,
message: '请输入业务性质',
trigger: ['blur']
}],
industry_nature: [{
required: true,
message: '请输入行业性质',
trigger: ['blur']
}],
fund_sources: [{
required: true,
message: '请输入资金来源',
trigger: ['blur']
}],
const_area: [{
required: true,
message: '请输入建设区域',
trigger: ['blur']
}],
agreement_nature: [{
required: true,
message: '请输入协议性质',
trigger: ['blur']
}],
project_money: [{
required: true,
message: '请输入工程总投资',
trigger: ['blur']
}],
project_scale: [{
required: true,
message: '请输入工程规模及概况',
trigger: ['blur']
}],
signed_amount: [{
required: true,
message: '请输入签订金额',
trigger: ['blur']
}],
signed_rate: [{
required: true,
message: '请输入合同签订费率',
trigger: ['blur']
}],
service_duration: [{
required: true,
message: '请输入合同服务工期',
trigger: ['blur']
}],
start_date: [{
required: true,
message: '请输入计划开始日期',
trigger: ['blur']
}],
end_date: [{
required: true,
message: '请输入计划结束日期',
trigger: ['blur']
}],
performance_money: [{
required: true,
message: '请输入履约金',
trigger: ['blur']
}],
performance_money_expiration_time: [{
required: true,
message: '请输入履约金到期时间',
trigger: ['blur']
}],
payment_method: [{
required: true,
message: '请输入合同付款方式',
trigger: ['blur']
}],
content: [{
required: true,
message: '请输入合同主要内容',
trigger: ['blur']
}],
signed_dept: [{
required: true,
message: '请输入签订部门',
trigger: ['blur']
}],
signed_head: [{
required: true,
message: '请输入签订负责人',
trigger: ['blur']
}],
supervise_dept: [{
required: true,
message: '请输入监管部门',
trigger: ['blur']
}],
project_manager: [{
required: true,
message: '请输入项目总监/经理',
trigger: ['blur']
}],
implement_method: [{
required: true,
message: '请输入实施方式',
trigger: ['blur']
}],
seal_name: [{
required: true,
message: '请输入盖章名称',
trigger: ['blur']
}],
is_limit: [{
required: true,
message: '请输入是否限制',
trigger: ['blur']
}],
limit_num: [{
required: true,
message: '请输入限制次数',
trigger: ['blur']
}],
file_type: [{
required: true,
message: '请输入文件类型',
trigger: ['blur']
}],
seal_num: [{
required: true,
message: '请输入盖章份数',
trigger: ['blur']
}],
seal_user: [{
required: true,
message: '请输入盖章人',
trigger: ['blur']
}],
plance_seal: [{
required: true,
message: '请输入骑缝盖章',
trigger: ['blur']
}],
send_date: [{
required: true,
message: '请输入发出日期',
trigger: ['blur']
}],
mailing_number: [{
required: true,
message: '请输入邮寄编号',
trigger: ['blur']
}],
review_status: [{
required: true,
message: '请输入评审状态 0-待移交 1-已移交',
trigger: ['blur']
}],
status: [{
required: true,
message: '请输入立项状态 0-待立项 1-已立项',
trigger: ['blur']
}],
create_user: [{
required: true,
message: '请输入录入人',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiMarketingContractDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiMarketingContractEdit(data)
: await apiMarketingContractAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,181 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="合同类型 0-主合同 1-框架协议 2-补充协议" prop="contract_type">
<el-input class="w-[280px]" v-model="queryParams.contract_type" clearable
placeholder="请输入合同类型 0-主合同 1-框架协议 2-补充协议" />
</el-form-item>
<el-form-item label="合同名称" prop="contract_name">
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
<el-form-item label="合同编号" prop="contract_code">
<el-input class="w-[280px]" v-model="queryParams.contract_code" clearable placeholder="请输入合同编号" />
</el-form-item>
<el-form-item label="甲方签约单位" prop="part_a">
<el-input class="w-[280px]" v-model="queryParams.part_a" clearable placeholder="请输入甲方签约单位" />
</el-form-item>
<el-form-item label="业务性质" prop="business_nature">
<el-input class="w-[280px]" v-model="queryParams.business_nature" clearable placeholder="请输入业务性质" />
</el-form-item>
<el-form-item label="行业性质" prop="industry_nature">
<el-input class="w-[280px]" v-model="queryParams.industry_nature" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item label="资金来源" prop="fund_sources">
<el-input class="w-[280px]" v-model="queryParams.fund_sources" clearable placeholder="请输入资金来源" />
</el-form-item>
<el-form-item label="建设区域" prop="const_area">
<el-input class="w-[280px]" v-model="queryParams.const_area" clearable placeholder="请输入建设区域" />
</el-form-item>
<el-form-item label="签订金额" prop="signed_amount">
<el-input class="w-[280px]" v-model="queryParams.signed_amount" clearable placeholder="请输入签订金额" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['marketing.marketing_contract/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['marketing.marketing_contract/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="甲方签约单位" prop="part_a" show-overflow-tooltip />
<el-table-column label="乙方签约单位" prop="part_b" show-overflow-tooltip />
<el-table-column label="乙方签约人" prop="part_b_signatory" show-overflow-tooltip />
<el-table-column label="业务性质" prop="business_nature" show-overflow-tooltip />
<el-table-column label="行业性质" prop="industry_nature" show-overflow-tooltip />
<el-table-column label="资金来源" prop="fund_sources" show-overflow-tooltip />
<el-table-column label="建设区域" prop="const_area" show-overflow-tooltip />
<el-table-column label="协议性质" prop="agreement_nature" show-overflow-tooltip />
<el-table-column label="工程总投资" prop="project_money" show-overflow-tooltip />
<el-table-column label="工程规模及概况" prop="project_scale" show-overflow-tooltip />
<el-table-column label="签订金额" prop="signed_amount" show-overflow-tooltip />
<el-table-column label="合同签订费率" prop="signed_rate" show-overflow-tooltip />
<el-table-column label="合同服务工期" prop="service_duration" show-overflow-tooltip />
<el-table-column label="计划开始日期" prop="start_date" show-overflow-tooltip />
<el-table-column label="计划结束日期" prop="end_date" show-overflow-tooltip />
<el-table-column label="履约金" prop="performance_money" show-overflow-tooltip />
<el-table-column label="履约金到期时间" prop="performance_money_expiration_time" show-overflow-tooltip />
<el-table-column label="合同付款方式" prop="payment_method" show-overflow-tooltip />
<el-table-column label="合同主要内容" prop="content" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip />
<el-table-column label="签订部门" prop="signed_dept" show-overflow-tooltip />
<el-table-column label="签订负责人" prop="signed_head" show-overflow-tooltip />
<el-table-column label="监管部门" prop="supervise_dept" show-overflow-tooltip />
<el-table-column label="项目总监/经理" prop="project_manager" show-overflow-tooltip />
<el-table-column label="实施方式" prop="implement_method" show-overflow-tooltip />
<el-table-column label="盖章名称" prop="seal_name" show-overflow-tooltip />
<el-table-column label="是否限制" prop="is_limit" show-overflow-tooltip />
<el-table-column label="限制次数" prop="limit_num" show-overflow-tooltip />
<el-table-column label="文件类型" prop="file_type" show-overflow-tooltip />
<el-table-column label="盖章份数" prop="seal_num" show-overflow-tooltip />
<el-table-column label="盖章人" prop="seal_user" show-overflow-tooltip />
<el-table-column label="骑缝盖章" prop="plance_seal" show-overflow-tooltip />
<el-table-column label="发出日期" prop="send_date" show-overflow-tooltip />
<el-table-column label="邮寄编号" prop="mailing_number" show-overflow-tooltip />
<el-table-column label="评审状态 0-待移交 1-已移交" prop="review_status" show-overflow-tooltip />
<el-table-column label="立项状态 0-待立项 1-已立项" prop="status" show-overflow-tooltip />
<el-table-column label="录入人" prop="create_user" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['marketing.marketing_contract/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['marketing.marketing_contract/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="marketingContractLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiMarketingContractLists, apiMarketingContractDelete } from '@/api/marketing_contract'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
contract_type: '',
contract_name: '',
contract_code: '',
part_a: '',
business_nature: '',
industry_nature: '',
fund_sources: '',
const_area: '',
signed_amount: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiMarketingContractLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiMarketingContractDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -0,0 +1,475 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="关联主合同id" prop="related_contract_id">
<el-input v-model="formData.related_contract_id" clearable placeholder="请输入关联主合同id" />
</el-form-item>
<el-form-item label="合同类型 0-主合同 1-框架协议 2-补充协议" prop="contract_type">
<el-input v-model="formData.contract_type" clearable placeholder="请输入合同类型 0-主合同 1-框架协议 2-补充协议" />
</el-form-item>
<el-form-item label="合同名称" prop="contract_name">
<el-input v-model="formData.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
<el-form-item label="合同编号" prop="contract_code">
<el-input v-model="formData.contract_code" clearable placeholder="请输入合同编号" />
</el-form-item>
<el-form-item label="甲方签约单位" prop="part_a">
<el-input v-model="formData.part_a" clearable placeholder="请输入甲方签约单位" />
</el-form-item>
<el-form-item label="联系人" prop="part_a_contact">
<el-input v-model="formData.part_a_contact" clearable placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="业主地址" prop="part_a_address">
<el-input v-model="formData.part_a_address" clearable placeholder="请输入业主地址" />
</el-form-item>
<el-form-item label="乙方签约单位" prop="part_b">
<el-input v-model="formData.part_b" clearable placeholder="请输入乙方签约单位" />
</el-form-item>
<el-form-item label="乙方签约人" prop="part_b_signatory">
<el-input v-model="formData.part_b_signatory" clearable placeholder="请输入乙方签约人" />
</el-form-item>
<el-form-item label="业务性质" prop="business_nature">
<el-input v-model="formData.business_nature" clearable placeholder="请输入业务性质" />
</el-form-item>
<el-form-item label="行业性质" prop="industry_nature">
<el-input v-model="formData.industry_nature" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item label="资金来源" prop="fund_sources">
<el-input v-model="formData.fund_sources" clearable placeholder="请输入资金来源" />
</el-form-item>
<el-form-item label="建设区域" prop="const_area">
<el-input v-model="formData.const_area" clearable placeholder="请输入建设区域" />
</el-form-item>
<el-form-item label="协议性质" prop="agreement_nature">
<el-input v-model="formData.agreement_nature" clearable placeholder="请输入协议性质" />
</el-form-item>
<el-form-item label="工程总投资" prop="project_money">
<el-input v-model="formData.project_money" clearable placeholder="请输入工程总投资" />
</el-form-item>
<el-form-item label="工程规模及概况" prop="project_scale">
<el-input v-model="formData.project_scale" clearable placeholder="请输入工程规模及概况" />
</el-form-item>
<el-form-item label="签订金额" prop="signed_amount">
<el-input v-model="formData.signed_amount" clearable placeholder="请输入签订金额" />
</el-form-item>
<el-form-item label="合同签订费率" prop="signed_rate">
<el-input v-model="formData.signed_rate" clearable placeholder="请输入合同签订费率" />
</el-form-item>
<el-form-item label="合同服务工期" prop="service_duration">
<el-input v-model="formData.service_duration" clearable placeholder="请输入合同服务工期" />
</el-form-item>
<el-form-item label="计划开始日期" prop="start_date">
<el-input v-model="formData.start_date" clearable placeholder="请输入计划开始日期" />
</el-form-item>
<el-form-item label="计划结束日期" prop="end_date">
<el-input v-model="formData.end_date" clearable placeholder="请输入计划结束日期" />
</el-form-item>
<el-form-item label="履约金" prop="performance_money">
<el-input v-model="formData.performance_money" clearable placeholder="请输入履约金" />
</el-form-item>
<el-form-item label="履约金到期时间" prop="performance_money_expiration_time">
<el-input v-model="formData.performance_money_expiration_time" clearable placeholder="请输入履约金到期时间" />
</el-form-item>
<el-form-item label="合同付款方式" prop="payment_method">
<el-input v-model="formData.payment_method" clearable placeholder="请输入合同付款方式" />
</el-form-item>
<el-form-item label="合同主要内容" prop="content">
<el-input v-model="formData.content" clearable placeholder="请输入合同主要内容" />
</el-form-item>
<el-form-item label="附件" prop="annex">
<el-input v-model="formData.annex" clearable placeholder="请输入附件" />
</el-form-item>
<el-form-item label="签订部门" prop="signed_dept">
<el-input v-model="formData.signed_dept" clearable placeholder="请输入签订部门" />
</el-form-item>
<el-form-item label="签订负责人" prop="signed_head">
<el-input v-model="formData.signed_head" clearable placeholder="请输入签订负责人" />
</el-form-item>
<el-form-item label="监管部门" prop="supervise_dept">
<el-input v-model="formData.supervise_dept" clearable placeholder="请输入监管部门" />
</el-form-item>
<el-form-item label="项目总监/经理" prop="project_manager">
<el-input v-model="formData.project_manager" clearable placeholder="请输入项目总监/经理" />
</el-form-item>
<el-form-item label="实施方式" prop="implement_method">
<el-input v-model="formData.implement_method" clearable placeholder="请输入实施方式" />
</el-form-item>
<el-form-item label="盖章名称" prop="seal_name">
<el-input v-model="formData.seal_name" clearable placeholder="请输入盖章名称" />
</el-form-item>
<el-form-item label="是否限制" prop="is_limit">
<el-input v-model="formData.is_limit" clearable placeholder="请输入是否限制" />
</el-form-item>
<el-form-item label="限制次数" prop="limit_num">
<el-input v-model="formData.limit_num" clearable placeholder="请输入限制次数" />
</el-form-item>
<el-form-item label="文件类型" prop="file_type">
<el-input v-model="formData.file_type" clearable placeholder="请输入文件类型" />
</el-form-item>
<el-form-item label="盖章份数" prop="seal_num">
<el-input v-model="formData.seal_num" clearable placeholder="请输入盖章份数" />
</el-form-item>
<el-form-item label="盖章人" prop="seal_user">
<el-input v-model="formData.seal_user" clearable placeholder="请输入盖章人" />
</el-form-item>
<el-form-item label="骑缝盖章" prop="plance_seal">
<el-input v-model="formData.plance_seal" clearable placeholder="请输入骑缝盖章" />
</el-form-item>
<el-form-item label="发出日期" prop="send_date">
<el-input v-model="formData.send_date" clearable placeholder="请输入发出日期" />
</el-form-item>
<el-form-item label="邮寄编号" prop="mailing_number">
<el-input v-model="formData.mailing_number" clearable placeholder="请输入邮寄编号" />
</el-form-item>
<el-form-item label="评审状态 0-待移交 1-已移交" prop="review_status">
<el-input v-model="formData.review_status" clearable placeholder="请输入评审状态 0-待移交 1-已移交" />
</el-form-item>
<el-form-item label="立项状态 0-待立项 1-已立项" prop="status">
<el-input v-model="formData.status" clearable placeholder="请输入立项状态 0-待立项 1-已立项" />
</el-form-item>
<el-form-item label="录入人" prop="create_user">
<el-input v-model="formData.create_user" clearable placeholder="请输入录入人" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="marketingContractEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiMarketingContractAdd, apiMarketingContractEdit, apiMarketingContractDetail } from '@/api/marketing_contract'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑市场经营--合同信息' : '新增市场经营--合同信息'
})
//
const formData = reactive({
id: '',
related_contract_id: '',
contract_type: '',
contract_name: '',
contract_code: '',
part_a: '',
part_a_contact: '',
part_a_address: '',
part_b: '',
part_b_signatory: '',
business_nature: '',
industry_nature: '',
fund_sources: '',
const_area: '',
agreement_nature: '',
project_money: '',
project_scale: '',
signed_amount: '',
signed_rate: '',
service_duration: '',
start_date: '',
end_date: '',
performance_money: '',
performance_money_expiration_time: '',
payment_method: '',
content: '',
annex: '',
signed_dept: '',
signed_head: '',
supervise_dept: '',
project_manager: '',
implement_method: '',
seal_name: '',
is_limit: '',
limit_num: '',
file_type: '',
seal_num: '',
seal_user: '',
plance_seal: '',
send_date: '',
mailing_number: '',
review_status: '',
status: '',
create_user: '',
})
//
const formRules = reactive<any>({
related_contract_id: [{
required: true,
message: '请输入关联主合同id',
trigger: ['blur']
}],
contract_type: [{
required: true,
message: '请输入合同类型 0-主合同 1-框架协议 2-补充协议',
trigger: ['blur']
}],
contract_name: [{
required: true,
message: '请输入合同名称',
trigger: ['blur']
}],
contract_code: [{
required: true,
message: '请输入合同编号',
trigger: ['blur']
}],
part_a: [{
required: true,
message: '请输入甲方签约单位',
trigger: ['blur']
}],
part_a_contact: [{
required: true,
message: '请输入联系人',
trigger: ['blur']
}],
part_a_address: [{
required: true,
message: '请输入业主地址',
trigger: ['blur']
}],
part_b: [{
required: true,
message: '请输入乙方签约单位',
trigger: ['blur']
}],
part_b_signatory: [{
required: true,
message: '请输入乙方签约人',
trigger: ['blur']
}],
business_nature: [{
required: true,
message: '请输入业务性质',
trigger: ['blur']
}],
industry_nature: [{
required: true,
message: '请输入行业性质',
trigger: ['blur']
}],
fund_sources: [{
required: true,
message: '请输入资金来源',
trigger: ['blur']
}],
const_area: [{
required: true,
message: '请输入建设区域',
trigger: ['blur']
}],
agreement_nature: [{
required: true,
message: '请输入协议性质',
trigger: ['blur']
}],
project_money: [{
required: true,
message: '请输入工程总投资',
trigger: ['blur']
}],
project_scale: [{
required: true,
message: '请输入工程规模及概况',
trigger: ['blur']
}],
signed_amount: [{
required: true,
message: '请输入签订金额',
trigger: ['blur']
}],
signed_rate: [{
required: true,
message: '请输入合同签订费率',
trigger: ['blur']
}],
service_duration: [{
required: true,
message: '请输入合同服务工期',
trigger: ['blur']
}],
start_date: [{
required: true,
message: '请输入计划开始日期',
trigger: ['blur']
}],
end_date: [{
required: true,
message: '请输入计划结束日期',
trigger: ['blur']
}],
performance_money: [{
required: true,
message: '请输入履约金',
trigger: ['blur']
}],
performance_money_expiration_time: [{
required: true,
message: '请输入履约金到期时间',
trigger: ['blur']
}],
payment_method: [{
required: true,
message: '请输入合同付款方式',
trigger: ['blur']
}],
content: [{
required: true,
message: '请输入合同主要内容',
trigger: ['blur']
}],
signed_dept: [{
required: true,
message: '请输入签订部门',
trigger: ['blur']
}],
signed_head: [{
required: true,
message: '请输入签订负责人',
trigger: ['blur']
}],
supervise_dept: [{
required: true,
message: '请输入监管部门',
trigger: ['blur']
}],
project_manager: [{
required: true,
message: '请输入项目总监/经理',
trigger: ['blur']
}],
implement_method: [{
required: true,
message: '请输入实施方式',
trigger: ['blur']
}],
seal_name: [{
required: true,
message: '请输入盖章名称',
trigger: ['blur']
}],
is_limit: [{
required: true,
message: '请输入是否限制',
trigger: ['blur']
}],
limit_num: [{
required: true,
message: '请输入限制次数',
trigger: ['blur']
}],
file_type: [{
required: true,
message: '请输入文件类型',
trigger: ['blur']
}],
seal_num: [{
required: true,
message: '请输入盖章份数',
trigger: ['blur']
}],
seal_user: [{
required: true,
message: '请输入盖章人',
trigger: ['blur']
}],
plance_seal: [{
required: true,
message: '请输入骑缝盖章',
trigger: ['blur']
}],
send_date: [{
required: true,
message: '请输入发出日期',
trigger: ['blur']
}],
mailing_number: [{
required: true,
message: '请输入邮寄编号',
trigger: ['blur']
}],
review_status: [{
required: true,
message: '请输入评审状态 0-待移交 1-已移交',
trigger: ['blur']
}],
status: [{
required: true,
message: '请输入立项状态 0-待立项 1-已立项',
trigger: ['blur']
}],
create_user: [{
required: true,
message: '请输入录入人',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiMarketingContractDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiMarketingContractEdit(data)
: await apiMarketingContractAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,165 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="合同名称">
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
<el-form-item label="协议性质">
<el-input class="w-[280px]" v-model="queryParams.agreement_nature" clearable placeholder="请输入合同编号" />
</el-form-item>
<el-form-item label="业务性质">
<el-input class="w-[280px]" v-model="queryParams.business_nature" clearable placeholder="请输入甲方签约单位" />
</el-form-item>
<el-form-item label="签订部门">
<el-input class="w-[280px]" v-model="queryParams.signed_dept" clearable placeholder="请输入业务性质" />
</el-form-item>
<el-form-item label="甲方签约单位">
<el-input class="w-[280px]" v-model="queryParams.part_a" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['marketing.marketing_contract/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['marketing.marketing_contract/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="甲方签约单位" prop="part_a" show-overflow-tooltip />
<el-table-column label="乙方签约单位" prop="part_b" show-overflow-tooltip />
<el-table-column label="乙方签约人" prop="part_b_signatory" show-overflow-tooltip />
<el-table-column label="业务性质" prop="business_nature" show-overflow-tooltip />
<!-- <el-table-column label="行业性质" prop="industry_nature" show-overflow-tooltip />
<el-table-column label="资金来源" prop="fund_sources" show-overflow-tooltip />
<el-table-column label="建设区域" prop="const_area" show-overflow-tooltip />
<el-table-column label="协议性质" prop="agreement_nature" show-overflow-tooltip />
<el-table-column label="工程总投资" prop="project_money" show-overflow-tooltip />
<el-table-column label="工程规模及概况" prop="project_scale" show-overflow-tooltip />
<el-table-column label="签订金额" prop="signed_amount" show-overflow-tooltip />
<el-table-column label="合同签订费率" prop="signed_rate" show-overflow-tooltip />
<el-table-column label="合同服务工期" prop="service_duration" show-overflow-tooltip />
<el-table-column label="计划开始日期" prop="start_date" show-overflow-tooltip />
<el-table-column label="计划结束日期" prop="end_date" show-overflow-tooltip />
<el-table-column label="履约金" prop="performance_money" show-overflow-tooltip />
<el-table-column label="履约金到期时间" prop="performance_money_expiration_time" show-overflow-tooltip />
<el-table-column label="合同付款方式" prop="payment_method" show-overflow-tooltip />
<el-table-column label="合同主要内容" prop="content" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip />
<el-table-column label="签订部门" prop="signed_dept" show-overflow-tooltip />
<el-table-column label="签订负责人" prop="signed_head" show-overflow-tooltip />
<el-table-column label="监管部门" prop="supervise_dept" show-overflow-tooltip />
<el-table-column label="项目总监/经理" prop="project_manager" show-overflow-tooltip />
<el-table-column label="实施方式" prop="implement_method" show-overflow-tooltip />
<el-table-column label="盖章名称" prop="seal_name" show-overflow-tooltip />
<el-table-column label="是否限制" prop="is_limit" show-overflow-tooltip />
<el-table-column label="限制次数" prop="limit_num" show-overflow-tooltip />
<el-table-column label="文件类型" prop="file_type" show-overflow-tooltip />
<el-table-column label="盖章份数" prop="seal_num" show-overflow-tooltip />
<el-table-column label="盖章人" prop="seal_user" show-overflow-tooltip />
<el-table-column label="骑缝盖章" prop="plance_seal" show-overflow-tooltip />
<el-table-column label="发出日期" prop="send_date" show-overflow-tooltip />
<el-table-column label="邮寄编号" prop="mailing_number" show-overflow-tooltip />
<el-table-column label="评审状态 0-待移交 1-已移交" prop="review_status" show-overflow-tooltip />
<el-table-column label="立项状态 0-待立项 1-已立项" prop="status" show-overflow-tooltip />
<el-table-column label="录入人" prop="create_user" show-overflow-tooltip /> -->
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['marketing.marketing_contract/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['marketing.marketing_contract/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="marketingContractLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apimketingFrameworkAgreementLists, apimketingFrameworkAgreementDelete, apimketingFrameworkAgreementDetail } from '@/api/marketing_framework_agreement'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
contract_name: '',
agreement_nature: '',
business_nature: '',
signed_dept: '',
part_a: '',
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apimketingFrameworkAgreementLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apimketingFrameworkAgreementDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apimketingFrameworkAgreementDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -0,0 +1,475 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="关联主合同id" prop="related_contract_id">
<el-input v-model="formData.related_contract_id" clearable placeholder="请输入关联主合同id" />
</el-form-item>
<el-form-item label="合同类型 0-主合同 1-框架协议 2-补充协议" prop="contract_type">
<el-input v-model="formData.contract_type" clearable placeholder="请输入合同类型 0-主合同 1-框架协议 2-补充协议" />
</el-form-item>
<el-form-item label="合同名称" prop="contract_name">
<el-input v-model="formData.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
<el-form-item label="合同编号" prop="contract_code">
<el-input v-model="formData.contract_code" clearable placeholder="请输入合同编号" />
</el-form-item>
<el-form-item label="甲方签约单位" prop="part_a">
<el-input v-model="formData.part_a" clearable placeholder="请输入甲方签约单位" />
</el-form-item>
<el-form-item label="联系人" prop="part_a_contact">
<el-input v-model="formData.part_a_contact" clearable placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="业主地址" prop="part_a_address">
<el-input v-model="formData.part_a_address" clearable placeholder="请输入业主地址" />
</el-form-item>
<el-form-item label="乙方签约单位" prop="part_b">
<el-input v-model="formData.part_b" clearable placeholder="请输入乙方签约单位" />
</el-form-item>
<el-form-item label="乙方签约人" prop="part_b_signatory">
<el-input v-model="formData.part_b_signatory" clearable placeholder="请输入乙方签约人" />
</el-form-item>
<el-form-item label="业务性质" prop="business_nature">
<el-input v-model="formData.business_nature" clearable placeholder="请输入业务性质" />
</el-form-item>
<el-form-item label="行业性质" prop="industry_nature">
<el-input v-model="formData.industry_nature" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item label="资金来源" prop="fund_sources">
<el-input v-model="formData.fund_sources" clearable placeholder="请输入资金来源" />
</el-form-item>
<el-form-item label="建设区域" prop="const_area">
<el-input v-model="formData.const_area" clearable placeholder="请输入建设区域" />
</el-form-item>
<el-form-item label="协议性质" prop="agreement_nature">
<el-input v-model="formData.agreement_nature" clearable placeholder="请输入协议性质" />
</el-form-item>
<el-form-item label="工程总投资" prop="project_money">
<el-input v-model="formData.project_money" clearable placeholder="请输入工程总投资" />
</el-form-item>
<el-form-item label="工程规模及概况" prop="project_scale">
<el-input v-model="formData.project_scale" clearable placeholder="请输入工程规模及概况" />
</el-form-item>
<el-form-item label="签订金额" prop="signed_amount">
<el-input v-model="formData.signed_amount" clearable placeholder="请输入签订金额" />
</el-form-item>
<el-form-item label="合同签订费率" prop="signed_rate">
<el-input v-model="formData.signed_rate" clearable placeholder="请输入合同签订费率" />
</el-form-item>
<el-form-item label="合同服务工期" prop="service_duration">
<el-input v-model="formData.service_duration" clearable placeholder="请输入合同服务工期" />
</el-form-item>
<el-form-item label="计划开始日期" prop="start_date">
<el-input v-model="formData.start_date" clearable placeholder="请输入计划开始日期" />
</el-form-item>
<el-form-item label="计划结束日期" prop="end_date">
<el-input v-model="formData.end_date" clearable placeholder="请输入计划结束日期" />
</el-form-item>
<el-form-item label="履约金" prop="performance_money">
<el-input v-model="formData.performance_money" clearable placeholder="请输入履约金" />
</el-form-item>
<el-form-item label="履约金到期时间" prop="performance_money_expiration_time">
<el-input v-model="formData.performance_money_expiration_time" clearable placeholder="请输入履约金到期时间" />
</el-form-item>
<el-form-item label="合同付款方式" prop="payment_method">
<el-input v-model="formData.payment_method" clearable placeholder="请输入合同付款方式" />
</el-form-item>
<el-form-item label="合同主要内容" prop="content">
<el-input v-model="formData.content" clearable placeholder="请输入合同主要内容" />
</el-form-item>
<el-form-item label="附件" prop="annex">
<el-input v-model="formData.annex" clearable placeholder="请输入附件" />
</el-form-item>
<el-form-item label="签订部门" prop="signed_dept">
<el-input v-model="formData.signed_dept" clearable placeholder="请输入签订部门" />
</el-form-item>
<el-form-item label="签订负责人" prop="signed_head">
<el-input v-model="formData.signed_head" clearable placeholder="请输入签订负责人" />
</el-form-item>
<el-form-item label="监管部门" prop="supervise_dept">
<el-input v-model="formData.supervise_dept" clearable placeholder="请输入监管部门" />
</el-form-item>
<el-form-item label="项目总监/经理" prop="project_manager">
<el-input v-model="formData.project_manager" clearable placeholder="请输入项目总监/经理" />
</el-form-item>
<el-form-item label="实施方式" prop="implement_method">
<el-input v-model="formData.implement_method" clearable placeholder="请输入实施方式" />
</el-form-item>
<el-form-item label="盖章名称" prop="seal_name">
<el-input v-model="formData.seal_name" clearable placeholder="请输入盖章名称" />
</el-form-item>
<el-form-item label="是否限制" prop="is_limit">
<el-input v-model="formData.is_limit" clearable placeholder="请输入是否限制" />
</el-form-item>
<el-form-item label="限制次数" prop="limit_num">
<el-input v-model="formData.limit_num" clearable placeholder="请输入限制次数" />
</el-form-item>
<el-form-item label="文件类型" prop="file_type">
<el-input v-model="formData.file_type" clearable placeholder="请输入文件类型" />
</el-form-item>
<el-form-item label="盖章份数" prop="seal_num">
<el-input v-model="formData.seal_num" clearable placeholder="请输入盖章份数" />
</el-form-item>
<el-form-item label="盖章人" prop="seal_user">
<el-input v-model="formData.seal_user" clearable placeholder="请输入盖章人" />
</el-form-item>
<el-form-item label="骑缝盖章" prop="plance_seal">
<el-input v-model="formData.plance_seal" clearable placeholder="请输入骑缝盖章" />
</el-form-item>
<el-form-item label="发出日期" prop="send_date">
<el-input v-model="formData.send_date" clearable placeholder="请输入发出日期" />
</el-form-item>
<el-form-item label="邮寄编号" prop="mailing_number">
<el-input v-model="formData.mailing_number" clearable placeholder="请输入邮寄编号" />
</el-form-item>
<el-form-item label="评审状态 0-待移交 1-已移交" prop="review_status">
<el-input v-model="formData.review_status" clearable placeholder="请输入评审状态 0-待移交 1-已移交" />
</el-form-item>
<el-form-item label="立项状态 0-待立项 1-已立项" prop="status">
<el-input v-model="formData.status" clearable placeholder="请输入立项状态 0-待立项 1-已立项" />
</el-form-item>
<el-form-item label="录入人" prop="create_user">
<el-input v-model="formData.create_user" clearable placeholder="请输入录入人" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="marketingContractEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiMarketingContractAdd, apiMarketingContractEdit, apiMarketingContractDetail } from '@/api/marketing_contract'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑市场经营--合同信息' : '新增市场经营--合同信息'
})
//
const formData = reactive({
id: '',
related_contract_id: '',
contract_type: '',
contract_name: '',
contract_code: '',
part_a: '',
part_a_contact: '',
part_a_address: '',
part_b: '',
part_b_signatory: '',
business_nature: '',
industry_nature: '',
fund_sources: '',
const_area: '',
agreement_nature: '',
project_money: '',
project_scale: '',
signed_amount: '',
signed_rate: '',
service_duration: '',
start_date: '',
end_date: '',
performance_money: '',
performance_money_expiration_time: '',
payment_method: '',
content: '',
annex: '',
signed_dept: '',
signed_head: '',
supervise_dept: '',
project_manager: '',
implement_method: '',
seal_name: '',
is_limit: '',
limit_num: '',
file_type: '',
seal_num: '',
seal_user: '',
plance_seal: '',
send_date: '',
mailing_number: '',
review_status: '',
status: '',
create_user: '',
})
//
const formRules = reactive<any>({
related_contract_id: [{
required: true,
message: '请输入关联主合同id',
trigger: ['blur']
}],
contract_type: [{
required: true,
message: '请输入合同类型 0-主合同 1-框架协议 2-补充协议',
trigger: ['blur']
}],
contract_name: [{
required: true,
message: '请输入合同名称',
trigger: ['blur']
}],
contract_code: [{
required: true,
message: '请输入合同编号',
trigger: ['blur']
}],
part_a: [{
required: true,
message: '请输入甲方签约单位',
trigger: ['blur']
}],
part_a_contact: [{
required: true,
message: '请输入联系人',
trigger: ['blur']
}],
part_a_address: [{
required: true,
message: '请输入业主地址',
trigger: ['blur']
}],
part_b: [{
required: true,
message: '请输入乙方签约单位',
trigger: ['blur']
}],
part_b_signatory: [{
required: true,
message: '请输入乙方签约人',
trigger: ['blur']
}],
business_nature: [{
required: true,
message: '请输入业务性质',
trigger: ['blur']
}],
industry_nature: [{
required: true,
message: '请输入行业性质',
trigger: ['blur']
}],
fund_sources: [{
required: true,
message: '请输入资金来源',
trigger: ['blur']
}],
const_area: [{
required: true,
message: '请输入建设区域',
trigger: ['blur']
}],
agreement_nature: [{
required: true,
message: '请输入协议性质',
trigger: ['blur']
}],
project_money: [{
required: true,
message: '请输入工程总投资',
trigger: ['blur']
}],
project_scale: [{
required: true,
message: '请输入工程规模及概况',
trigger: ['blur']
}],
signed_amount: [{
required: true,
message: '请输入签订金额',
trigger: ['blur']
}],
signed_rate: [{
required: true,
message: '请输入合同签订费率',
trigger: ['blur']
}],
service_duration: [{
required: true,
message: '请输入合同服务工期',
trigger: ['blur']
}],
start_date: [{
required: true,
message: '请输入计划开始日期',
trigger: ['blur']
}],
end_date: [{
required: true,
message: '请输入计划结束日期',
trigger: ['blur']
}],
performance_money: [{
required: true,
message: '请输入履约金',
trigger: ['blur']
}],
performance_money_expiration_time: [{
required: true,
message: '请输入履约金到期时间',
trigger: ['blur']
}],
payment_method: [{
required: true,
message: '请输入合同付款方式',
trigger: ['blur']
}],
content: [{
required: true,
message: '请输入合同主要内容',
trigger: ['blur']
}],
signed_dept: [{
required: true,
message: '请输入签订部门',
trigger: ['blur']
}],
signed_head: [{
required: true,
message: '请输入签订负责人',
trigger: ['blur']
}],
supervise_dept: [{
required: true,
message: '请输入监管部门',
trigger: ['blur']
}],
project_manager: [{
required: true,
message: '请输入项目总监/经理',
trigger: ['blur']
}],
implement_method: [{
required: true,
message: '请输入实施方式',
trigger: ['blur']
}],
seal_name: [{
required: true,
message: '请输入盖章名称',
trigger: ['blur']
}],
is_limit: [{
required: true,
message: '请输入是否限制',
trigger: ['blur']
}],
limit_num: [{
required: true,
message: '请输入限制次数',
trigger: ['blur']
}],
file_type: [{
required: true,
message: '请输入文件类型',
trigger: ['blur']
}],
seal_num: [{
required: true,
message: '请输入盖章份数',
trigger: ['blur']
}],
seal_user: [{
required: true,
message: '请输入盖章人',
trigger: ['blur']
}],
plance_seal: [{
required: true,
message: '请输入骑缝盖章',
trigger: ['blur']
}],
send_date: [{
required: true,
message: '请输入发出日期',
trigger: ['blur']
}],
mailing_number: [{
required: true,
message: '请输入邮寄编号',
trigger: ['blur']
}],
review_status: [{
required: true,
message: '请输入评审状态 0-待移交 1-已移交',
trigger: ['blur']
}],
status: [{
required: true,
message: '请输入立项状态 0-待立项 1-已立项',
trigger: ['blur']
}],
create_user: [{
required: true,
message: '请输入录入人',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiMarketingContractDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiMarketingContractEdit(data)
: await apiMarketingContractAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,180 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="合同名称">
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
<el-form-item label="合同编号">
<el-input class="w-[280px]" v-model="queryParams.contract_code" clearable placeholder="请输入合同编号" />
</el-form-item>
<el-form-item label="甲方签约单位">
<el-input class="w-[280px]" v-model="queryParams.part_a" clearable placeholder="请输入业务性质" />
</el-form-item>
<el-form-item label="业务性质">
<el-input class="w-[280px]" v-model="queryParams.industry_nature" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item label="资金来源">
<el-input class="w-[280px]" v-model="queryParams.fund_sources" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item label="建设区域">
<el-input class="w-[280px]" v-model="queryParams.const_area" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item label="签订部门">
<el-input class="w-[280px]" v-model="queryParams.signed_dept" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item label="合同类型 ">
<el-input class="w-[280px]" v-model="queryParams.contract_type" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['marketing.marketing_contract/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['marketing.marketing_contract/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="甲方签约单位" prop="part_a" show-overflow-tooltip />
<el-table-column label="乙方签约单位" prop="part_b" show-overflow-tooltip />
<el-table-column label="乙方签约人" prop="part_b_signatory" show-overflow-tooltip />
<el-table-column label="业务性质" prop="business_nature" show-overflow-tooltip />
<!-- <el-table-column label="行业性质" prop="industry_nature" show-overflow-tooltip />
<el-table-column label="资金来源" prop="fund_sources" show-overflow-tooltip />
<el-table-column label="建设区域" prop="const_area" show-overflow-tooltip />
<el-table-column label="协议性质" prop="agreement_nature" show-overflow-tooltip />
<el-table-column label="工程总投资" prop="project_money" show-overflow-tooltip />
<el-table-column label="工程规模及概况" prop="project_scale" show-overflow-tooltip />
<el-table-column label="签订金额" prop="signed_amount" show-overflow-tooltip />
<el-table-column label="合同签订费率" prop="signed_rate" show-overflow-tooltip />
<el-table-column label="合同服务工期" prop="service_duration" show-overflow-tooltip />
<el-table-column label="计划开始日期" prop="start_date" show-overflow-tooltip />
<el-table-column label="计划结束日期" prop="end_date" show-overflow-tooltip />
<el-table-column label="履约金" prop="performance_money" show-overflow-tooltip />
<el-table-column label="履约金到期时间" prop="performance_money_expiration_time" show-overflow-tooltip />
<el-table-column label="合同付款方式" prop="payment_method" show-overflow-tooltip />
<el-table-column label="合同主要内容" prop="content" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip />
<el-table-column label="签订部门" prop="signed_dept" show-overflow-tooltip />
<el-table-column label="签订负责人" prop="signed_head" show-overflow-tooltip />
<el-table-column label="监管部门" prop="supervise_dept" show-overflow-tooltip />
<el-table-column label="项目总监/经理" prop="project_manager" show-overflow-tooltip />
<el-table-column label="实施方式" prop="implement_method" show-overflow-tooltip />
<el-table-column label="盖章名称" prop="seal_name" show-overflow-tooltip />
<el-table-column label="是否限制" prop="is_limit" show-overflow-tooltip />
<el-table-column label="限制次数" prop="limit_num" show-overflow-tooltip />
<el-table-column label="文件类型" prop="file_type" show-overflow-tooltip />
<el-table-column label="盖章份数" prop="seal_num" show-overflow-tooltip />
<el-table-column label="盖章人" prop="seal_user" show-overflow-tooltip />
<el-table-column label="骑缝盖章" prop="plance_seal" show-overflow-tooltip />
<el-table-column label="发出日期" prop="send_date" show-overflow-tooltip />
<el-table-column label="邮寄编号" prop="mailing_number" show-overflow-tooltip />
<el-table-column label="评审状态 0-待移交 1-已移交" prop="review_status" show-overflow-tooltip />
<el-table-column label="立项状态 0-待立项 1-已立项" prop="status" show-overflow-tooltip />
<el-table-column label="录入人" prop="create_user" show-overflow-tooltip /> -->
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['marketing.marketing_contract/edit']" type="primary" link
@click="handleEdit(row)">
合同移交
</el-button>
<!-- <el-button v-perms="['marketing.marketing_contract/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button> -->
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="marketingContractLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiMarketingHandoverContractLists, apiMarketingHandoverContractHandover, } from '@/api/marketing_handover_contract'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
contract_name: '',
contract_code: '',
part_a: '',
business_nature: '',
industry_nature: '',
fund_sources: '',
const_area: '',
signed_dept: '',
contract_type: '',
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiMarketingHandoverContractLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apiMarketingHandoverContractHandover({ id: data.id })
getLists()
// showEdit.value = true
// await nextTick()
// editRef.value?.open('edit')
// editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiMarketingSupplementaryAgreementDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -0,0 +1,140 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="合同id" prop="contract_id">
<el-input v-model="formData.contract_id" clearable placeholder="请输入合同id" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
<el-form-item label="附件" prop="annex">
<el-input v-model="formData.annex" clearable placeholder="请输入附件" />
</el-form-item>
<el-form-item label="录入人" prop="create_user">
<el-input v-model="formData.create_user" clearable placeholder="请输入录入人" />
</el-form-item>
<el-form-item label="录入日期" prop="create_time">
<el-input v-model="formData.create_time" clearable placeholder="请输入录入日期" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="marketingProjectFilingEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiMarketingProjectFilingAdd, apiMarketingProjectFilingEdit, apiMarketingProjectFilingDetail } from '@/api/marketing_project_filing'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑市场经营--项目备案' : '新增市场经营--项目备案'
})
//
const formData = reactive({
id: '',
contract_id: '',
remark: '',
annex: '',
create_user: '',
create_time: '',
})
//
const formRules = reactive<any>({
contract_id: [{
required: true,
message: '请输入合同id',
trigger: ['blur']
}],
remark: [{
required: true,
message: '请输入备注',
trigger: ['blur']
}],
create_user: [{
required: true,
message: '请输入录入人',
trigger: ['blur']
}],
create_time: [{
required: true,
message: '请输入录入日期',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiMarketingProjectFilingDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiMarketingProjectFilingEdit(data)
: await apiMarketingProjectFilingAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,137 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="合同id" prop="contract_id">
<el-input class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请输入合同id" />
</el-form-item>
<el-form-item label="录入人" prop="create_user">
<el-input class="w-[280px]" v-model="queryParams.create_user" clearable placeholder="请输入录入人" />
</el-form-item>
<el-form-item label="录入日期" prop="create_time">
<el-input class="w-[280px]" v-model="queryParams.create_time" clearable placeholder="请输入录入日期" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['marketing.marketing_project_filing/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['marketing.marketing_project_filing/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="合同id" prop="contract_id" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip />
<el-table-column label="录入人" prop="create_user" show-overflow-tooltip />
<el-table-column label="录入日期" prop="create_time" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['marketing.marketing_project_filing/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['marketing.marketing_project_filing/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="marketingProjectFilingLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiMarketingProjectFilingLists, apiMarketingProjectFilingDelete } from '@/api/marketing_project_filing'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
contract_id: '',
create_user: '',
create_time: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiMarketingProjectFilingLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiMarketingProjectFilingDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -0,0 +1,138 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="项目备案id" prop="project_filing_id">
<el-input v-model="formData.project_filing_id" clearable placeholder="请输入项目备案id" />
</el-form-item>
<el-form-item label="备案人员" prop="filing_user">
<el-input v-model="formData.filing_user" clearable placeholder="请输入备案人员" />
</el-form-item>
<el-form-item label="备案角色" prop="filing_role">
<el-input v-model="formData.filing_role" clearable placeholder="请输入备案角色" />
</el-form-item>
<el-form-item label="登记时间" prop="reg_time">
<el-input v-model="formData.reg_time" clearable placeholder="请输入登记时间" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-input v-model="formData.status" clearable placeholder="请输入状态" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="marketingProjectFilingDetailEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiMarketingProjectFilingDetailAdd, apiMarketingProjectFilingDetailEdit, apiMarketingProjectFilingDetailDetail } from '@/api/marketing_project_filing_detail'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑市场经营--项目备案明细' : '新增市场经营--项目备案明细'
})
//
const formData = reactive({
id: '',
project_filing_id: '',
filing_user: '',
filing_role: '',
reg_time: '',
status: '',
})
//
const formRules = reactive<any>({
project_filing_id: [{
required: true,
message: '请输入项目备案id',
trigger: ['blur']
}],
filing_user: [{
required: true,
message: '请输入备案人员',
trigger: ['blur']
}],
filing_role: [{
required: true,
message: '请输入备案角色',
trigger: ['blur']
}],
reg_time: [{
required: true,
message: '请输入登记时间',
trigger: ['blur']
}],
status: [{
required: true,
message: '请输入状态',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiMarketingProjectFilingDetailDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiMarketingProjectFilingDetailEdit(data)
: await apiMarketingProjectFilingDetailAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,141 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="项目备案id" prop="project_filing_id">
<el-input class="w-[280px]" v-model="queryParams.project_filing_id" clearable placeholder="请输入项目备案id" />
</el-form-item>
<el-form-item label="备案人员" prop="filing_user">
<el-input class="w-[280px]" v-model="queryParams.filing_user" clearable placeholder="请输入备案人员" />
</el-form-item>
<el-form-item label="备案角色" prop="filing_role">
<el-input class="w-[280px]" v-model="queryParams.filing_role" clearable placeholder="请输入备案角色" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-input class="w-[280px]" v-model="queryParams.status" clearable placeholder="请输入状态" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['marketing.marketing_project_filing_detail/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['marketing.marketing_project_filing_detail/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="项目备案id" prop="project_filing_id" show-overflow-tooltip />
<el-table-column label="备案人员" prop="filing_user" show-overflow-tooltip />
<el-table-column label="备案角色" prop="filing_role" show-overflow-tooltip />
<el-table-column label="登记时间" prop="reg_time" show-overflow-tooltip />
<el-table-column label="状态" prop="status" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['marketing.marketing_project_filing_detail/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['marketing.marketing_project_filing_detail/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="marketingProjectFilingDetailLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiMarketingProjectFilingDetailLists, apiMarketingProjectFilingDetailDelete } from '@/api/marketing_project_filing_detail'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
project_filing_id: '',
filing_user: '',
filing_role: '',
status: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiMarketingProjectFilingDetailLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiMarketingProjectFilingDetailDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -0,0 +1,475 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="关联主合同id" prop="related_contract_id">
<el-input v-model="formData.related_contract_id" clearable placeholder="请输入关联主合同id" />
</el-form-item>
<el-form-item label="合同类型 0-主合同 1-框架协议 2-补充协议" prop="contract_type">
<el-input v-model="formData.contract_type" clearable placeholder="请输入合同类型 0-主合同 1-框架协议 2-补充协议" />
</el-form-item>
<el-form-item label="合同名称" prop="contract_name">
<el-input v-model="formData.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
<el-form-item label="合同编号" prop="contract_code">
<el-input v-model="formData.contract_code" clearable placeholder="请输入合同编号" />
</el-form-item>
<el-form-item label="甲方签约单位" prop="part_a">
<el-input v-model="formData.part_a" clearable placeholder="请输入甲方签约单位" />
</el-form-item>
<el-form-item label="联系人" prop="part_a_contact">
<el-input v-model="formData.part_a_contact" clearable placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="业主地址" prop="part_a_address">
<el-input v-model="formData.part_a_address" clearable placeholder="请输入业主地址" />
</el-form-item>
<el-form-item label="乙方签约单位" prop="part_b">
<el-input v-model="formData.part_b" clearable placeholder="请输入乙方签约单位" />
</el-form-item>
<el-form-item label="乙方签约人" prop="part_b_signatory">
<el-input v-model="formData.part_b_signatory" clearable placeholder="请输入乙方签约人" />
</el-form-item>
<el-form-item label="业务性质" prop="business_nature">
<el-input v-model="formData.business_nature" clearable placeholder="请输入业务性质" />
</el-form-item>
<el-form-item label="行业性质" prop="industry_nature">
<el-input v-model="formData.industry_nature" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item label="资金来源" prop="fund_sources">
<el-input v-model="formData.fund_sources" clearable placeholder="请输入资金来源" />
</el-form-item>
<el-form-item label="建设区域" prop="const_area">
<el-input v-model="formData.const_area" clearable placeholder="请输入建设区域" />
</el-form-item>
<el-form-item label="协议性质" prop="agreement_nature">
<el-input v-model="formData.agreement_nature" clearable placeholder="请输入协议性质" />
</el-form-item>
<el-form-item label="工程总投资" prop="project_money">
<el-input v-model="formData.project_money" clearable placeholder="请输入工程总投资" />
</el-form-item>
<el-form-item label="工程规模及概况" prop="project_scale">
<el-input v-model="formData.project_scale" clearable placeholder="请输入工程规模及概况" />
</el-form-item>
<el-form-item label="签订金额" prop="signed_amount">
<el-input v-model="formData.signed_amount" clearable placeholder="请输入签订金额" />
</el-form-item>
<el-form-item label="合同签订费率" prop="signed_rate">
<el-input v-model="formData.signed_rate" clearable placeholder="请输入合同签订费率" />
</el-form-item>
<el-form-item label="合同服务工期" prop="service_duration">
<el-input v-model="formData.service_duration" clearable placeholder="请输入合同服务工期" />
</el-form-item>
<el-form-item label="计划开始日期" prop="start_date">
<el-input v-model="formData.start_date" clearable placeholder="请输入计划开始日期" />
</el-form-item>
<el-form-item label="计划结束日期" prop="end_date">
<el-input v-model="formData.end_date" clearable placeholder="请输入计划结束日期" />
</el-form-item>
<el-form-item label="履约金" prop="performance_money">
<el-input v-model="formData.performance_money" clearable placeholder="请输入履约金" />
</el-form-item>
<el-form-item label="履约金到期时间" prop="performance_money_expiration_time">
<el-input v-model="formData.performance_money_expiration_time" clearable placeholder="请输入履约金到期时间" />
</el-form-item>
<el-form-item label="合同付款方式" prop="payment_method">
<el-input v-model="formData.payment_method" clearable placeholder="请输入合同付款方式" />
</el-form-item>
<el-form-item label="合同主要内容" prop="content">
<el-input v-model="formData.content" clearable placeholder="请输入合同主要内容" />
</el-form-item>
<el-form-item label="附件" prop="annex">
<el-input v-model="formData.annex" clearable placeholder="请输入附件" />
</el-form-item>
<el-form-item label="签订部门" prop="signed_dept">
<el-input v-model="formData.signed_dept" clearable placeholder="请输入签订部门" />
</el-form-item>
<el-form-item label="签订负责人" prop="signed_head">
<el-input v-model="formData.signed_head" clearable placeholder="请输入签订负责人" />
</el-form-item>
<el-form-item label="监管部门" prop="supervise_dept">
<el-input v-model="formData.supervise_dept" clearable placeholder="请输入监管部门" />
</el-form-item>
<el-form-item label="项目总监/经理" prop="project_manager">
<el-input v-model="formData.project_manager" clearable placeholder="请输入项目总监/经理" />
</el-form-item>
<el-form-item label="实施方式" prop="implement_method">
<el-input v-model="formData.implement_method" clearable placeholder="请输入实施方式" />
</el-form-item>
<el-form-item label="盖章名称" prop="seal_name">
<el-input v-model="formData.seal_name" clearable placeholder="请输入盖章名称" />
</el-form-item>
<el-form-item label="是否限制" prop="is_limit">
<el-input v-model="formData.is_limit" clearable placeholder="请输入是否限制" />
</el-form-item>
<el-form-item label="限制次数" prop="limit_num">
<el-input v-model="formData.limit_num" clearable placeholder="请输入限制次数" />
</el-form-item>
<el-form-item label="文件类型" prop="file_type">
<el-input v-model="formData.file_type" clearable placeholder="请输入文件类型" />
</el-form-item>
<el-form-item label="盖章份数" prop="seal_num">
<el-input v-model="formData.seal_num" clearable placeholder="请输入盖章份数" />
</el-form-item>
<el-form-item label="盖章人" prop="seal_user">
<el-input v-model="formData.seal_user" clearable placeholder="请输入盖章人" />
</el-form-item>
<el-form-item label="骑缝盖章" prop="plance_seal">
<el-input v-model="formData.plance_seal" clearable placeholder="请输入骑缝盖章" />
</el-form-item>
<el-form-item label="发出日期" prop="send_date">
<el-input v-model="formData.send_date" clearable placeholder="请输入发出日期" />
</el-form-item>
<el-form-item label="邮寄编号" prop="mailing_number">
<el-input v-model="formData.mailing_number" clearable placeholder="请输入邮寄编号" />
</el-form-item>
<el-form-item label="评审状态 0-待移交 1-已移交" prop="review_status">
<el-input v-model="formData.review_status" clearable placeholder="请输入评审状态 0-待移交 1-已移交" />
</el-form-item>
<el-form-item label="立项状态 0-待立项 1-已立项" prop="status">
<el-input v-model="formData.status" clearable placeholder="请输入立项状态 0-待立项 1-已立项" />
</el-form-item>
<el-form-item label="录入人" prop="create_user">
<el-input v-model="formData.create_user" clearable placeholder="请输入录入人" />
</el-form-item>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="marketingContractEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiMarketingContractAdd, apiMarketingContractEdit, apiMarketingContractDetail } from '@/api/marketing_contract'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑市场经营--合同信息' : '新增市场经营--合同信息'
})
//
const formData = reactive({
id: '',
related_contract_id: '',
contract_type: '',
contract_name: '',
contract_code: '',
part_a: '',
part_a_contact: '',
part_a_address: '',
part_b: '',
part_b_signatory: '',
business_nature: '',
industry_nature: '',
fund_sources: '',
const_area: '',
agreement_nature: '',
project_money: '',
project_scale: '',
signed_amount: '',
signed_rate: '',
service_duration: '',
start_date: '',
end_date: '',
performance_money: '',
performance_money_expiration_time: '',
payment_method: '',
content: '',
annex: '',
signed_dept: '',
signed_head: '',
supervise_dept: '',
project_manager: '',
implement_method: '',
seal_name: '',
is_limit: '',
limit_num: '',
file_type: '',
seal_num: '',
seal_user: '',
plance_seal: '',
send_date: '',
mailing_number: '',
review_status: '',
status: '',
create_user: '',
})
//
const formRules = reactive<any>({
related_contract_id: [{
required: true,
message: '请输入关联主合同id',
trigger: ['blur']
}],
contract_type: [{
required: true,
message: '请输入合同类型 0-主合同 1-框架协议 2-补充协议',
trigger: ['blur']
}],
contract_name: [{
required: true,
message: '请输入合同名称',
trigger: ['blur']
}],
contract_code: [{
required: true,
message: '请输入合同编号',
trigger: ['blur']
}],
part_a: [{
required: true,
message: '请输入甲方签约单位',
trigger: ['blur']
}],
part_a_contact: [{
required: true,
message: '请输入联系人',
trigger: ['blur']
}],
part_a_address: [{
required: true,
message: '请输入业主地址',
trigger: ['blur']
}],
part_b: [{
required: true,
message: '请输入乙方签约单位',
trigger: ['blur']
}],
part_b_signatory: [{
required: true,
message: '请输入乙方签约人',
trigger: ['blur']
}],
business_nature: [{
required: true,
message: '请输入业务性质',
trigger: ['blur']
}],
industry_nature: [{
required: true,
message: '请输入行业性质',
trigger: ['blur']
}],
fund_sources: [{
required: true,
message: '请输入资金来源',
trigger: ['blur']
}],
const_area: [{
required: true,
message: '请输入建设区域',
trigger: ['blur']
}],
agreement_nature: [{
required: true,
message: '请输入协议性质',
trigger: ['blur']
}],
project_money: [{
required: true,
message: '请输入工程总投资',
trigger: ['blur']
}],
project_scale: [{
required: true,
message: '请输入工程规模及概况',
trigger: ['blur']
}],
signed_amount: [{
required: true,
message: '请输入签订金额',
trigger: ['blur']
}],
signed_rate: [{
required: true,
message: '请输入合同签订费率',
trigger: ['blur']
}],
service_duration: [{
required: true,
message: '请输入合同服务工期',
trigger: ['blur']
}],
start_date: [{
required: true,
message: '请输入计划开始日期',
trigger: ['blur']
}],
end_date: [{
required: true,
message: '请输入计划结束日期',
trigger: ['blur']
}],
performance_money: [{
required: true,
message: '请输入履约金',
trigger: ['blur']
}],
performance_money_expiration_time: [{
required: true,
message: '请输入履约金到期时间',
trigger: ['blur']
}],
payment_method: [{
required: true,
message: '请输入合同付款方式',
trigger: ['blur']
}],
content: [{
required: true,
message: '请输入合同主要内容',
trigger: ['blur']
}],
signed_dept: [{
required: true,
message: '请输入签订部门',
trigger: ['blur']
}],
signed_head: [{
required: true,
message: '请输入签订负责人',
trigger: ['blur']
}],
supervise_dept: [{
required: true,
message: '请输入监管部门',
trigger: ['blur']
}],
project_manager: [{
required: true,
message: '请输入项目总监/经理',
trigger: ['blur']
}],
implement_method: [{
required: true,
message: '请输入实施方式',
trigger: ['blur']
}],
seal_name: [{
required: true,
message: '请输入盖章名称',
trigger: ['blur']
}],
is_limit: [{
required: true,
message: '请输入是否限制',
trigger: ['blur']
}],
limit_num: [{
required: true,
message: '请输入限制次数',
trigger: ['blur']
}],
file_type: [{
required: true,
message: '请输入文件类型',
trigger: ['blur']
}],
seal_num: [{
required: true,
message: '请输入盖章份数',
trigger: ['blur']
}],
seal_user: [{
required: true,
message: '请输入盖章人',
trigger: ['blur']
}],
plance_seal: [{
required: true,
message: '请输入骑缝盖章',
trigger: ['blur']
}],
send_date: [{
required: true,
message: '请输入发出日期',
trigger: ['blur']
}],
mailing_number: [{
required: true,
message: '请输入邮寄编号',
trigger: ['blur']
}],
review_status: [{
required: true,
message: '请输入评审状态 0-待移交 1-已移交',
trigger: ['blur']
}],
status: [{
required: true,
message: '请输入立项状态 0-待立项 1-已立项',
trigger: ['blur']
}],
create_user: [{
required: true,
message: '请输入录入人',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiMarketingContractDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiMarketingContractEdit(data)
: await apiMarketingContractAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,161 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="协议名称">
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
<el-form-item label="业务性质">
<el-input class="w-[280px]" v-model="queryParams.business_nature" clearable placeholder="请输入合同编号" />
</el-form-item>
<el-form-item label="签订部门">
<el-input class="w-[280px]" v-model="queryParams.signed_dept" clearable placeholder="请输入业务性质" />
</el-form-item>
<el-form-item label="甲方签约单位">
<el-input class="w-[280px]" v-model="queryParams.part_a" clearable placeholder="请输入行业性质" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['marketing.marketing_contract/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['marketing.marketing_contract/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="甲方签约单位" prop="part_a" show-overflow-tooltip />
<el-table-column label="乙方签约单位" prop="part_b" show-overflow-tooltip />
<el-table-column label="乙方签约人" prop="part_b_signatory" show-overflow-tooltip />
<el-table-column label="业务性质" prop="business_nature" show-overflow-tooltip />
<!-- <el-table-column label="行业性质" prop="industry_nature" show-overflow-tooltip />
<el-table-column label="资金来源" prop="fund_sources" show-overflow-tooltip />
<el-table-column label="建设区域" prop="const_area" show-overflow-tooltip />
<el-table-column label="协议性质" prop="agreement_nature" show-overflow-tooltip />
<el-table-column label="工程总投资" prop="project_money" show-overflow-tooltip />
<el-table-column label="工程规模及概况" prop="project_scale" show-overflow-tooltip />
<el-table-column label="签订金额" prop="signed_amount" show-overflow-tooltip />
<el-table-column label="合同签订费率" prop="signed_rate" show-overflow-tooltip />
<el-table-column label="合同服务工期" prop="service_duration" show-overflow-tooltip />
<el-table-column label="计划开始日期" prop="start_date" show-overflow-tooltip />
<el-table-column label="计划结束日期" prop="end_date" show-overflow-tooltip />
<el-table-column label="履约金" prop="performance_money" show-overflow-tooltip />
<el-table-column label="履约金到期时间" prop="performance_money_expiration_time" show-overflow-tooltip />
<el-table-column label="合同付款方式" prop="payment_method" show-overflow-tooltip />
<el-table-column label="合同主要内容" prop="content" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip />
<el-table-column label="签订部门" prop="signed_dept" show-overflow-tooltip />
<el-table-column label="签订负责人" prop="signed_head" show-overflow-tooltip />
<el-table-column label="监管部门" prop="supervise_dept" show-overflow-tooltip />
<el-table-column label="项目总监/经理" prop="project_manager" show-overflow-tooltip />
<el-table-column label="实施方式" prop="implement_method" show-overflow-tooltip />
<el-table-column label="盖章名称" prop="seal_name" show-overflow-tooltip />
<el-table-column label="是否限制" prop="is_limit" show-overflow-tooltip />
<el-table-column label="限制次数" prop="limit_num" show-overflow-tooltip />
<el-table-column label="文件类型" prop="file_type" show-overflow-tooltip />
<el-table-column label="盖章份数" prop="seal_num" show-overflow-tooltip />
<el-table-column label="盖章人" prop="seal_user" show-overflow-tooltip />
<el-table-column label="骑缝盖章" prop="plance_seal" show-overflow-tooltip />
<el-table-column label="发出日期" prop="send_date" show-overflow-tooltip />
<el-table-column label="邮寄编号" prop="mailing_number" show-overflow-tooltip />
<el-table-column label="评审状态 0-待移交 1-已移交" prop="review_status" show-overflow-tooltip />
<el-table-column label="立项状态 0-待立项 1-已立项" prop="status" show-overflow-tooltip />
<el-table-column label="录入人" prop="create_user" show-overflow-tooltip /> -->
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['marketing.marketing_contract/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['marketing.marketing_contract/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="marketingContractLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiMarketingSupplementaryAgreementLists, apiMarketingSupplementaryAgreementDelete, apiMarketingSupplementaryAgreementDetail } from '@/api/marketing_supplementary_agreement'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
//
const queryParams = reactive({
contract_name: '',
business_nature: '',
signed_dept: '',
part_a: '',
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiMarketingSupplementaryAgreementLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apiMarketingSupplementaryAgreementDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiMarketingSupplementaryAgreementDelete({ id })
getLists()
}
getLists()
</script>

View File

@ -182,6 +182,9 @@ const open = (type = 'add') => {
popupRef.value?.open()
}
const area_change = (e: any) => {
formData.dept_id = '';
formData.job_id = '';
if (!e) return
depts.value = []
deptAll({ org_id: e }).then((res) => {
Object.assign(depts.value, res)
@ -189,6 +192,7 @@ const area_change = (e: any) => {
}
const area_change1 = (e: any) => {
jobs.value = []
if (!e) return
jobsAll({ dept_id: e }).then((res) => {
Object.assign(jobs.value, res)
formData.job_id = ''

View File

@ -3,41 +3,22 @@
<el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="formData" inline>
<el-form-item label="管理员账号">
<el-input
v-model="formData.account"
class="w-[280px]"
clearable
@keyup.enter="resetPage"
/>
<el-input v-model="formData.account" class="w-[280px]" clearable @keyup.enter="resetPage" />
</el-form-item>
<el-form-item label="管理员名称">
<el-input
v-model="formData.name"
class="w-[280px]"
clearable
@keyup.enter="resetPage"
/>
<el-input v-model="formData.name" class="w-[280px]" clearable @keyup.enter="resetPage" />
</el-form-item>
<el-form-item label="管理员角色">
<el-select class="w-[280px]" v-model="formData.role_id">
<el-option label="全部" value="" />
<el-option
v-for="(item, index) in optionsData.role"
:key="index"
:label="item.name"
:value="item.id"
/>
<el-option v-for="(item, index) in optionsData.role" :key="index" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
<export-data
class="ml-2.5"
:fetch-fun="adminLists"
:params="formData"
:page-size="pager.size"
/>
<export-data class="ml-2.5" :fetch-fun="adminLists" :params="formData" :page-size="pager.size" />
</el-form-item>
</el-form>
</el-card>
@ -58,49 +39,24 @@
</el-table-column>
<el-table-column label="账号" prop="account" min-width="100" />
<el-table-column label="名称" prop="name" min-width="100" />
<el-table-column
label="角色"
prop="role_name"
min-width="100"
show-tooltip-when-overflow
/>
<el-table-column
label="部门"
prop="dept_name"
min-width="100"
show-tooltip-when-overflow
/>
<el-table-column label="角色" prop="role_name" min-width="100" show-tooltip-when-overflow />
<el-table-column label="部门" prop="dept_name" min-width="100" show-tooltip-when-overflow />
<el-table-column label="创建时间" prop="create_time" min-width="180" />
<el-table-column label="最近登录时间" prop="login_time" min-width="180" />
<el-table-column label="最近登录IP" prop="login_ip" min-width="120" />
<el-table-column label="状态" min-width="100" v-perms="['auth.admin/edit']">
<template #default="{ row }">
<el-switch
v-if="row.root != 1"
v-model="row.disable"
:active-value="0"
:inactive-value="1"
@change="changeStatus(row)"
/>
<el-switch v-if="row.root != 1" v-model="row.disable" :active-value="0" :inactive-value="1"
@change="changeStatus(row)" />
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['auth.admin/edit']"
type="primary"
link
@click="handleEdit(row)"
>
<el-button v-perms="['auth.admin/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button
v-if="row.root != 1"
v-perms="['auth.admin/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
<el-button v-if="row.root != 1" v-perms="['auth.admin/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>

View File

@ -1,7 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px" :rules="formRules">
<el-form ref="formRef" :model="formData" label-width="170px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="项目" prop="project_id" @click="showDialog = true"
@ -13,26 +13,26 @@
<el-input v-model="project_code" readonly clearable placeholder="请选择项目" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="材料预算花费比例%" prop="material_budget_expenditure_ratio">
<el-form-item label="材料预算花费比例(%)" prop="material_budget_expenditure_ratio">
<el-input v-model="formData.material_budget_expenditure_ratio" clearable
placeholder="请输入材料预算花费比例%" />
placeholder="请输入材料预算花费比例(%)" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="人工预算花费比例%" prop="labour_budget_expenditure_ratio">
<el-form-item label="人工预算花费比例(%)" prop="labour_budget_expenditure_ratio">
<el-input v-model="formData.labour_budget_expenditure_ratio" clearable
placeholder="请输入人工预算花费比例%" />
placeholder="请输入人工预算花费比例(%)" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="费用预算花费比例%" prop="cost_budget_expenditure_ratio">
<el-form-item label="费用预算花费比例(%)" prop="cost_budget_expenditure_ratio">
<el-input v-model="formData.cost_budget_expenditure_ratio" clearable
placeholder="请输入费用预算花费比例%" />
placeholder="请输入费用预算花费比例(%)" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="分包预算花费比例%" prop="subcontract_budget_expenditure_ratio">
<el-form-item label="分包预算花费比例(%)" prop="subcontract_budget_expenditure_ratio">
<el-input v-model="formData.subcontract_budget_expenditure_ratio" clearable
placeholder="请输入分包预算花费比例%" />
placeholder="请输入分包预算花费比例(%)" />
</el-form-item> </el-col>
</el-row>

View File

@ -34,13 +34,12 @@
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="材料预算花费比例(%()" prop="material_budget_expenditure_ratio"
show-overflow-tooltip />
<el-table-column label="材料预算花费比例()" prop="material_budget_expenditure_ratio" show-overflow-tooltip />
<el-table-column label="人工预算花费比例%()" prop="labour_budget_expenditure_ratio" show-overflow-tooltip />
<el-table-column label="人工预算花费比例()" prop="labour_budget_expenditure_ratio" show-overflow-tooltip />
<el-table-column label="费用预算花费比例%()" prop="cost_budget_expenditure_ratio" show-overflow-tooltip />
<el-table-column label="分包预算花费比例%()" prop="subcontract_budget_expenditure_ratio"
<el-table-column label="费用预算花费比例()" prop="cost_budget_expenditure_ratio" show-overflow-tooltip />
<el-table-column label="分包预算花费比例()" prop="subcontract_budget_expenditure_ratio"
show-overflow-tooltip />
<el-table-column label="操作" width="170" fixed="right">

View File

@ -1,8 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="60%" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<popup ref="popupRef" :title="popupTitle" :async="true" width="60%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-row>
<el-col :span="8">
@ -17,8 +16,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="日期" prop="attendance_date">
<el-date-picker class="flex-1 !flex" clearable v-model="formData.attendance_date"
type="date" value-format="YYYY-MM-DD" placeholder="选择日期">
<el-date-picker class="flex-1 !flex" clearable v-model="formData.attendance_date" type="date"
value-format="YYYY-MM-DD" placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
@ -45,20 +44,19 @@
<el-form-item label="上班时间" prop="work_start_time">
<el-time-select v-model="formData.work_start_time" start="06:30" step="00:15" end="23:30"
placeholder="请选择" />
placeholder="请选择" class="flex-1 flex" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="下班时间" prop="work_end_time">
<el-time-select v-model="formData.work_end_time" start="06:30" step="00:15" end="23:30"
placeholder="请选择" />
placeholder="请选择" class="flex-1 flex" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="记工数量" prop="work_record_num">
<el-input v-model="formData.work_record_num" type="number" clearable
placeholder="请输入记工数量" />
<el-input v-model="formData.work_record_num" type="number" clearable placeholder="请输入记工数量" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -114,9 +112,6 @@ import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import { attendancedetailAdd, attendancedetailEdit, attendancedetailDetail } from '@/api/project_attendance_detail'
import customDialog from '@/components/project_personnel/index.vue'
import type { PropType } from 'vue'
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
let props = defineProps({
project: Object
})
@ -129,13 +124,9 @@ const showDialog1 = ref(false)
const project_name = ref('')
const project_code = ref('')
const idcard = ref('')
const people = ref('')
const work_type = ref('')
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const formDataannex = reactive([])
const userInfo = userStore.userInfo
//
const formData = reactive({
@ -172,7 +163,7 @@ if (props.project) customEvent(props.project);
const customEvent1 = (e) => {
formData.person_id = e.id
formData.people = e.name
formData.person_name = e.name
idcard.value = e.idcard
work_type.value = e.work_type_text
showDialog1.value = false
@ -182,26 +173,6 @@ const customEvent1 = (e) => {
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑考勤明细' : '新增考勤明细'
})
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formRules = reactive<any>({
@ -213,18 +184,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
@ -234,7 +193,6 @@ const setFormData = async (data: Record<any, any>) => {
project_name.value = data.project_name
project_code.value = data.project_code
idcard.value = data.person_idcard
// people.value = data.person_name
work_type.value = data.work_type_text
}
@ -248,9 +206,6 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate()
formData.work_start_time = formData.work_start_time ? formData.attendance_date + ` ${formData.work_start_time}` : ""
formData.work_end_time = formData.work_end_time ? formData.attendance_date + ` ${formData.work_end_time}` : ""

View File

@ -148,14 +148,9 @@ import projectDialog from '@/components/project/index.vue'
import { attendanceRecordAdd, attendanceRecordEdit, attendanceRecordDetail } from '@/api/project_attendance_record'
import { attendancedetailDelete, attendancedetailLists } from '@/api/project_attendance_detail'
import projectPersonnel from '@/components/project_personnel/index.vue'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { watch } from "vue"
import { useDictData } from '@/hooks/useDictOptions'
import { cloneDeep } from 'lodash'
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
let props = defineProps({
project: Object
})
@ -165,7 +160,7 @@ const formData = reactive({
project_id: '',
attendance_date: '',
remark: '',
file: '',
annex: '',
attendance_detail: [],
})
@ -178,15 +173,10 @@ const showDialog = ref(false)
const showDialog1 = ref(false)
const project_name = ref('')
const project_code = ref('')
// const renshu = ref('')
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const formDataannex = reactive([])
const userInfo = userStore.userInfo
const handleAdd = (row: any) => {
// const index = formData.attendance_detail.indexOf(row);
// formData.attendance_detail.splice(index + 1, 0, {});
formData.attendance_detail.push({})
};
const handleDelete = async (row: any) => {

View File

@ -27,8 +27,8 @@
<el-form-item label="收款金额" prop="sk_amount">
<el-input v-model="formData.sk_amount" clearable placeholder="请输入收款金额" type="number" />
</el-form-item>
<el-form-item label="提成比例%%" prop="tc_rate">
<el-input v-model="formData.tc_rate" clearable placeholder="请输入提成比例%%" type="number" />
<el-form-item label="提成比例(%)" prop="tc_rate">
<el-input v-model="formData.tc_rate" clearable placeholder="请输入提成比例(%)" type="number" />
</el-form-item>
<el-form-item label="应提成金额" prop="tc_amount">
<el-input v-model="formData.tc_amount" clearable placeholder="请输入应提成金额" type="number" />

View File

@ -15,8 +15,7 @@
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="姓名" @click="showDialog1 = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="姓名" @click="showDialog1 = true">
<el-input v-model="person_name" clearable placeholder="请选择项目人员" />
</el-form-item> </el-col>
<el-col :span="8">
@ -32,8 +31,10 @@
</el-date-picker>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="到期日期" prop="due_date"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="到期日期" prop="due_date" :rules="{
validator: chekcDate,
trigger: ['blur']
}">
<el-date-picker class="flex-1 !flex" v-model="formData.due_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="选择到期日期">
</el-date-picker>
@ -119,9 +120,7 @@ const idcard = ref('')
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const formDataannex = reactive([])
const userInfo = userStore.userInfo
//
const formData = reactive({
@ -141,6 +140,13 @@ const formData = reactive({
annex: [],
})
const chekcDate = (rule: any, value: any, callback: any) => {
if (new Date(formData.due_date) < new Date(formData.insurance_date)) {
callback(new Error('到期日期不能早于投保日期'))
} else {
callback()
}
}
//
const customEvent = (e) => {
@ -168,6 +174,7 @@ const popupTitle = computed(() => {
//
const formRules = reactive<any>({

View File

@ -14,8 +14,7 @@
<el-input class="w-[220px]" v-model="project_code" clearable placeholder="请输入项目编码" disabled />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="姓名" @click="showDialog1 = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="姓名" @click="showDialog1 = true">
<el-input class="w-[220px]" v-model="person_name" clearable placeholder="请选择项目人员" />
</el-form-item> </el-col>
<el-col :span="8">

View File

@ -136,9 +136,8 @@ import salescontractDialog from '@/components/contract/index.vue'
import projectDialog from '@/components/project/index.vue'
import { appointmentAdd, appointmentEdit, appointmentDetail } from '@/api/appointment'
import type { PropType } from 'vue'
import useUserStore from "@/stores/modules/user";
const protype = ref()
const userStore = useUserStore();
import { getAllProjectTypes } from '@/api/projecttype'
const contract_name = ref('')
const project_name = ref('')
@ -146,7 +145,6 @@ const project_code = ref('')
const contract_no = ref('')
const custom_name = ref('')
const manage_name = ref('')
const userInfo = userStore.userInfo
const personnel = ref<any>()
@ -160,8 +158,6 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const amount_daxie = ref('')
const showDialog = ref(false)
const showDialog1 = ref(false)
const showDialog2 = ref(false)
@ -176,6 +172,9 @@ const customEvent2 = (e: any) => {
formData.project_id = e.id;
project_name.value = e.name;
project_code.value = e.project_code;
// formData.project_type_id = e.project_type;
custom_name.value = e.custom_name;
contract_name.value = ''
contract_no.value = ''
@ -277,7 +276,9 @@ const handleClose = () => {
emit('close')
}
getAllProjectTypes().then(res => {
protype.value = res
})
defineExpose({

View File

@ -27,7 +27,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="身份证号" prop="idcard"
:rules="[{ required: true, validator: checkIDcard, trigger: 'blur' }]">
:rules="[{ required: true, validator: checkIdCard, trigger: 'blur' }]">
<el-input v-model="formData.idcard" clearable placeholder="请输入身份证号" />
</el-form-item>
</el-col>
@ -160,7 +160,7 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
}, 100)
}
const checkIDcard = (rule: any, value: any, callback: (arg0: Error) => any) => {
const checkIdCard = (rule: any, value: any, callback: (arg0: Error) => any) => {
const Reg = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[Xx\d]$/
if (!value) {
return callback(new Error('身份证号码不能为空'))

View File

@ -7,10 +7,11 @@
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" />
</el-form-item>
<el-form-item label="合同名称" prop="contract_id" @click="showDialog1 = true">
<el-input v-model="formData.contract_name" clearable readonly placeholder="系统自动填写" />
<el-input v-model="formData.contract_name" clearable readonly placeholder="点击选择合同" />
</el-form-item>
<el-form-item label="结算金额" prop="settlement_amount">
<el-input v-model="formData.settlement_amount" clearable placeholder="请输入结算金额" @input="amountinput" />
<el-input v-model="formData.settlement_amount" clearable placeholder="请输入结算金额" @input="amountinput"
type="number" />
</el-form-item>
<el-form-item label="结算金额大写" prop="settlement_amount_uppercase">
<el-input v-model="formData.settlement_amount_uppercase" readonly disabled placeholder="系统自动填写" />
@ -106,6 +107,7 @@ const popupTitle = computed(() => {
//
const formData = reactive({
id: "",
project_name: "",
project_id: '',
contract_id: '',

View File

@ -63,17 +63,17 @@
</el-table-column>
<el-table-column label="工作量">
<template #default="{ row, $index }">
<el-input v-model="row.num" @input="subtractji1(row, $index)" />
<el-input v-model="row.num" @input="subtractji1(row, $index)" type="number" />
</template>
</el-table-column>
<el-table-column label="单价" prop="price">
<template #default="{ row, $index }">
<el-input v-model="row.price" @input="subtractji1(row, $index)" />
<el-input v-model="row.price" @input="subtractji1(row, $index)" type="number" />
</template>
</el-table-column>
<el-table-column label="金额" prop="amount">
<template #default="{ row }">
<el-input v-model="row.amount" />
<el-input v-model="row.amount" type="number" />
</template>
</el-table-column>

View File

@ -1,5 +1,5 @@
const detailConfig = {
title: "安全事故表",
title: "质量事故表",
config: [
{
label: "组织名称",
@ -29,6 +29,9 @@ const detailConfig = {
label: "设备事故",
value: "device_accident"
},
{
label: "承包商人员",
value: "contractor_user"
@ -45,10 +48,6 @@ const detailConfig = {
label: "内容",
value: "content"
},
{
label: "承包商人员",
value: "contractor_user"
},
{
label: "备注",
value: "remark",

View File

@ -186,9 +186,8 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
if (data.dept_id) {
getlist1(data.dept_id
)
if (data.org_id) {
getlist1(data.org_id)
}
project_name.value = data.project_name
project_code.value = data.project_code

View File

@ -36,7 +36,7 @@
<el-col :span="24">
<el-form-item label="序号" prop="serial_number">
<el-input v-model="formData.serial_number" clearable placeholder="请输入序号" />
<el-input v-model="formData.serial_number" clearable placeholder="请输入序号" v-type="'code'" />
</el-form-item>
</el-col>

View File

@ -50,14 +50,16 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="合格率" prop="pass_rate">
<el-form-item label="合格率(%)" prop="pass_rate">
<el-input v-model="formData.pass_rate" type="number" clearable placeholder="请输入合格率" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="允许偏差" prop="allowable_deviation">
<el-input v-model="formData.allowable_deviation" type="number" clearable
placeholder="请输入允许偏差" />
<el-input-number v-model="formData.allowable_deviation" :min="1" :max="10"
placeholder="范围为1-200" class="flex flex-1" />
</el-form-item>
</el-col>
<el-col :span="24">
@ -153,7 +155,7 @@ const formData = reactive({
basic_requirements: "",
target_specification: '',
file: [],
allowable_deviation: "",
allowable_deviation: undefined,
pass_rate: "",

View File

@ -89,7 +89,7 @@
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="收款账号" prop="collection_account">
<el-input v-model="formData.collection_account" clearable placeholder="请输入收款账号" />
<el-input v-model="formData.collection_account" clearable placeholder="请输入收款账号" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">

View File

@ -1,7 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form ref="formRef" :model="formData" label-width="130px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="供应商名称" prop="supplier_id" @click="showDialog1 = true" :rules="[
@ -100,8 +100,9 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="质保金比例(%" prop="retention_money_rate">
<el-input v-model="formData.retention_money_rate" clearable placeholder="请输入质保金比例(%" />
<el-form-item label="质保金比例(%)" prop="retention_money_rate">
<el-input v-model="formData.retention_money_rate" clearable placeholder="请输入质保金比例(%"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -159,12 +160,12 @@
</el-table-column>
<el-table-column label="工作量" prop="num">
<template #default="{ row }">
<el-input v-model="row.num" />
<el-input v-model="row.num" type="number" />
</template>
</el-table-column>
<el-table-column label="含税单价" prop="price">
<template #default="{ row }">
<el-input v-model="row.price" />
<el-input v-model="row.price" type="number" />
</template>
</el-table-column>
@ -219,7 +220,9 @@
</el-date-picker> </template></el-table-column>
<el-table-column label="金额" prop="amount">
<template #default="{ row }">
<el-input v-model="row.amount" /> </template></el-table-column>
<el-input v-model="row.amount" type="number" />
</template>
</el-table-column>
<el-table-column label="备注" prop="remark">
<template #default="{ row }">

View File

@ -16,7 +16,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="验收类型" prop="accept_type">
<el-select class="flex-1" v-model="formData.accept_type" clearable placeholder="请选择巡视类型">
<el-select class="flex-1" v-model="formData.accept_type" clearable placeholder="请选择验收类型">
<el-option v-for="(item, index) in dictData.accept_type" :key="index" :label="item.name"
:value="item.value" />
</el-select>

View File

@ -15,7 +15,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="身份证">
<el-form-item label="身份证" prop="id_card">
<el-input v-model="formData.id_card" clearable placeholder="请输入身份证" />
</el-form-item>
</el-col>
@ -141,6 +141,8 @@ import {
} from "@/api/supervision_construction_management_personnel";
import type { PropType } from "vue";
import { supervision_participating_units_qualifications } from "@/components/dialogTable/dialogTableConfig";
import { checkIdCard } from "@/utils/validate"
defineProps({
dictData: {
@ -246,6 +248,10 @@ const formRules = reactive<any>({
message: "请输入身份证",
trigger: ["blur"],
},
{
validator: checkIdCard,
trigger: ['blur']
}
],
technical_title: [
{

View File

@ -41,11 +41,98 @@
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
</el-col>
<createUserLable :formData="formData" flag></createUserLable>
</el-row>
<div style="margin-bottom: 30px;">设备信息</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.entry_detail">
<template #empty>
<span class="cursor-pointer">暂无数据点击添加 <el-button @click="handleAdd">+</el-button></span>
</template>
<el-table-column label="序号" width="150px">
<template #default="{ row }">
<el-form-item prop="" label-width="0">
<el-button @click="handleAdd()">+</el-button>
<el-button @click="handleDelete(row)">-</el-button>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="设备名称" prop="name">
<template #default="scope">
<el-form-item prop="" label-width="0">
<el-input v-model="scope.row.name"
@click="showDialog3 = true, tableIndex = scope.$index" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="设备品牌" prop="brand">
<template #default="scope">
<el-form-item prop="" label-width="0">
<el-input v-model="scope.row.brand" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="计数单位" prop="unit">
<template #default="{ row }">
<el-form-item prop="" label-width="0">
<el-input v-model="row.unit" v-type="'unit'" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="是否合同约定品牌" prop="contract_brand">
<template #default="{ row }">
<el-form-item prop="" label-width="0">
<el-select class="flex-1" v-model="row.contract_brand" clearable placeholder="请选择">
<el-option label="否" :value="0" />
<el-option label="是" :value="1" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="型号" prop="model">
<template #default="{ row }">
<el-form-item prop="" label-width="0">
<el-input v-model="row.model" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="进场数量" prop="" label-width="0">
<template #default="{ row, $index }">
<el-form-item :prop="`entry_detail[${$index}].entry_number`" :rules="{
validator: checkNum,
trigger: ['blur']
}" label-width="0">
<el-input v-model="row.entry_number" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="证明文件是否安全" prop="documentation">
<template #default="{ row }">
<el-form-item prop="" label-width="0">
<el-select class="flex-1" v-model="row.documentation" clearable placeholder="请选择">
<el-option label="否" :value="0" />
<el-option label="是" :value="1" />
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="核对是否一致" prop="verify">
<template #default="{ row }">
<el-form-item prop="" label-width="0">
<el-select class="flex-1" v-model="row.verify" clearable placeholder="请选择">
<el-option label="否" :value="0" />
<el-option label="是" :value="1" />
</el-select>
</el-form-item>
</template>
</el-table-column>
</el-table>
</div>
<formTable :formData="formData.entry_problem" :config="tableConfig" :dictData="dictData"></formTable>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<dialogTable @customEvent="customEvent" :config="supervision_project" />
</el-dialog>
@ -56,86 +143,17 @@
</dialogTable>
</el-dialog>
</div>
<el-dialog v-model="showDialog3" title="选择材料信息" width="70%">
<el-dialog v-model="showDialog3" title="选择设备信息" width="70%">
<dialogTable :config="supervision_material_equipment_info" :query="{ type: 1 }"
@customEvent="customEvent2">
</dialogTable>
</el-dialog>
</el-form>
<div style="margin-bottom: 30px;">设备信息</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.entry_detail">
<template #empty>
<span class="cursor-pointer">暂无数据点击添加 <el-button @click="handleAdd">+</el-button></span>
</template>
<el-table-column label="序号" width="150px">
<template #default="{ row }">
<el-button @click="handleAdd()">+</el-button>
<el-button @click="handleDelete(row)">-</el-button>
</template>
</el-table-column>
<el-table-column label="设备名称" prop="name">
<template #default="scope">
<el-input v-model="scope.row.name" @click="showDialog3 = true, tableIndex = scope.$index" />
</template>
</el-table-column>
<el-table-column label="设备品牌" prop="brand">
<template #default="scope">
<el-input v-model="scope.row.brand" />
</template>
</el-table-column>
<el-table-column label="计数单位" prop="unit">
<template #default="{ row }">
<el-input v-model="row.unit" v-type="'unit'" />
</template>
</el-table-column>
<el-table-column label="是否合同约定品牌" prop="contract_brand">
<template #default="{ row }">
<el-select class="flex-1" v-model="row.contract_brand" clearable placeholder="请选择">
<el-option label="否" :value="0" />
<el-option label="是" :value="1" />
</el-select>
</template>
</el-table-column>
<el-table-column label="型号" prop="model">
<template #default="{ row }">
<el-input v-model="row.model" />
</template>
</el-table-column>
<el-table-column label="进场数量" prop="entry_number">
<template #default="{ row }">
<el-input v-model="row.entry_number" />
</template>
</el-table-column>
<el-table-column label="证明文件是否安全" prop="documentation">
<template #default="{ row }">
<el-select class="flex-1" v-model="row.documentation" clearable placeholder="请选择">
<el-option label="否" :value="0" />
<el-option label="是" :value="1" />
</el-select>
</template>
</el-table-column>
<el-table-column label="核对是否一致" prop="verify">
<template #default="{ row }">
<el-select class="flex-1" v-model="row.verify" clearable placeholder="请选择">
<el-option label="否" :value="0" />
<el-option label="是" :value="1" />
</el-select>
</template>
</el-table-column>
</el-table>
</div>
<formTable :formData="formData.entry_problem" :config="tableConfig" :dictData="dictData"></formTable>
</popup>
</div>
@ -223,7 +241,8 @@ const handleAdd = () => {
"contract_brand": 0,
"entry_number": 0,
"documentation": 0,
"verify": 0
"verify": 0,
number: 0
})
}
const handleDelete = async (row: any) => {
@ -253,11 +272,26 @@ const customEvent1 = (e) => {
showDialog2.value = false
}
const customEvent2 = (e) => {
let { name, brand, model, unit, contract_brand, entry_number, documentation, verify } = e
Object.assign(formData.entry_detail[tableIndex.value], { name, brand, model, unit, contract_brand, entry_number, documentation, verify })
let { name, brand, model, unit, contract_brand, entry_number, documentation, verify, number } = e
Object.assign(formData.entry_detail[tableIndex.value], { name, brand, model, unit, contract_brand, entry_number, documentation, verify, number })
showDialog3.value = false
}
const checkNum = (rule: any, value: any, callback: any, source) => {
const regex = /\[(\d+)\]/; // ,table
let index = 0
for (let key in source) {
index = key.match(regex)[1]
}
(+value) > (+formData.entry_detail[index].number)
? callback(new Error(`超过设备计划数量(${formData.entry_detail[index].number})`))
: callback()
}
//
const formRules = reactive<any>({
project_id: [{

View File

@ -178,6 +178,9 @@ const chekcDate = (rule: any, value: any, callback: any) => {
}
const formRules = reactive<any>({
project_id: [{
required: true,

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-row>
<el-col :span="8">
@ -12,18 +11,17 @@
</el-col>
<el-col :span="8">
<el-form-item label="分部分项工程" prop="partial_project">
<el-select class="flex-1" v-model="formData.partial_project" clearable
placeholder="请选择分部分项工程">
<el-option v-for="(item, index) in dictData.partial_project" :key="index"
:label="item.name" :value="parseInt(item.value)" />
<el-select class="flex-1" v-model="formData.partial_project" clearable placeholder="请选择分部分项工程">
<el-option v-for="(item, index) in dictData.partial_project" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="归属年月" prop="attribution_date">
<el-date-picker class="flex-1 !flex" v-model="formData.attribution_date" clearable
type="month" value-format="YYYY-MM" placeholder="请选择日期">
<el-date-picker class="flex-1 !flex" v-model="formData.attribution_date" clearable type="month"
value-format="YYYY-MM" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
@ -113,7 +111,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="检查时间">
<el-form-item label="检查时间" prop="check_time">
<el-date-picker class="flex-1 !flex" v-model="formData.check_time" clearable
value-format="YYYY-MM-DD" placeholder="选择检查时间">
</el-date-picker>
@ -225,6 +223,17 @@ const customEvent = (e) => {
formData.project_name = e.project_name
showDialog.value = false
}
const chekcDate = (rule: any, value: any, callback: any) => {
if (new Date(formData.check_time) < new Date(formData.actual_construction_time)) {
callback(new Error('检查时间不能早于实际施工时间 '))
} else {
callback()
}
}
//
const formRules = reactive<any>({
project_id: [{
@ -259,27 +268,27 @@ const formRules = reactive<any>({
}],
is_discuss: [{
required: true,
message: '请输入是否已经专家组论证 0-否 1-是',
message: '请输入是否已经专家组论证',
trigger: ['blur']
}],
is_modify: [{
required: true,
message: '请输入是否已按专家意见修改 0-否 1-是',
message: '请输入是否已按专家意见修改',
trigger: ['blur']
}],
is_agree: [{
required: true,
message: '请输入监理审批是否同意 0-否 1-是',
message: '请输入监理审批是否同意',
trigger: ['blur']
}],
is_accept: [{
required: true,
message: '请输入是否实施验收 0-否 1-是',
message: '请输入是否实施验收',
trigger: ['blur']
}],
is_accept_to_plan: [{
required: true,
message: '请输入是否按方案实施验收 0-否 1-是',
message: '请输入是否按方案实施验收',
trigger: ['blur']
}],
check_user: [{
@ -291,6 +300,10 @@ const formRules = reactive<any>({
required: true,
message: '请输入检查时间',
trigger: ['blur']
},
{
validator: chekcDate,
trigger: ['blur']
}],
problems_rectification: [{
required: true,
@ -304,12 +317,12 @@ const formRules = reactive<any>({
}],
exceed_the_control_value: [{
required: true,
message: '请输入是否超控制值 0-否 1-是',
message: '请输入是否超控制值',
trigger: ['blur']
}],
exceed_the_warning_value: [{
required: true,
message: '请输入是否超预警值 0-否 1-是',
message: '请输入是否超预警值',
trigger: ['blur']
}],
control_measures: [{

View File

@ -300,14 +300,12 @@ const customEvent1 = (e) => {
const chekcDate = (rule: any, value: any, callback: any) => {
if (new Date(formData.end_time) < new Date(formData.start_time)) {
callback(new Error('巡视结束时间早于巡视开始时间'))
callback(new Error('巡视结束时间不能早于巡视开始时间'))
} else {
callback()
}
}
//
const formRules = reactive<any>({
project_id: [{

View File

@ -40,12 +40,12 @@
</el-form-item>
</el-col>
</el-row>
<formTable :formData="formData.detail" :config="tableConfig"></formTable>
<el-dialog v-model="showDialog2" title="选择来源单据" width="70%">
<dialogTable :config="supervision_material_entry" @customEvent="customEvent1"
:query="{ parallel_test: 1 }"></dialogTable>
</el-dialog>
</el-form>
<formTable :formData="formData.detail" :config="tableConfig"></formTable>
</popup>
</div>
</template>
@ -92,6 +92,19 @@ const formData = reactive({
"detail": []
})
const checkNum = (rule: any, value: any, callback: any, source) => {
const regex = /\[(\d+)\]/; // ,table
let index = 0
for (let key in source) {
index = key.match(regex)[1]
}
(+formData.detail[index].num) > (+formData.detail[index].entry_number)
? callback(new Error(`超过进场数量(${formData.detail[index].entry_number})`))
: callback()
}
const tableConfig = reactive(
{
@ -135,6 +148,7 @@ const tableConfig = reactive(
{
label: "检验数量",
value: 'num',
check: ['detail', checkNum]
},
],
deleteApi: apisupervision_material_parallel_testing_delete

View File

@ -57,15 +57,15 @@
@click="handleDetail(row.id)">
详情
</el-button>
<router-link :to="{
path: '/supervision/supervision_work/supervision_material_parallel_testing_detail',
query: { id: row.id }
}">
<el-button type="primary" link>
<el-button type="primary" link>
<router-link :to="{
path: '/supervision/supervision_work/supervision_material_parallel_testing_detail',
query: { id: row.id }
}">
明细
</el-button>
</router-link>
</router-link>
</el-button>
</template>
</el-table-column>
</el-table>

View File

@ -101,11 +101,6 @@ const formData = reactive({
//
function checkPhone1(rules: any, value: any, callback: any) {
console.log(value)
}
const tableConfig = reactive(
{
title: "联系人",

View File

@ -27,7 +27,7 @@
</el-date-picker>
</el-form-item>
<el-form-item label="资质状态 ">
<el-select class="flex-1" v-model="formData.qualification_status" clearable placeholder="请选择部门">
<el-select class="flex-1" v-model="formData.qualification_status" clearable placeholder="请选择资质状态">
<el-option label="有效" :value="0" />
<el-option label="无效" :value="1" />
</el-select>

View File

@ -55,7 +55,7 @@
删除
</el-button>
<el-button v-perms="['supervision_work.supervision_problem/detail']" link
@click="handleDetail(row.id)">
@click="handleDetail(row.id)" v-if="row.is_rectification != 0">
详情
</el-button>
</template>

View File

@ -144,7 +144,7 @@ import Popup from '@/components/popup/index.vue'
import { apiSupervisionSafetyManagementPersonnelAdd, apiSupervisionSafetyManagementPersonnelEdit, } from '@/api/supervision_safety_management_personnel'
import { supervision_participating_units_qualifications } from "@/components/dialogTable/dialogTableConfig"
import type { PropType } from 'vue'
import { checkIdcard, checkPhone } from "@/utils/validate"
import { checkIdCard } from "@/utils/validate"
defineProps({
@ -249,7 +249,7 @@ const formRules = reactive<any>({
trigger: ['blur']
},
{
validator: checkIdcard,
validator: checkIdCard,
trigger: ['blur']
}
],

View File

@ -86,7 +86,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="旁站人员" prop="side_station_user">
<el-input v-model="formData.side_station_user" clearable placeholder="请输入关注人" />
<el-input v-model="formData.side_station_user" clearable placeholder="请输入旁站人员" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -209,7 +209,7 @@ const tableConfig = reactive(
},
{
label: "检查容",
label: "检查容",
value: 'check_content'
},
{

View File

@ -59,6 +59,8 @@ import Popup from '@/components/popup/index.vue'
import { apiSupervisionSpecialOperationPersonnelAdd, apiSupervisionSpecialOperationPersonnelEdit, } from '@/api/supervision_special_operation_personnel'
import { supervision_participating_units_qualifications } from "@/components/dialogTable/dialogTableConfig"
import type { PropType } from 'vue'
import { checkIdCard } from "@/utils/validate"
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -145,6 +147,10 @@ const formRules = reactive<any>({
required: true,
message: '请输入身份证',
trigger: ['blur']
},
{
validator: checkIdCard,
trigger: ['blur']
}],
validity_period: [{
required: true,

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-row>
<el-col :span="8">
@ -47,6 +46,7 @@
<createUserLable :formData="formData" flag></createUserLable>
</el-row>
<formTable :formData="formData.sampling_detail" :config="tableConfig"></formTable>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<dialogTable @customEvent="customEvent" :config="supervision_project" />
@ -56,7 +56,6 @@
</el-dialog>
</el-form>
<formTable :formData="formData.sampling_detail" :config="tableConfig"></formTable>
</popup>
</div>
@ -110,6 +109,21 @@ const formData = reactive({
sampling_detail: []
})
const checkNum = (rule: any, value: any, callback: any, source) => {
const regex = /\[(\d+)\]/; // ,table
let index = 0
for (let key in source) {
index = key.match(regex)[1]
}
(+value) > (+formData.sampling_detail[index].entry_number)
? callback(new Error(`超过进场数量(${formData.sampling_detail[index].entry_number})`))
: callback()
}
const tableConfig = reactive(
{
title: "材料信息",
@ -151,6 +165,8 @@ const tableConfig = reactive(
{
label: "取样数量",
value: 'num',
check: ['sampling_detail', checkNum]
},
],

View File

@ -59,7 +59,7 @@
<el-table-column label="取样日期" prop="sampling_date" show-overflow-tooltip />
<el-table-column label="见证人" prop="witness" show-overflow-tooltip />
<el-table-column label="取样人" prop="sampler" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['supervision_work.supervision_witness_sampling/edit']" type="primary" link
@click="handleEdit(row)">

View File

@ -364,6 +364,7 @@ const submituser = (e: any) => {
const checkDate = (rule: any, value: any, callback: any, source) => {
const regex = /\[(\d+)\]/; // ,table
let index = 0