feat: 会议提交剩余时间+解冻 + 会务/劳务材料批量下载 + 多角色人员/账号模块完善
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -16,17 +16,22 @@
|
||||
<el-input v-model="form.username" placeholder="请输入登录用户名(4-20位字母数字)" maxlength="20" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="企业名称" prop="unitName">
|
||||
<el-input v-model="form.unitName" placeholder="请输入企业全称" maxlength="200" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="企业性质" prop="businessNature">
|
||||
<el-select v-model="form.businessNature" placeholder="请选择企业性质" style="width:100%">
|
||||
<el-option label="私营" value="私营" />
|
||||
<el-option label="国营" value="国营" />
|
||||
<el-option label="中外合资" value="中外合资" />
|
||||
<el-option label="外资" value="外资" />
|
||||
<el-option label="其他" value="其他" />
|
||||
<el-form-item label="企业名称" prop="orgId">
|
||||
<el-select
|
||||
v-model="form.orgId"
|
||||
filterable
|
||||
remote
|
||||
:remote-method="searchOrg"
|
||||
:loading="orgLoading"
|
||||
placeholder="输入企业名称搜索并选择"
|
||||
style="width:100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="o in orgOptions"
|
||||
:key="o.orgId"
|
||||
:label="o.orgName"
|
||||
:value="o.orgId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -86,10 +91,10 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref, onUnmounted } from 'vue'
|
||||
import { reactive, ref, onUnmounted, onMounted } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import request from '@/utils/request'
|
||||
import { registerSponsor } from '@/api/public'
|
||||
import { registerSponsor, sponsorOrgOptions } from '@/api/public'
|
||||
import PortalShell from '@/components/PortalShell.vue'
|
||||
import { useAsyncLock } from '@/utils/useAsyncLock'
|
||||
|
||||
@@ -102,8 +107,7 @@ const agreed = ref(false)
|
||||
|
||||
const form = reactive({
|
||||
username: '',
|
||||
unitName: '',
|
||||
businessNature: '',
|
||||
orgId: null,
|
||||
phone: '',
|
||||
smsCode: '',
|
||||
password: '',
|
||||
@@ -116,8 +120,7 @@ const rules = {
|
||||
{ min: 4, max: 20, message: '用户名长度 4-20 位', trigger: 'blur' },
|
||||
{ pattern: /^[A-Za-z0-9_]+$/, message: '只能包含字母/数字/下划线', trigger: 'blur' }
|
||||
],
|
||||
unitName: [{ required: true, message: '请输入企业名称', trigger: 'blur' }],
|
||||
businessNature: [{ required: true, message: '请选择企业性质', trigger: 'change' }],
|
||||
orgId: [{ required: true, message: '请选择企业', trigger: 'change' }],
|
||||
phone: [
|
||||
{ required: true, message: '请输入手机号码', trigger: 'blur' },
|
||||
{ pattern: /^1\d{10}$/, message: '手机号格式错误', trigger: 'blur' }
|
||||
@@ -139,6 +142,18 @@ const rules = {
|
||||
]
|
||||
}
|
||||
|
||||
// ===== 企业远程搜索 (biz_org sponsor 类型) =====
|
||||
const orgOptions = ref([])
|
||||
const orgLoading = ref(false)
|
||||
function searchOrg(query) {
|
||||
orgLoading.value = true
|
||||
sponsorOrgOptions({ orgName: query || '' })
|
||||
.then(res => { orgOptions.value = res.data || [] })
|
||||
.catch(() => { orgOptions.value = [] })
|
||||
.finally(() => { orgLoading.value = false })
|
||||
}
|
||||
onMounted(() => searchOrg(''))
|
||||
|
||||
// ===== 短信验证码 =====
|
||||
const smsCountdown = ref(0)
|
||||
let smsTimer = null
|
||||
|
||||
Reference in New Issue
Block a user