feat: 会议提交剩余时间+解冻 + 会务/劳务材料批量下载 + 多角色人员/账号模块完善

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
郭庆泰
2026-08-25 06:53:18 +08:00
co-authored by Claude
parent 0c882ae846
commit 591a43fe61
126 changed files with 3789 additions and 1334 deletions
+32 -17
View File
@@ -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