generated from Leo_Ding/web-template
11
This commit is contained in:
parent
3917c607aa
commit
e2ddb86645
@ -1,449 +0,0 @@
|
|||||||
<template>
|
|
||||||
<a-modal
|
|
||||||
:width="800"
|
|
||||||
:open="modal.open"
|
|
||||||
:title="modal.title"
|
|
||||||
:confirm-loading="modal.confirmLoading"
|
|
||||||
:after-close="onAfterClose"
|
|
||||||
:cancel-text="isViewMode ? '关闭' : '取消'"
|
|
||||||
:ok-text="okText"
|
|
||||||
@ok="handleOk"
|
|
||||||
@cancel="handleCancel"
|
|
||||||
:ok-button-props="{ hidden: isViewMode }"
|
|
||||||
>
|
|
||||||
<a-form layout="vertical" ref="formRef" :model="formData" :rules="formRules">
|
|
||||||
<!-- 基本信息 -->
|
|
||||||
<a-card title="基本信息" class="mb-4">
|
|
||||||
<a-row :gutter="16">
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="服务组织名称" name="orgName">
|
|
||||||
<a-input v-model:value="formData.orgName" :disabled="true" placeholder="系统生成或上级指定" />
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="组织编号" name="orgCode">
|
|
||||||
<a-input v-model:value="formData.orgCode" :disabled="true" placeholder="系统自动生成" />
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="组织机构代码" name="orgIdentityCode" :required="!isViewMode">
|
|
||||||
<a-input
|
|
||||||
v-model:value="formData.orgIdentityCode"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="请输入统一社会信用代码等"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="等级" name="level" :required="!isViewMode">
|
|
||||||
<a-select
|
|
||||||
v-model:value="formData.level"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
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>
|
|
||||||
<a-select-option value="4">四级</a-select-option>
|
|
||||||
<a-select-option value="5">五级</a-select-option>
|
|
||||||
</a-select>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="负责人姓名" name="manager" :required="!isViewMode">
|
|
||||||
<a-input
|
|
||||||
v-model:value="formData.manager"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="请输入负责人姓名"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="联系电话" name="phone" :required="!isViewMode">
|
|
||||||
<a-input
|
|
||||||
v-model:value="formData.phone"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="请输入联系电话"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="法人姓名">
|
|
||||||
<a-input
|
|
||||||
v-model:value="formData.legalPerson"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="请输入法人姓名"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="法人联系电话">
|
|
||||||
<a-input
|
|
||||||
v-model:value="formData.legalPhone"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="请输入法人联系电话"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="营业执照名称">
|
|
||||||
<a-input
|
|
||||||
v-model:value="formData.businessLicenseName"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="请输入营业执照上的全称"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="登记机关">
|
|
||||||
<a-input
|
|
||||||
v-model:value="formData.registrationAuthority"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="如:南通市通州区市场监督管理局"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="登记证号">
|
|
||||||
<a-input
|
|
||||||
v-model:value="formData.registrationNumber"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="社会组织登记证号"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="中标组织">
|
|
||||||
<a-select
|
|
||||||
v-model:value="formData.isWinningOrg"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="请选择是否为中标组织"
|
|
||||||
>
|
|
||||||
<a-select-option value="yes">是</a-select-option>
|
|
||||||
<a-select-option value="no">否</a-select-option>
|
|
||||||
</a-select>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
</a-row>
|
|
||||||
</a-card>
|
|
||||||
|
|
||||||
<!-- 钱包设置 -->
|
|
||||||
<a-card title="钱包设置" class="mb-4">
|
|
||||||
<a-row :gutter="16">
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="使用钱包" name="useWallet">
|
|
||||||
<a-switch v-model:checked="formData.useWallet" :disabled="isViewMode" />
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="12">
|
|
||||||
<a-form-item label="可用钱包" name="availableWallets">
|
|
||||||
<a-select
|
|
||||||
mode="multiple"
|
|
||||||
v-model:value="formData.availableWallets"
|
|
||||||
placeholder="选择可接入的钱包"
|
|
||||||
:disabled="isViewMode || !formData.useWallet"
|
|
||||||
>
|
|
||||||
<a-select-option value="wallet_a">通用助餐钱包</a-select-option>
|
|
||||||
<a-select-option value="wallet_b">居家服务钱包</a-select-option>
|
|
||||||
<a-select-option value="wallet_c">康复辅具钱包</a-select-option>
|
|
||||||
</a-select>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
</a-row>
|
|
||||||
</a-card>
|
|
||||||
|
|
||||||
<!-- 地址信息 -->
|
|
||||||
<a-card title="地址信息" class="mb-4">
|
|
||||||
<a-row :gutter="16">
|
|
||||||
<a-col :span="24">
|
|
||||||
<a-form-item label="服务组织地址" name="address" :required="!isViewMode">
|
|
||||||
<a-cascader
|
|
||||||
v-model:value="formData.address"
|
|
||||||
:options="addressOptions"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="请选择省/市/区/街道"
|
|
||||||
style="width: 100%"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="24">
|
|
||||||
<a-form-item label="详细地址" name="detailAddress" :required="!isViewMode">
|
|
||||||
<a-input
|
|
||||||
v-model:value="formData.detailAddress"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="请输入街道门牌号等详细信息"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="24">
|
|
||||||
<a-form-item label="地图定位地址">
|
|
||||||
<a-input
|
|
||||||
v-model:value="formData.location"
|
|
||||||
placeholder="点击右侧按钮选择地图位置"
|
|
||||||
readonly
|
|
||||||
addon-after-icon="environment"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
>
|
|
||||||
<template #addonAfter>
|
|
||||||
<a-button
|
|
||||||
v-if="!isViewMode"
|
|
||||||
type="link"
|
|
||||||
@click="openMapSelector"
|
|
||||||
>
|
|
||||||
选择位置
|
|
||||||
</a-button>
|
|
||||||
<span v-else>已定位</span>
|
|
||||||
</template>
|
|
||||||
</a-input>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
</a-row>
|
|
||||||
</a-card>
|
|
||||||
|
|
||||||
<!-- 资质上传 -->
|
|
||||||
<a-card title="资质材料" class="mb-4">
|
|
||||||
<a-row :gutter="16">
|
|
||||||
<a-col :span="24">
|
|
||||||
<a-form-item label="上传资质附件">
|
|
||||||
<a-upload
|
|
||||||
v-model:file-list="formData.qualificationFiles"
|
|
||||||
:before-upload="beforeUploadFile"
|
|
||||||
accept=".pdf,.doc,.docx"
|
|
||||||
:max-count="3"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
>
|
|
||||||
<a-button v-if="!isViewMode" type="primary" ghost>
|
|
||||||
<plus-outlined /> 上传文件
|
|
||||||
</a-button>
|
|
||||||
</a-upload>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="24">
|
|
||||||
<a-form-item label="上传资质图片">
|
|
||||||
<a-upload
|
|
||||||
list-type="picture-card"
|
|
||||||
v-model:file-list="formData.qualificationImages"
|
|
||||||
:before-upload="beforeUploadImage"
|
|
||||||
:max-count="5"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
>
|
|
||||||
<div v-if="!isViewMode && formData.qualificationImages.length < 5">
|
|
||||||
<plus-outlined />
|
|
||||||
<div class="ant-upload-text">上传图片</div>
|
|
||||||
</div>
|
|
||||||
</a-upload>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="24">
|
|
||||||
<a-form-item label="上传营业执照">
|
|
||||||
<a-upload
|
|
||||||
list-type="picture-card"
|
|
||||||
v-model:file-list="formData.businessLicenseImage"
|
|
||||||
:before-upload="beforeUploadImage"
|
|
||||||
:max-count="1"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
>
|
|
||||||
<div v-if="!isViewMode && !formData.businessLicenseImage.length">
|
|
||||||
<plus-outlined />
|
|
||||||
<div class="ant-upload-text">上传执照</div>
|
|
||||||
</div>
|
|
||||||
</a-upload>
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
</a-row>
|
|
||||||
</a-card>
|
|
||||||
|
|
||||||
<!-- 其他信息 -->
|
|
||||||
<a-card title="其他信息" class="mb-4">
|
|
||||||
<a-form-item label="备注">
|
|
||||||
<a-textarea
|
|
||||||
v-model:value="formData.remark"
|
|
||||||
rows="4"
|
|
||||||
:disabled="isViewMode"
|
|
||||||
placeholder="请输入备注信息"
|
|
||||||
/>
|
|
||||||
</a-form-item>
|
|
||||||
</a-card>
|
|
||||||
</a-form>
|
|
||||||
</a-modal>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import { ref, reactive, defineEmits, defineExpose, computed } from 'vue' // ✅ 补充 computed
|
|
||||||
import { PlusOutlined } from '@ant-design/icons-vue'
|
|
||||||
import { message } from 'ant-design-vue'
|
|
||||||
import { useModal, useForm } from '@/hooks'
|
|
||||||
|
|
||||||
const emit = defineEmits(['ok'])
|
|
||||||
const { modal, showModal, hideModal, showLoading, hideLoading } = useModal()
|
|
||||||
const { formData, formRef, formRules, resetForm } = useForm()
|
|
||||||
|
|
||||||
// 初始化数据模型
|
|
||||||
formData.value = {
|
|
||||||
orgName: '',
|
|
||||||
orgCode: '',
|
|
||||||
orgIdentityCode: '',
|
|
||||||
level: '',
|
|
||||||
manager: '',
|
|
||||||
phone: '',
|
|
||||||
legalPerson: '',
|
|
||||||
legalPhone: '',
|
|
||||||
businessLicenseName: '',
|
|
||||||
registrationAuthority: '',
|
|
||||||
registrationNumber: '',
|
|
||||||
isWinningOrg: '',
|
|
||||||
useWallet: false,
|
|
||||||
availableWallets: [],
|
|
||||||
address: [],
|
|
||||||
detailAddress: '',
|
|
||||||
location: '',
|
|
||||||
qualificationFiles: [],
|
|
||||||
qualificationImages: [],
|
|
||||||
businessLicenseImage: [],
|
|
||||||
remark: '',
|
|
||||||
mode: 'edit' // 默认编辑模式
|
|
||||||
}
|
|
||||||
|
|
||||||
// 表单验证规则:查看模式下无需验证
|
|
||||||
formRules.value = {
|
|
||||||
orgIdentityCode: [{ required: true, message: '请输入组织机构代码' }],
|
|
||||||
level: [{ required: true, message: '请选择等级' }],
|
|
||||||
manager: [{ required: true, message: '请输入负责人姓名' }],
|
|
||||||
phone: [
|
|
||||||
{ required: true, message: '请输入联系电话' },
|
|
||||||
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码' }
|
|
||||||
],
|
|
||||||
address: [{ required: true, message: '请选择服务组织地址' }],
|
|
||||||
detailAddress: [{ required: true, message: '请输入详细地址' }]
|
|
||||||
}
|
|
||||||
|
|
||||||
// 地址选项
|
|
||||||
const addressOptions = ref([
|
|
||||||
{
|
|
||||||
value: 'jiangsu',
|
|
||||||
label: '江苏省',
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
value: 'nantong',
|
|
||||||
label: '南通市',
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
value: 'tongzhou',
|
|
||||||
label: '通州区',
|
|
||||||
children: [
|
|
||||||
{ value: 'liuqiao', label: '刘桥镇' },
|
|
||||||
{ value: 'pingchao', label: '平潮镇' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
])
|
|
||||||
|
|
||||||
// ✅ 计算属性:是否为查看模式
|
|
||||||
const isViewMode = computed(() => formData.value.mode === 'view')
|
|
||||||
const okText = ref('确定')
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 打开地图选择器
|
|
||||||
*/
|
|
||||||
function openMapSelector() {
|
|
||||||
formData.value.location = '江苏省南通市通州区刘桥镇人民政府附近 (经纬度: 32.1234, 120.5678)'
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件上传前校验(文件)
|
|
||||||
*/
|
|
||||||
function beforeUploadFile(file) {
|
|
||||||
const isPdfOrDoc = [
|
|
||||||
'application/pdf',
|
|
||||||
'application/msword',
|
|
||||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
|
||||||
].includes(file.type)
|
|
||||||
if (!isPdfOrDoc) {
|
|
||||||
message.error('仅支持上传 PDF 或 Word 文档!')
|
|
||||||
return Upload.LIST_IGNORE
|
|
||||||
}
|
|
||||||
const isLt5M = file.size / 1024 / 1024 < 5
|
|
||||||
if (!isLt5M) {
|
|
||||||
message.error('文件大小不能超过 5MB!')
|
|
||||||
return Upload.LIST_IGNORE
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 图片上传前校验
|
|
||||||
*/
|
|
||||||
function beforeUploadImage(file) {
|
|
||||||
const isImg = file.type.startsWith('image/')
|
|
||||||
if (!isImg) {
|
|
||||||
message.error('只能上传图片文件!')
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
const isLt2M = file.size / 1024 / 1024 < 2
|
|
||||||
if (!isLt2M) {
|
|
||||||
message.error('图片大小不能超过 2MB!')
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// 暴露方法给父组件
|
|
||||||
defineExpose({
|
|
||||||
open({ record, mode = 'edit' }) {
|
|
||||||
showModal({
|
|
||||||
type: mode,
|
|
||||||
title: mode === 'edit' ? '编辑服务组织' : '服务组织详情'
|
|
||||||
})
|
|
||||||
Object.assign(formData.value, record || {})
|
|
||||||
formData.value.mode = mode
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 提交处理(仅编辑模式触发)
|
|
||||||
*/
|
|
||||||
function handleOk() {
|
|
||||||
if (isViewMode.value) return // 安全兜底
|
|
||||||
|
|
||||||
formRef.value
|
|
||||||
.validateFields()
|
|
||||||
.then((values) => {
|
|
||||||
showLoading()
|
|
||||||
try {
|
|
||||||
console.log('提交数据:', values)
|
|
||||||
setTimeout(() => {
|
|
||||||
hideLoading()
|
|
||||||
hideModal()
|
|
||||||
emit('ok')
|
|
||||||
message.success('操作成功')
|
|
||||||
}, 800)
|
|
||||||
} catch (e) {
|
|
||||||
hideLoading()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(() => hideLoading())
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleCancel() {
|
|
||||||
hideModal()
|
|
||||||
}
|
|
||||||
|
|
||||||
function onAfterClose() {
|
|
||||||
resetForm()
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="less" scoped>
|
|
||||||
.mb-4 {
|
|
||||||
margin-bottom: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ant-upload-list-picture-card .ant-upload-list-item,
|
|
||||||
.ant-upload-list-picture .ant-upload-list-item {
|
|
||||||
width: 104px;
|
|
||||||
height: 104px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
export default {
|
|
||||||
welcome: '欢迎',
|
|
||||||
home: '首页',
|
|
||||||
system: '系统设置',
|
|
||||||
menu: '菜单管理',
|
|
||||||
user: '用户管理',
|
|
||||||
setting: '信息设置',
|
|
||||||
role: '角色管理',
|
|
||||||
logger: '日志管理',
|
|
||||||
'menu.account.settings': '个人设置',
|
|
||||||
add: '添加',
|
|
||||||
edit: '修改',
|
|
||||||
delete: '删除',
|
|
||||||
search: '搜索',
|
|
||||||
login: '登录',
|
|
||||||
register: '注册',
|
|
||||||
dashboard: 'Dashboard',
|
|
||||||
'dashboard.analysis': '分析页',
|
|
||||||
'dashboard.monitor': '监控页',
|
|
||||||
'dashboard.workplace': '工作台',
|
|
||||||
'exception.403': '403',
|
|
||||||
'exception.404': '404',
|
|
||||||
'exception.500': '500',
|
|
||||||
result: '结果页',
|
|
||||||
'result.success': '成功页',
|
|
||||||
'result.fail': '失败页',
|
|
||||||
exception: '异常页',
|
|
||||||
'exception.not-permission': '403',
|
|
||||||
'exception.not-find': '404',
|
|
||||||
'exception.server-error': '500',
|
|
||||||
'exception.trigger': '触发错误',
|
|
||||||
account: '个人页',
|
|
||||||
'account.trigger': '触发报错',
|
|
||||||
'account.logout': '退出登录',
|
|
||||||
'dict': '字典管理',
|
|
||||||
'dict-detail': '字典数据',
|
|
||||||
workorderMenu: '工单管理',
|
|
||||||
mineWorderOrder: '我下的工单',
|
|
||||||
invalidWzorkOrder: '无效工单',
|
|
||||||
abnormalWorkOrder: '异常工单',
|
|
||||||
serviceWorkOrder: '服务工单'
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user