| | |
| | | import { useUserStoreHook } from "@/store/modules/user"; |
| | | onMounted(() => { |
| | | useUserStoreHook().getRoleList(); |
| | | if (useUserStoreHook().nowRole.code) { |
| | | useUserStoreHook().changeLogoInExRule({ |
| | | ruleCode: useUserStoreHook().nowRole.code |
| | | }); |
| | | } |
| | | }); |
| | | </script> |
| | |
| | | import { http } from "@/utils/http"; |
| | | import { baseUrlApi } from "./util"; |
| | | import type { Result } from "./types"; |
| | | |
| | | import type { ResponseEnterprise } from "@/utils/auth"; |
| | | // 获取个人中心数据 |
| | | export const cusExtendInfo = (data?: object) => { |
| | | return http.request<Result>( |
| | | return http.request<ResponseEnterprise>( |
| | | "post", |
| | | baseUrlApi("/api/customer/cusExtendInfo"), |
| | | { |
| | |
| | | |
| | | // 修改个人中心数据 |
| | | export const changeCusExtend = (data?: object) => { |
| | | return http.request("post", baseUrlApi("/api/customer/changeCusExtend"), { |
| | | return http.request<Result>( |
| | | "post", |
| | | baseUrlApi("/api/customer/changeCusExtend"), |
| | | { |
| | | data |
| | | }); |
| | | } |
| | | ); |
| | | }; |
| | |
| | | import { useMultiTagsStoreHook } from "./multiTags"; |
| | | import { |
| | | type DataInfo, |
| | | type ResponseEnterprise, |
| | | setToken, |
| | | setRoleListInfo, |
| | | setNowRole, |
| | |
| | | } from "@/utils/auth"; |
| | | import { exRole } from "@/api/register/index"; |
| | | import { cusExtendInfo } from "@/api/mine"; |
| | | import type { nowRoleType } from "@/store/types"; |
| | | |
| | | export const useUserStore = defineStore("pure-user", { |
| | | state: (): userType => ({ |
| | |
| | | // 企业资料 |
| | | enterpriseInfo: |
| | | storageLocal().getItem<DataInfo<number>>("enterpriseInfo") ?? {}, |
| | | nowRole: storageLocal().getItem<DataInfo<number>>("nowRole") ?? {}, |
| | | nowRole: storageLocal().getItem<nowRoleType>("nowRole") ?? {}, |
| | | rolesList: storageLocal().getItem<DataInfo<number>>("rolesList") ?? [] |
| | | }), |
| | | actions: { |
| | |
| | | this.exRoles = exRoles; |
| | | }, |
| | | /** 存储角色当前角色 */ |
| | | SET_NOW_ROLE(nowRole: object) { |
| | | SET_NOW_ROLE(nowRole: nowRoleType) { |
| | | this.nowRole = nowRole; |
| | | }, |
| | | /** 存储角色列表 */ |
| | |
| | | }); |
| | | }, |
| | | async getCusExtendInfo() { |
| | | return new Promise<LoginResult>((resolve, reject) => { |
| | | return new Promise<ResponseEnterprise>((resolve, reject) => { |
| | | cusExtendInfo() |
| | | .then(data => { |
| | | data.result.username = data.result.enterpriseName; |
| | | if (data?.code == 200) { |
| | | setEnterpriseInfo(data.result); |
| | | if (data?.code == 200) { |
| | | data.result.username = data.result?.enterpriseName; |
| | | resolve(data); |
| | | } |
| | | }) |
| | |
| | | hiddenSideBar: boolean; |
| | | }; |
| | | |
| | | export type nowRoleType = { |
| | | code: string; |
| | | name: string; |
| | | hasFlsh: boolean; |
| | | }; |
| | | |
| | | export type userType = { |
| | | avatar?: string; |
| | | username?: string; |
| | |
| | | isRemembered?: boolean; |
| | | loginDay?: number; |
| | | enterpriseInfo: object; |
| | | nowRole: object; |
| | | nowRole: nowRoleType; |
| | | rolesList: object; |
| | | }; |
| | |
| | | import Cookies from "js-cookie"; |
| | | import { useUserStoreHook } from "@/store/modules/user"; |
| | | import { storageLocal, isString, isIncludeAllChildren } from "@pureadmin/utils"; |
| | | import type { nowRoleType } from "@/store/types"; |
| | | |
| | | export interface DataInfo<T> { |
| | | /** token */ |
| | |
| | | exRoles?: Array<string>; |
| | | /** 当前登录用户的按钮级别权限 */ |
| | | permissions?: Array<string>; |
| | | } |
| | | /** |
| | | * AdminResult_CusExtendDto,全局返回结果 |
| | | */ |
| | | export interface ResponseEnterprise { |
| | | /** |
| | | * 状态码 |
| | | */ |
| | | code?: number; |
| | | /** |
| | | * 附加数据 |
| | | */ |
| | | extras?: null; |
| | | /** |
| | | * 错误信息 |
| | | */ |
| | | message?: null | string; |
| | | result?: CusExtendDto; |
| | | /** |
| | | * 时间 |
| | | */ |
| | | time?: Date; |
| | | /** |
| | | * 类型success、warning、error |
| | | */ |
| | | type?: null | string; |
| | | } |
| | | |
| | | /** |
| | | * CusExtendDto,用户角色资料 |
| | | */ |
| | | export interface CusExtendDto { |
| | | /** |
| | | * 企业银行账号 |
| | | */ |
| | | bankAccount?: null | string; |
| | | /** |
| | | * 企业开户行 |
| | | */ |
| | | bankName?: null | string; |
| | | /** |
| | | * 营业执照文件路径 |
| | | */ |
| | | businessLicense?: null | string; |
| | | /** |
| | | * 企业邮箱 |
| | | */ |
| | | enterpriseEmail?: null | string; |
| | | /** |
| | | * 企业名称 |
| | | */ |
| | | enterpriseName?: null | string; |
| | | /** |
| | | * 企业联系电话 |
| | | */ |
| | | enterprisePhone?: null | string; |
| | | /** |
| | | * 企业类型 从企业类型中选择 来源企业类型 |
| | | */ |
| | | enterpriseType?: null | string; |
| | | /** |
| | | * 企业成立时间 |
| | | */ |
| | | establishmentTime?: Date; |
| | | /** |
| | | * 主键 |
| | | */ |
| | | id?: number | null; |
| | | /** |
| | | * 法定代表人身份证文件路径 |
| | | */ |
| | | legalRepresentativeIdCard?: null | string; |
| | | /** |
| | | * 法定代表人身份证号码 |
| | | */ |
| | | legalRepresentativeIdNumber?: null | string; |
| | | /** |
| | | * 法定代表人姓名 |
| | | */ |
| | | legalRepresentativeName?: null | string; |
| | | /** |
| | | * 法定代表人联系电话 |
| | | */ |
| | | legalRepresentativePhone?: null | string; |
| | | /** |
| | | * 企业主营业务 |
| | | */ |
| | | mainBusiness?: null | string; |
| | | /** |
| | | * 业务经办人身份证文件路径或标识(上传后存储信息) |
| | | */ |
| | | operatorIdCard?: null | string; |
| | | /** |
| | | * 业务经办人身份证号码 |
| | | */ |
| | | operatorIdNumber?: null | string; |
| | | /** |
| | | * 业务经办人姓名 |
| | | */ |
| | | operatorName?: null | string; |
| | | /** |
| | | * 业务经办人联系电话 |
| | | */ |
| | | operatorPhone?: null | string; |
| | | /** |
| | | * 注册资金(单位:万元 ) |
| | | */ |
| | | registeredCapital?: null | string; |
| | | /** |
| | | * 企业住所(下拉选择,需结合实际可选值,先字符串接收 ) |
| | | */ |
| | | residence?: null | string; |
| | | /** |
| | | * 交易主体 代码 同角色代码 |
| | | */ |
| | | transactionCode: string; |
| | | /** |
| | | * 交易主体名称 |
| | | */ |
| | | transactionName?: null | string; |
| | | /** |
| | | * 统一社会信用代码 |
| | | */ |
| | | unifiedSocialCreditCode?: null | string; |
| | | } |
| | | |
| | | export const userKey = "user-info"; |
| | |
| | | } |
| | | } |
| | | |
| | | export function setEnterpriseInfo(data: DataInfo<Date>) { |
| | | export function setEnterpriseInfo(data: CusExtendDto) { |
| | | useUserStoreHook().SET_ENTERPRISEINFO(data); |
| | | useUserStoreHook().SET_USERNAME(data.enterpriseName); |
| | | storageLocal().setItem("enterpriseInfo", data); |
| | |
| | | storageLocal().setItem(userKey, obj); |
| | | } |
| | | |
| | | export function setRoleListInfo(data: DataInfo<Date>) { |
| | | export function setRoleListInfo(data: DataInfo<string>) { |
| | | useUserStoreHook().SET_ROLES_LIST(data); |
| | | storageLocal().setItem("rolesList", data); |
| | | } |
| | | |
| | | export function setNowRole(data: DataInfo<Date>) { |
| | | export function setNowRole(data: nowRoleType) { |
| | | const list = storageLocal().getItem<DataInfo<number>>(userKey)?.exRoles ?? []; |
| | | if (list.length > 0) { |
| | | const obj = list.find(item => { |
| | |
| | | import { useUserStoreHook } from "@/store/modules/user"; |
| | | import type { FormInstance, FormRules, UploadProps } from "element-plus"; |
| | | import { cloneDeep } from "@pureadmin/utils"; |
| | | import { onMounted, reactive, ref, watch } from "vue"; |
| | | import { onMounted, reactive, ref, watch, computed, onBeforeUpdate } from "vue"; |
| | | import { getToken } from "@/utils/auth"; |
| | | const { route } = useNav(); |
| | | import { baseUrlApi } from "@/api/util"; |
| | | import { cusExtendInfo, changeCusExtend } from "@/api/mine"; |
| | | import { Edit } from "@element-plus/icons-vue"; |
| | | import { enterpriseTypes } from "@/api/register/index"; |
| | | |
| | | import { |
| | | addDialog, |
| | | closeDialog, |
| | | updateDialog, |
| | | closeAllDialog |
| | | } from "@/components/ReDialog"; |
| | | |
| | | const ruleFormRef = ref<FormInstance>(); |
| | | const isLoading = ref(false); |
| | | const showDialog = ref(false); |
| | | const nowRole = ref({}); |
| | | const nowRole = computed(() => { |
| | | return useUserStoreHook()?.nowRole; |
| | | }); |
| | | const userInfo = computed(() => { |
| | | let obj = useUserStoreHook().enterpriseInfo; |
| | | return obj; |
| | | }); |
| | | const state = reactive({ |
| | | userInfo: useUserStoreHook().enterpriseInfo, |
| | | headers: { |
| | |
| | | // 交易主体代码(同角色代码,不可空,最小长度为1) |
| | | transactionCode: "", // string,必填 |
| | | // 交易主体名称 |
| | | transactionName: null, // string,可空 |
| | | transactionName: "", // string,可空 |
| | | // 营业执照文件路径 |
| | | businessLicense: null, // string,可空 |
| | | // 企业名称 |
| | |
| | | expirySeconds: 60, // 验证码过期时间 |
| | | phoneSeconds: 0, // 手机验证码倒计时 |
| | | roleList: [], |
| | | showDialog: false |
| | | showDialog: false, |
| | | srcList: [] |
| | | }); |
| | | onMounted(async () => { |
| | | state.ruleForm = cloneDeep(state.userInfo); |
| | | state.ruleForm.enterpriseType = state.ruleForm.enterpriseType.split(","); |
| | | nowRole.value = useUserStoreHook()?.nowRole; |
| | | console.log(nowRole.value); |
| | | // nowRole.value = useUserStoreHook()?.nowRole; |
| | | if (nowRole.value) { |
| | | state.ruleForm.transactionCode = nowRole.value.code; |
| | | state.userInfo.transactionName = nowRole.value.name; |
| | | // state.userInfo.transactionName = nowRole.value.name; |
| | | } else { |
| | | state.ruleForm.transactionCode = route.query.code; |
| | | state.userInfo.enterpriseTypeName = route.query.name; |
| | | } |
| | | |
| | | let restypes = await enterpriseTypes(); |
| | | state.enterpriseList = restypes?.result; |
| | | }); |
| | | const showPreview = ref(false); |
| | | const showImg = (name: string | number) => { |
| | | showPreview.value = true; |
| | | state.srcList = [state.ruleForm[name]]; |
| | | }; |
| | | const isLeaf = data => { |
| | | data.forEach(item => { |
| | | if (!item.child) { |
| | |
| | | } |
| | | }; |
| | | |
| | | const showImg = name => { |
| | | addDialog({ |
| | | width: "40%", |
| | | title: "查看营业执照", |
| | | contentRenderer: () => <img src={state.userInfo[name]} />, // jsx 语法 (注意在.vue文件启用jsx语法,需要在script开启lang="tsx") |
| | | closeCallBack: ({ options, args }) => { |
| | | // options.props 是响应式的 |
| | | // const { formInline } = options.props as FormProps; |
| | | // const text = `姓名:${formInline.user} 城市:${formInline.region}`; |
| | | if (args?.command === "cancel") { |
| | | // 您点击了取消按钮 |
| | | // active.value -= 1; |
| | | } else if (args?.command === "sure") { |
| | | } else { |
| | | } |
| | | } |
| | | }); |
| | | }; |
| | | // const showImg = name => { |
| | | // addDialog({ |
| | | // width: "40%", |
| | | // title: "查看营业执照", |
| | | // contentRenderer: () => <img src={state.userInfo[name]} />, // jsx 语法 (注意在.vue文件启用jsx语法,需要在script开启lang="tsx") |
| | | // closeCallBack: ({ options, args }) => { |
| | | // // options.props 是响应式的 |
| | | // // const { formInline } = options.props as FormProps; |
| | | // // const text = `姓名:${formInline.user} 城市:${formInline.region}`; |
| | | // if (args?.command === "cancel") { |
| | | // // 您点击了取消按钮 |
| | | // // active.value -= 1; |
| | | // } else if (args?.command === "sure") { |
| | | // } else { |
| | | // } |
| | | // } |
| | | // }); |
| | | // }; |
| | | const handleAvatarSuccess: UploadProps["onSuccess"] = ( |
| | | response, |
| | | uploadFile |
| | |
| | | let res = await changeCusExtend(obj); |
| | | if (res.code == "200") { |
| | | showDialog.value = false; |
| | | await useUserStoreHook().getCusExtendInfo(); |
| | | await useUserStoreHook().changeLogoInExRule({ |
| | | ruleCode: useUserStoreHook().nowRole.code |
| | | }); |
| | | message("修改成功!", { |
| | | type: "success" |
| | | }); |
| | |
| | | |
| | | <template> |
| | | <div> |
| | | <el-descriptions class="margin-top" title="" :column="3" border> |
| | | <el-descriptions |
| | | v-if="state.userInfo.enterpriseName" |
| | | class="margin-top" |
| | | title="" |
| | | :column="3" |
| | | border |
| | | > |
| | | <!-- <template #extra> |
| | | <el-button type="primary">Operation</el-button> |
| | | </template> --> |
| | |
| | | <template #label> |
| | | <div class="cell-item">交易主体</div> |
| | | </template> |
| | | {{ state.userInfo.transactionName }} |
| | | <el-tag v-if="!nowRole.hasFlsh" type="danger">资料审核中 </el-tag> |
| | | {{ nowRole?.name }} |
| | | <el-tag v-if="nowRole?.hasFlsh" type="success">审核已通过 </el-tag> |
| | | <el-tag v-else type="danger">资料审核中 </el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">企业名称</div> |
| | | </template> |
| | | {{ state.userInfo.enterpriseName }} |
| | | {{ userInfo.enterpriseName }} |
| | | |
| | | <span @click="showImg('businessLicense')"> |
| | | <el-link type="primary" underline>查看营业执照</el-link> |
| | |
| | | <template #label> |
| | | <div class="cell-item">统一社会信用代码</div> |
| | | </template> |
| | | {{ state.userInfo.unifiedSocialCreditCode }} |
| | | {{ userInfo.unifiedSocialCreditCode }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">注册资金</div> |
| | | </template> |
| | | {{ state.userInfo.registeredCapital }} |
| | | {{ userInfo.registeredCapital }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item :span="2"> |
| | | <template #label> |
| | | <div class="cell-item">企业类型</div> |
| | | </template> |
| | | {{ state.userInfo.enterpriseType }} |
| | | {{ userInfo.enterpriseType }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">住所地</div> |
| | | </template> |
| | | {{ state.userInfo.residence }} |
| | | {{ userInfo.residence }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">联系电话</div> |
| | | </template> |
| | | {{ state.userInfo.legalRepresentativePhone }} |
| | | {{ userInfo.legalRepresentativePhone }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">成立时间</div> |
| | | </template> |
| | | {{ state.userInfo.establishmentTime }} |
| | | {{ userInfo.establishmentTime }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item :span="2"> |
| | | <template #label> |
| | | <div class="cell-item">电子邮箱</div> |
| | | </template> |
| | | {{ state.userInfo.enterpriseEmail }} |
| | | {{ userInfo.enterpriseEmail }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item :span="3" label-width="100"> |
| | | <template #label> |
| | | <div class="cell-item">主营业务</div> |
| | | </template> |
| | | {{ state.userInfo.mainBusiness }} |
| | | {{ userInfo.mainBusiness }} |
| | | </el-descriptions-item> |
| | | |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">法定代表人</div> |
| | | </template> |
| | | {{ state.userInfo.legalRepresentativeName }} |
| | | {{ userInfo.legalRepresentativeName }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">身份证</div> |
| | | </template> |
| | | {{ state.userInfo.legalRepresentativeIdNumber }} |
| | | {{ userInfo.legalRepresentativeIdNumber }} |
| | | <span @click="showImg('legalRepresentativeIdCard')"> |
| | | <el-link type="primary" underline>查看身份证</el-link> |
| | | </span> |
| | |
| | | <template #label> |
| | | <div class="cell-item">联系电话</div> |
| | | </template> |
| | | {{ state.userInfo.legalRepresentativePhone }} |
| | | {{ userInfo.legalRepresentativePhone }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">业务经办人</div> |
| | | </template> |
| | | {{ state.userInfo.operatorName }} |
| | | {{ userInfo.operatorName }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">身份证</div> |
| | | </template> |
| | | {{ state.userInfo.operatorIdNumber }} |
| | | {{ userInfo.operatorIdNumber }} |
| | | <span style="margin-right: auto" @click="showImg('operatorIdCard')"> |
| | | <el-link type="primary" underline>查看身份证</el-link> |
| | | </span> |
| | |
| | | <template #label> |
| | | <div class="cell-item">联系电话</div> |
| | | </template> |
| | | {{ state.userInfo.operatorPhone }} |
| | | {{ userInfo.operatorPhone }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">开户银行</div> |
| | | </template> |
| | | {{ state.userInfo.bankName }} |
| | | {{ userInfo.bankName }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template #label> |
| | | <div class="cell-item">银行账号</div> |
| | | </template> |
| | | {{ state.userInfo.bankAccount }} |
| | | {{ userInfo.bankAccount }} |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | <div class="m-5"> |
| | |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | <el-image-viewer |
| | | v-if="showPreview" |
| | | :url-list="state.srcList" |
| | | show-progress |
| | | @close="showPreview = false" |
| | | /> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | roleList: [] |
| | | }); |
| | | const toWelcome = () => { |
| | | router.replace("welcome"); |
| | | router.replace("mine"); |
| | | }; |
| | | // 页面初始化 |
| | | onMounted(async () => { |
| | |
| | | await useUserStoreHook().changeLogoInExRule({ |
| | | ruleCode: state.ruleForm.transactionCode |
| | | }); |
| | | await useUserStoreHook().getCusExtendInfo(); |
| | | // await useUserStoreHook().getCusExtendInfo(); |
| | | active.value = 3; |
| | | } else { |
| | | message(res.message, { |
| | |
| | | </el-form-item> |
| | | </re-col> |
| | | <re-col :value="6" :xs="24" :sm="24"> |
| | | <el-form-item label="采购方式"> |
| | | <el-form-item label="采购方式" prop="caigoufangshi"> |
| | | <el-select |
| | | v-model="newFormInline.caigoufangshi" |
| | | placeholder="请选择采购方式" |
| | |
| | | </el-form-item> |
| | | </re-col> |
| | | <re-col :value="6" :xs="24" :sm="24"> |
| | | <el-form-item label="联系人人" prop="dailiLianxiren"> |
| | | <el-form-item label="联系人" prop="dailiLianxiren"> |
| | | <el-input |
| | | v-model="newFormInline.dailiLianxiren" |
| | | clearable |
| | |
| | | toubiaobaozhengjin: row?.toubiaobaozhengjin ?? null, // 投标保证金(可选) |
| | | lianhetitoubiao: row?.lianhetitoubiao ?? null, // 联合体投标(可选) |
| | | kaibiaofangshi: row?.kaibiaofangshi ?? null, // 开标方式(可选) |
| | | shifoufenbao: row?.shifoufenbao ?? false, // 是否分包(可选) |
| | | shifoutuisongxuanchuan: row?.shifoutuisongxuanchuan ?? true, // 是否推送宣传(可选) |
| | | shifoufenbao: row?.shifoufenbao ?? "false", // 是否分包(可选) |
| | | shifoutuisongxuanchuan: row?.shifoutuisongxuanchuan ?? "true", // 是否推送宣传(可选) |
| | | caigourenmingcheng: row?.caigourenmingcheng ?? null, // 采购人名称(可选) |
| | | xingzhengquyu: row?.xingzhengquyu.split(",") ?? [], // 行政区域(可选) |
| | | xingzhengquyuName: row?.xingzhengquyuName ?? null, // 行政区域名称(可选) |
| | |
| | | draggable: true, |
| | | fullscreen: deviceDetection(), |
| | | fullscreenIcon: true, |
| | | sureBtnLoading: true, |
| | | closeOnClickModal: false, |
| | | contentRenderer: () => h(editForm, { ref: formRef, formInline: null }), |
| | | beforeSure: (done, { options }) => { |
| | | beforeSure: (done, { options, closeLoading }) => { |
| | | const FormRef = formRef.value.getRef(); |
| | | const curData = cloneDeep(options.props.formInline as FormItemProps); |
| | | async function chores() { |
| | |
| | | done(); // 关闭弹框 |
| | | onSearch(); // 刷新表格数据 |
| | | } else { |
| | | closeLoading(); |
| | | message(res.message, { |
| | | type: "error" |
| | | }); |
| | | } |
| | | } |
| | | FormRef.validate(valid => { |
| | | FormRef.validate((valid, obj) => { |
| | | if (valid) { |
| | | console.log("curData", curData); |
| | | // 表单规则校验通过 |
| | | if (title === "新增") { |
| | | // 实际开发先调用新增接口,再进行下面操作 |
| | |
| | | // 实际开发先调用修改接口,再进行下面操作 |
| | | chores(); |
| | | } |
| | | } else { |
| | | closeLoading(); |
| | | const fail = []; |
| | | for (const key in obj) { |
| | | fail.push(obj[key][0].message); |
| | | } |
| | | message(fail[0], { |
| | | type: "warning" |
| | | }); |
| | | return false; |
| | | } |
| | | }); |
| | | } |
| | |
| | | |
| | | /** 自定义表单规则校验 */ |
| | | export const formRules = reactive(<FormRules>{ |
| | | name: [{ required: true, message: "部门名称为必填项", trigger: "blur" }], |
| | | phone: [ |
| | | // 项目编号(必填) |
| | | projectCode: [ |
| | | { required: true, message: "请输入项目编号", trigger: "blur" }, |
| | | { max: 50, message: "项目编号长度不能超过50个字符", trigger: "blur" } |
| | | ], |
| | | // 项目名称(必填) |
| | | projectName: [ |
| | | { required: true, message: "请输入项目名称", trigger: "blur" }, |
| | | { max: 200, message: "项目名称长度不能超过200个字符", trigger: "blur" } |
| | | ], |
| | | // 行业品目(可选,但选择时需校验) |
| | | hangyepinmu: [ |
| | | { required: true, message: "请选择行业品目", trigger: "blur" }, |
| | | { type: "string", message: "行业品目格式不正确", trigger: "change" } |
| | | ], |
| | | // 采购方式(可选,但选择时需校验) |
| | | caigoufangshi: [ |
| | | { required: true, message: "请选择采购方式", trigger: "blur" }, |
| | | { type: "string", message: "采购方式格式不正确", trigger: "change" } |
| | | ], |
| | | // 采购预算(可选,需为数字) |
| | | caigouyusuan: [ |
| | | { required: true, message: "请输入采购预算", trigger: "blur" }, |
| | | { type: "number", message: "采购预算必须为数字", trigger: "blur" }, |
| | | { min: 0, message: "采购预算不能为负数", trigger: "blur" } |
| | | ], |
| | | // 定标规则(可选) |
| | | dingbiaoguize: [ |
| | | { required: true, message: "请选择定标规则", trigger: "blur" }, |
| | | { type: "string", message: "定标规则格式不正确", trigger: "change" } |
| | | ], |
| | | // 报名费(可选,需为数字) |
| | | baomingfei: [ |
| | | { required: true, message: "请输入报名费", trigger: "blur" }, |
| | | { type: "number", message: "报名费必须为数字", trigger: "blur" }, |
| | | { min: 0, message: "报名费不能为负数", trigger: "blur" } |
| | | ], |
| | | // 投标保证金(可选,需为数字) |
| | | toubiaobaozhengjin: [ |
| | | { required: true, message: "请输入投标保证金费", trigger: "blur" }, |
| | | { type: "number", message: "投标保证金必须为数字", trigger: "blur" }, |
| | | { min: 0, message: "投标保证金不能为负数", trigger: "blur" } |
| | | ], |
| | | // 联合体投标(可选,需为布尔值) |
| | | lianhetitoubiao: [ |
| | | { required: true, message: "请选择联合体投标", trigger: "blur" } |
| | | // { type: "boolean", message: "联合体投标必须为布尔值", trigger: "change" } |
| | | ], |
| | | // 开标方式(可选) |
| | | kaibiaofangshi: [ |
| | | { required: true, message: "请选择开标方式", trigger: "blur" } |
| | | // { type: "string", message: "开标方式格式不正确", trigger: "change" } |
| | | ], |
| | | // 是否分包(可选,需为布尔值) |
| | | shifoufenbao: [ |
| | | { required: true } |
| | | // { type: "boolean", message: "是否分包必须为布尔值", trigger: "change" } |
| | | ], |
| | | // 是否推送宣传(可选,需为布尔值) |
| | | shifoutuisongxuanchuan: [ |
| | | { required: true } |
| | | // { type: "boolean", message: "是否推送宣传必须为布尔值", trigger: "change" } |
| | | ], |
| | | // 采购人名称(可选) |
| | | caigourenmingcheng: [ |
| | | { required: true, message: "请输入采购人名称", trigger: "blur" }, |
| | | { max: 100, message: "采购人名称长度不能超过100个字符", trigger: "blur" } |
| | | ], |
| | | // 行政区域(可选,需为数组) |
| | | xingzhengquyu: [ |
| | | { required: true, message: "请选择行政区域", trigger: "blur" }, |
| | | { type: "array", message: "行政区域必须为数组格式", trigger: "change" } |
| | | ], |
| | | // 行政区域名称(可选) |
| | | xingzhengquyuName: [ |
| | | { required: false }, |
| | | { max: 100, message: "行政区域名称长度不能超过100个字符", trigger: "blur" } |
| | | ], |
| | | // 机构代码(可选,验证格式) |
| | | jigoudaima: [ |
| | | { required: true, message: "请输入机构代码", trigger: "blur" }, |
| | | { |
| | | pattern: /^[A-Z0-9]{8}-[A-Z0-9]{1}$/, |
| | | message: "机构代码格式不正确", |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | // 代码类型(可选) |
| | | daimaleixing: [ |
| | | { required: true, message: "请选择代码类型", trigger: "blur" }, |
| | | { type: "string", message: "代码类型格式不正确", trigger: "change" } |
| | | ], |
| | | // 联系人(可选) |
| | | lianxiren: [ |
| | | { required: true, message: "请输入联系人", trigger: "blur" }, |
| | | { max: 50, message: "联系人姓名长度不能超过50个字符", trigger: "blur" } |
| | | ], |
| | | // 联系电话(可选,验证手机号格式) |
| | | lianxidianhua: [ |
| | | { required: true, message: "请输入联系人电话", trigger: "blur" }, |
| | | { |
| | | pattern: /^1[3-9]\d{9}$/, |
| | | message: "请输入正确的手机号码", |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | // 通信地址(可选) |
| | | tongxindizhi: [ |
| | | { required: true, message: "请输入通信地址", trigger: "blur" }, |
| | | { max: 200, message: "通信地址长度不能超过200个字符", trigger: "blur" } |
| | | ], |
| | | // 电子邮件(可选,验证邮箱格式) |
| | | dianziyoujian: [ |
| | | { required: true, message: "请输入电子邮件", trigger: "blur" }, |
| | | { type: "email", message: "请输入正确的邮箱地址", trigger: "blur" } |
| | | ], |
| | | // 项目经办人(可选) |
| | | xiangmujingbanren: [ |
| | | { required: true, message: "请输入项目经办人", trigger: "blur" }, |
| | | { max: 50, message: "项目经办人姓名长度不能超过50个字符", trigger: "blur" } |
| | | ], |
| | | // 职务(可选) |
| | | zhiwu: [ |
| | | { required: true, message: "请输入职务", trigger: "blur" }, |
| | | { max: 50, message: "职务名称长度不能超过50个字符", trigger: "blur" } |
| | | ], |
| | | // 经办人电话(可选,验证手机号格式) |
| | | jingbanrendianhua: [ |
| | | { required: true, message: "请输入经办人电话", trigger: "blur" }, |
| | | { |
| | | pattern: /^1[3-9]\d{9}$/, |
| | | message: "请输入正确的手机号码", |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | // 代理机构名称(可选) |
| | | dailijigoumingcheng: [ |
| | | { required: true, message: "请输入代理机构名称", trigger: "blur" }, |
| | | { max: 100, message: "代理机构名称长度不能超过100个字符", trigger: "blur" } |
| | | ], |
| | | // 代理机构联系人(可选) |
| | | dailiLianxiren: [ |
| | | { required: true, message: "请输入联系人", trigger: "blur" }, |
| | | { |
| | | max: 50, |
| | | message: "联系人姓名长度不能超过50个字符", |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | // 代理机构联系电话(可选,验证手机号格式) |
| | | dailiLianxidianhua: [ |
| | | { required: true, message: "请输入联系电话", trigger: "blur" }, |
| | | { |
| | | pattern: /^1[3-9]\d{9}$/, |
| | | message: "请输入正确的手机号码", |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | // 代理机构电子邮件(可选,验证邮箱格式) |
| | | dailiDianziyoujian: [ |
| | | { required: true, message: "请输入电子邮件", trigger: "blur" }, |
| | | { type: "email", message: "请输入正确的邮箱地址", trigger: "blur" }, |
| | | { |
| | | validator: (rule, value, callback) => { |
| | | if (value === "") { |
| | | callback(); |
| | | } else if (!isEmail(value)) { |
| | | callback(new Error("请输入正确的邮箱格式")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }, |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | // 代理机构通信地址(可选) |
| | | dailiTongxindizhi: [ |
| | | { required: true, message: "请输入通信地址", trigger: "blur" }, |
| | | { |
| | | max: 200, |
| | | message: "通信地址长度不能超过200个字符", |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | // 代理机构项目经理(可选) |
| | | dailiXiangmujingli: [ |
| | | { required: true, message: "请输入项目经理", trigger: "blur" }, |
| | | { |
| | | max: 50, |
| | | message: "项目经理姓名长度不能超过50个字符", |
| | | trigger: "blur" |
| | | } |
| | | ], |
| | | // 代理机构项目经理联系电话(可选,验证手机号格式) |
| | | dailijingliLianxidianhua: [ |
| | | { required: true, message: "请输入联系电话", trigger: "blur" }, |
| | | { |
| | | pattern: /^1[3-9]\d{9}$/, |
| | | message: "请输入正确的手机号码", |
| | | trigger: "blur" |
| | | }, |
| | | { |
| | | validator: (rule, value, callback) => { |
| | | if (value === "") { |
| | |
| | | }, |
| | | trigger: "blur" |
| | | // trigger: "click" // 如果想在点击确定按钮时触发这个校验,trigger 设置成 click 即可 |
| | | } |
| | | ], |
| | | email: [ |
| | | { |
| | | validator: (rule, value, callback) => { |
| | | if (value === "") { |
| | | callback(); |
| | | } else if (!isEmail(value)) { |
| | | callback(new Error("请输入正确的邮箱格式")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }, |
| | | trigger: "blur" |
| | | } |
| | | ] |
| | | }); |