This commit is contained in:
1378012178@qq.com 2025-07-30 13:40:14 +08:00
commit 11373acd11
29 changed files with 529 additions and 194 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 612 KiB

View File

@ -23,6 +23,7 @@ enum Api {
GetPermCode = '/sys/permission/getPermCode',
//新加的获取图形验证码的接口
getInputCode = '/sys/randomImage',
randomCode = '/sys/randomInputCode',
//获取短信验证码的接口
getCaptcha = '/sys/sms',
//注册接口
@ -114,6 +115,10 @@ export function getCodeInfo(currdatetime) {
let url = Api.getInputCode + `/${currdatetime}`;
return defHttp.get({ url: url });
}
export function randomCode(currdatetime) {
let url = Api.randomCode + `/${currdatetime}`;
return defHttp.get({ url: url });
}
/**
* @description:
*/

View File

@ -25,9 +25,32 @@
</a-button>
</div>
</a-upload>
<a-modal :open="previewVisible" width="80%" :footer="null" @cancel="handleCancel()">
<img alt="example" style="width: 100%" :src="previewImage" />
</a-modal>
<!-- <img alt="example" style="width: 100%" :src="previewImage" /> -->
<!-- <a-modal :open="previewVisible" width="70%" class="imgView" :footer="null" @cancel="handleCancel()">
<div class="img-container">
<img
alt="example"
class="preview-img"
:src="previewImage"
/>
</div>
</a-modal> -->
<a-modal
:open="previewVisible"
:width="modalWidth"
:bodyStyle="{ padding: 0, display: 'flex', justifyContent: 'center', alignItems: 'center' }"
:footer="null"
@cancel="handleCancel"
:style="{ maxWidth: '90vw' }"
>
<img
ref="previewImgRef"
class="preview-img"
:src="previewImage"
@load="handleImageLoad"
/>
</a-modal>
</div>
</template>
<script lang="ts">
@ -106,6 +129,7 @@
//
const previewVisible = ref<boolean>(false);
//
const multiple = computed(() => {
return props['fileMax'] > 1 || props['fileMax'] === 0;
@ -227,7 +251,8 @@
//
console.log(file);
}
const previewImgRef = ref<HTMLImageElement | null>(null);
const modalWidth = ref('auto');
/**
* 预览图片
*/
@ -247,6 +272,20 @@
previewVisible.value = false;
}
//
const handleImageLoad = () => {
if (!previewImgRef.value) return;
const img = previewImgRef.value;
const maxWidth = window.innerWidth * 0.9; // 90%
const maxHeight = window.innerHeight * 0.8; // 80%
//
const ratio = Math.min(maxWidth / img.naturalWidth, maxHeight / img.naturalHeight, 1);
modalWidth.value = `${img.naturalWidth * ratio}px`;
};
return {
state,
attrs,
@ -262,6 +301,9 @@
handlePreview,
handleCancel,
handleChange,
handleImageLoad,
previewImgRef,
modalWidth,
};
},
});
@ -276,4 +318,27 @@
margin-top: 8px;
color: #666;
}
/* 确保 Modal 内容区域填满 */
.imgView .ant-modal-body {
height: 80vh; /* 限制模态框高度,避免超出屏幕 */
display: flex;
align-items: center;
justify-content: center;
}
/* 图片容器 */
.img-container {
max-width: 100%;
max-height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
/* 图片自适应 */
.preview-img {
max-width: 100%;
max-height: 100%;
object-fit: contain; /* 保持比例,不拉伸 */
}
</style>

View File

@ -22,6 +22,12 @@
<span>{{ text }}</span>
</a-button>
</a-upload>
<template v-if="bindProps.fileType=='pdf' && maxCount=='1'">
<a style="border:1px solid #d9d9d9;width:60px;text-align:center;border-radius:4px;padding:2px 5px;" @click="handleView({url:getFileAccessHttpUrl(bindProps.value)})">
<Icon icon="ant-design:search-outlined" style="color: rgb(140, 134, 134)" />
<span class="ant-upload-text" style="color: rgb(140, 134, 134)" >预览</span>
</a>
</template>
</div>
</template>
@ -38,6 +44,10 @@
import { UploadTypeEnum } from './upload.data';
import { getFileAccessHttpUrl, getHeaders } from '/@/utils/common/compUtils';
import UploadItemActions from './components/UploadItemActions.vue';
import { useGlobSetting } from '/@/hooks/setting';
import {encryptByBase64} from "@/utils/cipher";
const glob = useGlobSetting();
const { createMessage, createConfirm } = useMessage();
const { prefixCls } = useDesign('j-upload');
@ -357,6 +367,7 @@
//
function onFilePreview(file) {
console.log("🚀 ~ onFilePreview ~ file:", file)
if (isImageMode.value) {
createImgPreview({ imageList: [file.url], maskClosable: true });
} else {
@ -364,6 +375,18 @@
}
}
/**
* 预览
*/
function handleView(record) {
if (record && record.url) {
console.log('glob.onlineUrl', glob.viewUrl);
let url = encodeURIComponent(encryptByBase64(record.url));
let previewUrl = `${glob.viewUrl}?url=` + url;
window.open(previewUrl, '_blank');
}
}
function emitValue(value) {
emit('change', value);
emit('update:value', value);

View File

@ -47,7 +47,7 @@
.ant-modal-body {
padding: 0;
background: url(../public/resource/img/modalback.png);
background: url(../resource/img/modalback.png);
background-repeat: no-repeat;
background-size: cover;

View File

@ -7,6 +7,7 @@ enum Api {
list = '/admin/orgapplyinfo/orgApplyInfo/list',
save='/admin/orgapplyinfo/orgApplyInfo/add',
edit='/admin/orgapplyinfo/orgApplyInfo/edit',
editCg='/admin/orgapplyinfo/orgApplyInfo/editCg',
submitContract='/admin/orgapplyinfo/orgApplyInfo/submitContract',
deleteOne = '/admin/orgapplyinfo/orgApplyInfo/delete',
deleteBatch = '/admin/orgapplyinfo/orgApplyInfo/deleteBatch',
@ -80,6 +81,11 @@ export const saveOrUpdate = (params, isUpdate) => {
return defHttp.post({ url: url, params }, { isTransformResponse: false });
}
export const editCg = (params, isUpdate) => {
return defHttp.post({ url: Api.editCg, params }, { isTransformResponse: false });
}
/**
*
* @param params

View File

@ -14,41 +14,49 @@ export const columns: BasicColumn[] = [
title: '机构负责人',
align: 'center',
dataIndex: 'orgLeader',
width: 120,
},
{
title: '机构负责人电话',
align: 'center',
dataIndex: 'orgLeaderPhone',
width: 120,
},
{
title: '申请日期',
align: 'center',
dataIndex: 'createTime',
width: 120,
},
{
title: '房屋性质',
align: 'center',
dataIndex: 'orgPropertyType',
width: 120,
},
{
title: '面积',
title: '面积(㎡)',
align: 'center',
dataIndex: 'orgBuildingArea',
width: 120,
},
{
title: '审意见',
title: '审意见',
align: 'center',
dataIndex: 'status_dictText',
width: 120,
},
{
title: '当前阶段',
align: 'center',
dataIndex: 'buildStatus_dictText',
width: 120,
},
{
title: '工单状态',
align: 'center',
dataIndex: 'workOrderStatus_dictText',
width: 120,
},
];

View File

@ -26,8 +26,8 @@
</a-col>
<a-col :lg="6">
<a-form-item name="status">
<template #label><span title="审批意见">审批意见</span></template>
<a-select v-model:value="queryParam.status" style="width: 200px" placeholder="请选择审意见">
<template #label><span title="审核意见">审核意见</span></template>
<a-select v-model:value="queryParam.status" style="width: 200px" placeholder="请选择审意见">
<a-select-option value="1">待审核</a-select-option>
<a-select-option value="2">审核通过</a-select-option>
<a-select-option value="3">审核驳回</a-select-option>

View File

@ -1,6 +1,6 @@
<template>
<a-spin :spinning="confirmLoading">
<JFormContainer :disabled="disabled">
<JFormContainer >
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol"
name="OrgApplyInfoForm">
@ -9,76 +9,82 @@
<a-col :span="24">
<SectionDivider :title="'机构信息'" />
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-row>
<a-col :span="24">
<a-form-item label="营业执照照片" v-bind="validateInfos.comBusinessLicense"
id="OrgApplyInfoForm-comBusinessLicense" name="comBusinessLicense">
<JImageUpload :fileMax="1" v-model:value="formData.comBusinessLicense" :disabled="true"></JImageUpload>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="企业名称" v-bind="validateInfos.comName" id="OrgApplyInfoForm-comName" name="comName">
{{formData.comName}}
</a-form-item>
<a-col :span="24">
<a-form-item label="信用代码" v-bind="validateInfos.comCreditCode" id="OrgApplyInfoForm-comCreditCode"
name="comCreditCode">
{{formData.comCreditCode}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="企业名称" v-bind="validateInfos.comName" id="OrgApplyInfoForm-comName" name="comName">
{{formData.comName}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="企业法人" v-bind="validateInfos.comLegalPerson" id="OrgApplyInfoForm-comLegalPerson"
name="comLegalPerson">
{{formData.comLegalPerson}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="注册地址" v-bind="validateInfos.comRegisterAddress"
id="OrgApplyInfoForm-comRegisterAddress" name="comRegisterAddress">
{{formData.comRegisterAddress}}
</a-form-item>
</a-col>
</a-row>
</a-col>
<a-col :span="12">
<a-form-item label="企业注册地址" v-bind="validateInfos.comRegisterAddress"
id="OrgApplyInfoForm-comRegisterAddress" name="comRegisterAddress">
{{formData.comRegisterAddress}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="企业信用代码" v-bind="validateInfos.comCreditCode" id="OrgApplyInfoForm-comCreditCode"
name="comCreditCode">
{{formData.comCreditCode}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="企业法人" v-bind="validateInfos.comLegalPerson" id="OrgApplyInfoForm-comLegalPerson"
name="comLegalPerson">
{{formData.comLegalPerson}}
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="机构负责人" v-bind="validateInfos.orgLeader" id="OrgApplyInfoForm-orgLeader"
name="orgLeader">
{{formData.orgLeader}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="机构负责人电话" v-bind="validateInfos.orgLeaderPhone" id="OrgApplyInfoForm-orgLeaderPhone"
name="orgLeaderPhone">
{{formData.orgLeaderPhone}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="机构房屋性质" v-bind="validateInfos.orgPropertyType" id="OrgApplyInfoForm-orgPropertyType"
name="orgPropertyType">
{{formData.orgPropertyType}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="机构建筑面积" v-bind="validateInfos.orgBuildingArea" id="OrgApplyInfoForm-orgBuildingArea"
name="orgBuildingArea">
{{formData.orgBuildingArea}}
</a-form-item>
</a-col>
<!-- <a-col :span="12">
<a-form-item label="机构所在地">
{{cityViewValue}}
</a-form-item>
</a-col> -->
<a-col :span="12">
<a-form-item label="机构地址" v-bind="validateInfos.orgAddress" id="OrgApplyInfoForm-orgAddress"
name="orgAddress">
{{formData.orgAddress}}
</a-form-item>
<a-row>
<a-col :span="24">
<a-form-item label="机构所在地" v-bind="validateInfos.cityViewValue" id="OrgApplyInfoForm-cityViewValue"
name="cityViewValue">
{{cityViewValue}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="机构负责人" v-bind="validateInfos.orgLeader" id="OrgApplyInfoForm-orgLeader"
name="orgLeader">
{{formData.orgLeader}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="负责人电话" v-bind="validateInfos.orgLeaderPhone" id="OrgApplyInfoForm-orgLeaderPhone"
name="orgLeaderPhone">
{{formData.orgLeaderPhone}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="房屋性质" v-bind="validateInfos.orgPropertyType" id="OrgApplyInfoForm-orgPropertyType"
name="orgPropertyType">
{{formData.orgPropertyType}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="建筑面积" v-bind="validateInfos.orgBuildingArea" id="OrgApplyInfoForm-orgBuildingArea"
name="orgBuildingArea">
{{formData.orgBuildingArea}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="机构地址" v-bind="validateInfos.orgAddress" id="OrgApplyInfoForm-orgAddress"
name="orgAddress">
{{formData.orgAddress}}
</a-form-item>
</a-col>
</a-row>
</a-col>
</a-row>
@ -89,65 +95,73 @@
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="身份证正面" v-bind="validateInfos.cardZmPath" id="OrgApplyInfoForm-cardZmPath"
name="cardZmPath">
<JImageUpload :fileMax="1" v-model:value="formData.cardZmPath" :disabled="true"></JImageUpload>
</a-form-item>
<a-row>
<a-col :span="24">
<a-form-item label="身份证正面" v-bind="validateInfos.cardZmPath" id="OrgApplyInfoForm-cardZmPath"
name="cardZmPath">
<JImageUpload :fileMax="1" v-model:value="formData.cardZmPath" :disabled="true"></JImageUpload>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="姓名" v-bind="validateInfos.name" id="OrgApplyInfoForm-name" name="name">
{{formData.name}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="性别" v-bind="validateInfos.sex" id="OrgApplyInfoForm-sex" name="sex">
{{formData.sex}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="民族" v-bind="validateInfos.national" id="OrgApplyInfoForm-national" name="national">
{{formData.national}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="出生日期" v-bind="validateInfos.birthDate" id="OrgApplyInfoForm-birthDate"
name="birthDate">
{{formData.birthDate?formData.birthDate.substring(0,10):""}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="身份证号" v-bind="validateInfos.idCard" id="OrgApplyInfoForm-idCard" name="idCard">
{{formData.idCard}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="住址" v-bind="validateInfos.idCardAddress" id="OrgApplyInfoForm-idCardAddress"
name="idCardAddress">
{{formData.idCardAddress}}
</a-form-item>
</a-col>
</a-row>
</a-col>
<a-col :span="12">
<a-form-item label="身份证反面" v-bind="validateInfos.cardFmPath" id="OrgApplyInfoForm-cardFmPath"
name="cardFmPath">
<JImageUpload :fileMax="1" v-model:value="formData.cardFmPath" :disabled="true"></JImageUpload>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="姓名" v-bind="validateInfos.name" id="OrgApplyInfoForm-name" name="name">
{{formData.name}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="性别" v-bind="validateInfos.sex" id="OrgApplyInfoForm-sex" name="sex">
{{formData.sex}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="身份证号" v-bind="validateInfos.idCard" id="OrgApplyInfoForm-idCard" name="idCard">
{{formData.idCard}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="出生日期" v-bind="validateInfos.birthDate" id="OrgApplyInfoForm-birthDate"
name="birthDate">
{{formData.birthDate?formData.birthDate.substring(0,10):""}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="有效开始日期" v-bind="validateInfos.startTime" id="OrgApplyInfoForm-startTime"
name="startTime">
{{formData.startTime?formData.startTime.substring(0,10):""}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="有效结束日期" v-bind="validateInfos.endTime" id="OrgApplyInfoForm-endTime" name="endTime">
{{formData.endTime?formData.endTime.substring(0,10):""}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="民族" v-bind="validateInfos.national" id="OrgApplyInfoForm-national" name="national">
{{formData.national}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="住址" v-bind="validateInfos.idCardAddress" id="OrgApplyInfoForm-idCardAddress"
name="idCardAddress">
{{formData.idCardAddress}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="签发机关" v-bind="validateInfos.issuingAuthority" id="OrgApplyInfoForm-issuingAuthority"
name="issuingAuthority">
{{formData.issuingAuthority}}
</a-form-item>
<a-row>
<a-col :span="24">
<a-form-item label="身份证反面" v-bind="validateInfos.cardFmPath" id="OrgApplyInfoForm-cardFmPath"
name="cardFmPath">
<JImageUpload :fileMax="1" v-model:value="formData.cardFmPath" :disabled="true"></JImageUpload>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="有效开始日期" v-bind="validateInfos.startTime" id="OrgApplyInfoForm-startTime"
name="startTime">
{{formData.startTime?formData.startTime.substring(0,10):""}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="有效结束日期" v-bind="validateInfos.endTime" id="OrgApplyInfoForm-endTime" name="endTime">
{{formData.endTime?formData.endTime.substring(0,10):""}}
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="签发机关" v-bind="validateInfos.issuingAuthority" id="OrgApplyInfoForm-issuingAuthority"
name="issuingAuthority">
{{formData.issuingAuthority}}
</a-form-item>
</a-col>
</a-row>
</a-col>
</a-row>
@ -158,16 +172,16 @@
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="审意见" v-bind="validateInfos.status" id="OrgApplyInfoForm-status" name="status">
<a-select v-model:value="formData.status" style="width: 200px" placeholder="请选择审意见" :disabled="sfsh!='1'">
<a-form-item label="审意见" v-bind="validateInfos.status" id="OrgApplyInfoForm-status" name="status">
<a-select v-model:value="formData.status" style="width: 200px" placeholder="请选择审意见" :disabled="sfsh!='1'">
<a-select-option value="2">审核通过</a-select-option>
<a-select-option value="3">审核驳回</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="12" v-show="formData.status == '3'">
<a-col :span="12" v-show="formData.status == '3' || formData.content">
<a-form-item label="驳回原因" v-bind="validateInfos.content" id="OrgApplyInfoForm-content" name="content">
<a-textarea :autosize="{ minRows: 3 }" maxlength="50" show-count v-model:value="formData.content"
<a-textarea :autosize="{ minRows: 3 }" maxlength="50" show-count v-model:value="formData.content" :disabled="formData.status != '3'"
allow-clear placeholder="请输入驳回原因"></a-textarea>
</a-form-item>
</a-col>
@ -181,9 +195,14 @@
{{formData.auditTime}}
</a-form-item>
</a-col>
<a-col :span="12" v-show="formData.buildStatus == '3' || formData.contract">
<a-col :span="12" v-show="formData.contract">
<a-form-item label="加盟合同" v-bind="validateInfos.contract" id="OrgApplyInfoForm-contract">
<JUpload v-model:value="formData.contract" :maxCount="1"></JUpload>
<JUpload v-model:value="formData.contract" :maxCount="1" :buttonVisible="false" disabled="true" fileType="pdf"></JUpload>
</a-form-item>
</a-col>
<a-col :span="12" v-if="formData.contractNote">
<a-form-item label="备注信息" v-bind="validateInfos.contractNote" id="OrgApplyInfoForm-contractNote">
{{formData.contractNote}}
</a-form-item>
</a-col>
</a-row>
@ -202,17 +221,17 @@
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="回复附件" >
<JUpload v-model:value="formData.replyFile" :maxCount="1" disabled></JUpload>
<a-form-item label="反馈附件" >
<JUpload v-model:value="formData.replyFile" :maxCount="1" :buttonVisible="false" disabled></JUpload>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="回复时间" >
<a-form-item label="反馈时间" >
{{formData.replyTime?formData.replyTime.substring(0,10):""}}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="回复内容" >
<a-form-item label="反馈内容" >
{{formData.replyContent}}
</a-form-item>
</a-col>
@ -239,6 +258,9 @@ import TencentMap from '/@/components/TencentMap/TencentMap.vue';
import JImageUpload from '/@/components/Form/src/jeecg/components/JImageUpload.vue';
import JUpload from '/@/components/Form/src/jeecg/components/JUpload/JUpload.vue';
import { t } from '/@/hooks/web/useI18n';
import {encryptByBase64} from "@/utils/cipher";
import { useGlobSetting } from '/@/hooks/setting';
const glob = useGlobSetting();
const cityViewValue = ref('')
const props = defineProps({
@ -292,23 +314,26 @@ const formData = reactive<Record<string, any>>({
orgDistrict_dictText: '',
franchiseTime: null,
contract:null,
contractNote:null,
replyContent: '',
replyFile: '',
replyTime: '',
handleBy: '',
workOrderStatus: '',
workOrderStatus_dictText: '',
auditBy:'',
auditTime: '',
});
const tempNullVal = ref('');
const sfsh = ref<string>('0');
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 17 } });
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 8 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false);
//
const validatorRules = reactive({
status: [{ required: true, message: '请选择审结果!' },],
status: [{ required: true, message: '请选择审结果!' },],
content: [
{
validator: async (_rule, value) => {
@ -335,6 +360,17 @@ const disabled = computed(() => {
});
/**
* 预览
*/
function handleView(record) {
if (record && record.url) {
console.log('glob.onlineUrl', glob.viewUrl);
let url = encodeURIComponent(encryptByBase64(record.url));
let previewUrl = `${glob.viewUrl}?url=` + url;
window.open(previewUrl, '_blank');
}
}
/**
* 新增
*/
@ -355,6 +391,7 @@ function edit(record) {
}
})
var lsbl = tmpData.status;
console.log("🚀 ~ edit ~ lsbl:", lsbl)
if (tmpData.status != '2' && tmpData.status != '3') {
tmpData.status = null
}
@ -406,7 +443,7 @@ async function submitForm() {
}
}
if(model.status == '2'){
model.buildStatus = 'approvalPass'//
model.buildStatus = 'approvalPass'//
}
await saveOrUpdate(model, isUpdate.value)
.then((res) => {

View File

@ -46,7 +46,7 @@ function add() {
* @param record
*/
function edit(record) {
title.value = disableSubmit.value ? '详情' : '机构加盟申请审';
title.value = disableSubmit.value ? '详情' : '机构加盟申请审';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record);

View File

@ -9,13 +9,13 @@
<SectionDivider :title="'机构信息'" />
</a-col>
<a-col :span="12">
<a-form-item label="机构名称" v-bind="validateInfos.comName" id="OrgApplyInfoForm-comName" name="comName">
{{ formData.comName }}
<a-form-item label="机构所在地">
{{ cityViewValue }}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="机构所在地">
{{ cityViewValue }}
<a-form-item label="机构名称" v-bind="validateInfos.comName" id="OrgApplyInfoForm-comName" name="comName">
{{ formData.comName }}
</a-form-item>
</a-col>
<a-col :span="12">
@ -25,19 +25,19 @@
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="机构负责人电话" v-bind="validateInfos.orgLeaderPhone" id="OrgApplyInfoForm-orgLeaderPhone"
<a-form-item label="负责人电话" v-bind="validateInfos.orgLeaderPhone" id="OrgApplyInfoForm-orgLeaderPhone"
name="orgLeaderPhone">
{{ formData.orgLeaderPhone }}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="机构房屋性质" v-bind="validateInfos.orgPropertyType" id="OrgApplyInfoForm-orgPropertyType"
<a-form-item label="房屋性质" v-bind="validateInfos.orgPropertyType" id="OrgApplyInfoForm-orgPropertyType"
name="orgPropertyType">
{{ formData.orgPropertyType }}
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="机构建筑面积" v-bind="validateInfos.orgBuildingArea" id="OrgApplyInfoForm-orgBuildingArea"
<a-form-item label="建筑面积" v-bind="validateInfos.orgBuildingArea" id="OrgApplyInfoForm-orgBuildingArea"
name="orgBuildingArea">
{{ formData.orgBuildingArea }}
</a-form-item>
@ -81,7 +81,7 @@ import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { getValueType } from '/@/utils';
import { saveOrUpdate, submitContract } from '../OrgApplyInfo.api';
import { saveOrUpdate, submitContract,editCg } from '../OrgApplyInfo.api';
import { Form } from 'ant-design-vue';
import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
import TencentMap from '/@/components/TencentMap/TencentMap.vue';
@ -151,7 +151,7 @@ const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 17 } });
const confirmLoading = ref<boolean>(false);
//
const validatorRules = reactive({
status: [{ required: true, message: '请选择审结果!' },],
status: [{ required: true, message: '请选择审结果!' },],
contract: [{ required: true, message: '请上传加盟合同!' },],
contractNote: [{ required: true, message: '请填写备注信息!' },],
});
@ -239,7 +239,7 @@ async function saveForm() {
}
}
}
await saveOrUpdate(model, true)
await editCg(model, true)
.then((res) => {
if (res.success) {
createMessage.success(res.message);

View File

@ -36,7 +36,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'orgBuildingArea',
},
{
title: '审意见',
title: '审意见',
align: 'center',
dataIndex: 'status_dictText',
},

View File

@ -24,16 +24,16 @@
class="query-group-cust" />
</a-form-item>
</a-col>
<a-col :lg="6">
<!-- <a-col :lg="6">
<a-form-item name="status">
<template #label><span title="审批意见">审批意见</span></template>
<a-select v-model:value="queryParam.status" style="width: 200px" placeholder="请选择审意见">
<template #label><span title="审核意见">审核意见</span></template>
<a-select v-model:value="queryParam.status" style="width: 200px" placeholder="请选择审意见">
<a-select-option value="4">待审核</a-select-option>
<a-select-option value="2">审核通过</a-select-option>
<a-select-option value="5">审核驳回</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-col> -->
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
<a-col :lg="6">
@ -195,7 +195,7 @@ function getTableAction(record) {
// onClick: handleDetail.bind(null, record),
// },
{
label: '审',
label: '审',
onClick: handleAudit.bind(null, record),
auth: 'orgapplyinfo:nu_org_apply_info:edit',
ifShow: record.status == '4'

View File

@ -1,10 +1,10 @@
<template>
<div class="container">
<div class="container2">
<a-form ref="formRef" layout="horizontal" :model="formData" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="审批意见" name="status" v-bind="validateInfos.status">
<a-select v-model:value="formData.status" style="width: 200px" placeholder="请选择审批意见">
<a-form-item label="审核结果" name="status" v-bind="validateInfos.status">
<a-select v-model:value="formData.status" style="width: 200px" placeholder="请选择审核结果">
<a-select-option value="modifyPass">审核通过</a-select-option>
<a-select-option value="modifyFail">审核驳回</a-select-option>
</a-select>
@ -22,7 +22,7 @@
<a-row>
<a-col :span="24" style="padding-top: 10px;padding-left: 30px;padding-right: 30px;">
<a-table :dataSource="filteredTableData" :columns="columns" :pagination="false" bordered size="small"
:scroll="{ y: '45vh' }" :rowClassName="setRowClassName">
:rowClassName="setRowClassName">
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'd1'">
<span>{{ applyObj[record.d1] }}</span>
@ -41,6 +41,14 @@
v-if="column.dataIndex === 'd3' && (record.d1 == 'orgProvince' || record.d1 == 'orgCity' || record.d1 == 'orgDistrict')">
<span>{{ provinceOptions[record.d3] }}</span>
</template>
<template
v-if="column.dataIndex === 'd2' && record.d1 == 'orgBuildingArea' ">
<span>{{ record.d2 }}</span>
</template>
<template
v-if="column.dataIndex === 'd3' && record.d1 == 'orgBuildingArea' ">
<span>{{ record.d3 }}</span>
</template>
</template>
</a-table>
</a-col>
@ -76,7 +84,7 @@ const formData = reactive<Record<string, any>>({
pkId: ''
});
const validatorRules = reactive({
status: [{ required: true, message: '请选择审结果!' },],
status: [{ required: true, message: '请选择审结果!' },],
content: [
{
validator: async (_rule, value) => {
@ -121,6 +129,7 @@ const filteredTableData = computed(() => {
&& item.d1 !== 'handleBy'
&& item.d1 !== 'workOrderStatus'
&& item.d1 !== 'workOrderId'
&& item.d1 !== 'auditBy'
);
});
@ -221,7 +230,7 @@ defineExpose({
</script>
<style lang="less" scoped>
.container {
.container2 {
padding: 16px;
}

View File

@ -6,11 +6,11 @@
name="OrgModifyInfoForm">
<a-row>
<a-col :span="24">
<SectionDivider :title="'入驻审'" />
<SectionDivider :title="'入驻审'" />
</a-col>
<a-col :span="12">
<a-form-item label="审" v-bind="validateInfos.status" id="OrgModifyInfoForm-status" name="status">
<j-dict-select-tag v-model:value="formData.status" dictCode="org_apply_status" placeholder="请选择审结果"
<a-form-item label="审" v-bind="validateInfos.status" id="OrgModifyInfoForm-status" name="status">
<j-dict-select-tag v-model:value="formData.status" dictCode="org_apply_status" placeholder="请选择审结果"
allow-clear />
</a-form-item>
</a-col>

View File

@ -49,7 +49,7 @@ function auditModify(data) {
* @param record
*/
function edit(record) {
title.value = disableSubmit.value ? '详情' : '机构信息变更审';
title.value = disableSubmit.value ? '详情' : '机构信息变更审';
infoVisible.value = true;
nextTick(() => {
registerForm.value.edit(record);

View File

@ -18,9 +18,9 @@
</a-col>
<a-col :lg="6">
<a-form-item name="status">
<template #label><span title="审批状态">审批状态</span></template>
<template #label><span title="审核状态">审核状态</span></template>
<j-dict-select-tag type="list" v-model:value="queryParam.status" dictCode="org_apply_status"
placeholder="请选择审状态" allow-clear />
placeholder="请选择审状态" allow-clear />
</a-form-item>
</a-col>
<a-col :lg="6">
@ -177,7 +177,7 @@ import JInput from "/@/components/Form/src/jeecg/components/JInput.vue";
function getTableAction(record) {
return [
{
label: '审',
label: '审',
onClick: handleEdit.bind(null, record),
ifShow: record.status == '1'
},

View File

@ -5,11 +5,11 @@
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="NuEmployeesAdvisoryInfoForm">
<a-row>
<a-col :span="24">
<SectionDivider :title="'入驻审'" />
<SectionDivider :title="'入驻审'" />
</a-col>
<a-col :span="12">
<a-form-item label="审" v-bind="validateInfos.status" id="OrgApplyInfoForm-status" name="status">
<j-dict-select-tag type="radio" v-model:value="formData.status" dictCode="org_apply_status" placeholder="请选择审结果"
<a-form-item label="审" v-bind="validateInfos.status" id="OrgApplyInfoForm-status" name="status">
<j-dict-select-tag type="radio" v-model:value="formData.status" dictCode="org_apply_status" placeholder="请选择审结果"
allow-clear />
</a-form-item>
</a-col>

View File

@ -188,7 +188,7 @@ export const refundTimeTableData: any[] = [
},
{
t1: '2017-10-01 14:10',
t2: '申请审通过',
t2: '申请审通过',
t3: '成功',
t4: '用户',
t5: '1h',

View File

@ -57,7 +57,7 @@ export const refundTimeTableData: any[] = [
},
{
t1: '2017-10-01 14:10',
t2: '申请审通过',
t2: '申请审通过',
t3: '成功',
t4: '用户',
t5: '1h',

View File

@ -57,7 +57,7 @@ export const schemas: FormSchema[] = [
{
field: 'f4',
component: 'Select',
label: '审人',
label: '审人',
componentProps: {
options: basicOptions,
},

View File

@ -78,7 +78,7 @@ export const saveOrUpdate = (params, isUpdate) => {
};
/**
*
*
* @param params
*/
export const audit = (params) => {
@ -94,7 +94,7 @@ export const asyncFunc = (params) => {
};
/**
*
*
* @param params
*/
export const syncMediaForBiz = (params) => {

View File

@ -7,7 +7,7 @@
<a-row v-show="isAudit">
<a-col :span="12">
<a-config-provider :disabled="false">
<a-form-item label="服务指令审" v-bind="validateInfos.statusVal" id="ConfigServiceDirectiveForm-statusVal"
<a-form-item label="服务指令审" v-bind="validateInfos.statusVal" id="ConfigServiceDirectiveForm-statusVal"
name="statusVal">
<a-select v-model:value="formData.statusVal" placeholder="请选择审核状态" style="width: 200px"
:disabled="false">
@ -388,7 +388,7 @@ function add() {
/**
* 编辑
* isEditMedia_是否为编辑指令资源 隐藏业务字段
* isAudit_是否为服务指令那个审 隐藏业务字段
* isAudit_是否为服务指令那个审 隐藏业务字段
*/
function edit(record, isEditMedia_ = false, isAudit_ = false) {
console.log("🌊 ~ edit ~ record:", record)
@ -477,7 +477,7 @@ function submitAudit() {
} else if (formData.statusVal == 'auditFaild') {
formData.status = 3
} else {
createMessage.warning('请选择审结果!')
createMessage.warning('请选择审结果!')
return
}
audit(formData)

View File

@ -59,11 +59,11 @@ function edit(record) {
}
/**
* 批列表 - 审批
* 核列表 - 审核
* @param record
*/
function audit(record) {
title.value = '审';
title.value = '审';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record, false, true);

View File

@ -154,7 +154,7 @@ function handleMedia(record: Recordable) {
function getTableAction(record) {
return [
{
label: '审',
label: '审',
onClick: handleAudit.bind(null, record),
ifShow: record.status == '1'
},

View File

@ -53,7 +53,10 @@
</a-col>
</a-row>
</div>
<div class="aui-inputClear">
<div >
<huakuai @verifySuccess="checkInputCode"/>
</div>
<!-- <div class="aui-inputClear">
<a-row>
<a-col :span="2">
<span style="margin-top: 10px;display: block;"><img :src="icon3Img" alt="验证码" style="width: 20px;" /></span>
@ -70,7 +73,7 @@
</div>
</a-col>
</a-row>
</div>
</div> -->
</div>
</a-form>
</div>
@ -92,7 +95,7 @@
</div>
</template>
<script lang="ts" setup name="login-mini">
import { getCaptcha, getCodeInfo } from '/@/api/sys/user';
import { getCaptcha, randomCode } from '/@/api/sys/user';
import { computed, onMounted, reactive, ref, toRaw, unref } from 'vue';
import codeImg from '/@/assets/images/checkcode.png';
import { Rule } from '/@/components/Form';
@ -115,6 +118,7 @@
import { useAppInject } from "/@/hooks/web/useAppInject";
import { GithubFilled, WechatFilled, DingtalkCircleFilled, createFromIconfontCN } from '@ant-design/icons-vue';
import CaptchaModal from '@/components/jeecg/captcha/CaptchaModal.vue';
import huakuai from './huakuai.vue';
import { useModal } from "@/components/Modal";
import { ExceptionEnum } from "@/enums/exceptionEnum";
@ -133,6 +137,7 @@
checkKey: null,
});
const rememberMe = ref<string>('0');
const huakuaiOpen = ref<boolean>(false);
//
const activeIndex = ref<string>('accountLogin');
const type = ref<string>('login');
@ -178,12 +183,19 @@
formData.inputCode = '';
randCodeData.checkKey = 1629428467008;
getCodeInfo(randCodeData.checkKey).then((res) => {
randomCode(randCodeData.checkKey).then((res) => {
console.log("🚀 ~ handleChangeCheckCode ~ res:", res)
randCodeData.randCodeImage = res;
randCodeData.requestCodeSuccess = true;
formData.inputCode = res;
});
}
function checkInputCode(type){
console.log("🚀 ~ checkCode ~ checkCode:",type)
handleChangeCheckCode();
}
/**
* 切换登录方式
*/
@ -372,7 +384,7 @@
onMounted(() => {
//
handleChangeCheckCode();
// handleChangeCheckCode();
});
</script>

View File

@ -0,0 +1,170 @@
<template>
<!-- 滑动验证码容器 -->
<div class="slider-container" ref="containerRef">
<!-- 滑动遮罩层显示滑动进度 -->
<div class="slider-mask" :style="{ width: sliderMaskWidth }" />
<!-- 滑块按钮 -->
<div
class="slider"
ref="sliderRef"
@mousedown="handleDragStart"
:class="{ 'slider-success': verified }"
:style="{ left: sliderLeft }"
>
<!-- 滑块图标 -->
<Icon icon="ant-design:double-right-outlined" :size="20" />
</div>
<!-- 提示文本 -->
<div class="slider-text" :class="{ 'slider-text-success': verified }">
{{ verified ? "验证通过" : "将滑块拖动至右侧完成验证" }}
</div>
</div>
</template>
<script setup lang="ts">
import { ref, defineEmits, onUnmounted } from "vue"
const emit = defineEmits(["verifySuccess"])
// DOM
const containerRef = ref<HTMLElement | null>(null) //
const sliderRef = ref<HTMLElement | null>(null) //
//
const sliderLeft = ref("0px") //
const sliderMaskWidth = ref("0px") //
const verified = ref(false) //
//
let startX = 0 // X
let sliderLeft_temp = 0 //
/**
* 开始拖动处理
* @param e 鼠标事件对象
*/
const handleDragStart = (e: MouseEvent) => {
if (verified.value) return //
startX = e.clientX
sliderLeft_temp = parseInt(sliderLeft.value)
//
document.addEventListener("mousemove", handleDragMove)
document.addEventListener("mouseup", handleDragEnd)
}
/**
* 拖动过程处理
* @param e 鼠标事件对象
*/
const handleDragMove = (e: MouseEvent) => {
if (verified.value) return
const container = containerRef.value
if (!container) return
//
const diff = e.clientX - startX
const containerWidth = container.offsetWidth
const sliderWidth = sliderRef.value?.offsetWidth || 0
const maxLeft = containerWidth - sliderWidth
//
let newLeft = sliderLeft_temp + diff
if (newLeft < 0) newLeft = 0
if (newLeft > maxLeft) newLeft = maxLeft
//
sliderLeft.value = newLeft + "px"
sliderMaskWidth.value = newLeft + sliderWidth / 2 + "px"
//
if (newLeft === maxLeft) {
verified.value = true
emit("verifySuccess", true) //
handleDragEnd()
}
}
/**
* 结束拖动处理
*/
const handleDragEnd = () => {
if (!verified.value) {
//
sliderLeft.value = "0px"
sliderMaskWidth.value = "0px"
}
//
document.removeEventListener("mousemove", handleDragMove)
document.removeEventListener("mouseup", handleDragEnd)
}
//
onUnmounted(() => {
document.removeEventListener("mousemove", handleDragMove)
document.removeEventListener("mouseup", handleDragEnd)
})
</script>
<style scoped>
/* 滑动验证码容器样式 */
.slider-container {
position: relative;
width: 100%;
height: 42px;
background-color: #f5f5f5;
border: 1px solid #e4e7ed;
border-radius: 8px;
margin-top: 20px;
}
/* 滑动遮罩层样式 */
.slider-mask {
position: absolute;
top: 0;
left: 0;
height: 100%;
background-color: #d1e9fc;
border-radius: 8px;
transition: width 0.1s linear;
}
/* 滑块按钮样式 */
.slider {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 60px;
height: 42px;
background: #e1dede;
border-radius: 8px;
cursor: pointer;
transition: background-color 0.2s;
display: flex;
align-items: center;
justify-content: center;
color: white;
}
/* 验证成功时滑块样式 */
.slider-success {
background-color: #1ea0fa;
}
/* 提示文本样式 */
.slider-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
user-select: none;
font-weight: 400;
font-size: 12px;
color: #9cb3c5;
width: auto;
}
/* 验证成功时文本样式 */
.slider-text-success {
color: #1ea0fa;
}
</style>

View File

@ -236,7 +236,7 @@ export const putCancelQuit = (params, handleSuccess) => {
};
/**
*
*
*/
export const getUserTenantPageList = (params) => {
return defHttp.get({ url: Api.getUserTenantPageList, params });

View File

@ -511,7 +511,7 @@ export const userTenantColumns: BasicColumn[] = [
if (text === '1') {
return '正常';
} else if (text === '3') {
return '审中';
return '审中';
} else {
return '已拒绝';
}