浏览代码

修改bug

lisy 5 月之前
父节点
当前提交
d2981e278e

+ 7 - 3
src/views/training/meeting-add/index.vue

@@ -22,12 +22,12 @@
                             </el-col>
                             <el-col :span="6">
                                 <el-form-item label="会议时间" prop="trainingTime">
-                                    <el-date-picker v-model="form.trainingTime" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" date-format="YYYY-MM-DD" time-format="HH:mm:ss" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
+                                    <el-date-picker v-model="form.trainingTime" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" date-format="YYYY-MM-DD" time-format="HH:mm" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
                                 </el-form-item>
                             </el-col>
                             <el-col :span="6">
                                 <el-form-item label="报名时间" prop="signupTime">
-                                    <el-date-picker v-model="form.signupsTime" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" date-format="YYYY-MM-DD" time-format="HH:mm:ss" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
+                                    <el-date-picker v-model="form.signupsTime" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" date-format="YYYY-MM-DD" time-format="HH:mm" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
                                 </el-form-item>
                             </el-col>
                             <el-col :span="6">
@@ -237,6 +237,10 @@
                                         <meetingCustomPreview :field="field" style="pointer-events: none" v-if="field" />
                                     </div>
                                 </template>
+                                <div class="pd-15 border1 c-#D7D7D7 d-flex j-sb">
+                                    <span class="c-#606266 f-s-16 f-w-6">备注</span>
+                                    <span class="f-s-14">请输入</span>
+                                </div>
                             </div>
                         </div>
                     </div>
@@ -347,7 +351,7 @@ const rules = reactive({
 const formRef = ref();
 const save = debounce(async () => {
     console.log('123123');
-    
+
     await formRef.value.validate();
     const params = {
         ...form.value,

+ 28 - 53
src/views/training/meeting/index.vue

@@ -7,21 +7,16 @@
                     <div class="flex1 ov-hd d-flex j-ed">
                         <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="auto">
                             <el-form-item label="会议名称" prop="trainingName">
-                                <el-input v-model="queryParams.trainingName" placeholder="搜会议名称" clearable
-                                    style="width: 160px" @keyup.enter="handleQuery" />
+                                <el-input v-model="queryParams.trainingName" placeholder="搜会议名称" clearable style="width: 160px" @keyup.enter="handleQuery" />
                             </el-form-item>
                             <el-form-item label="培训方式" prop="joinType">
-                                <el-select v-model="queryParams.joinType" placeholder="请选择培训方式" clearable
-                                    style="width: 160px" @change="handleQuery">
-                                    <el-option v-for="item in dm_training_join_type" :key="item.value"
-                                        :label="item.label" :value="item.value" />
+                                <el-select v-model="queryParams.joinType" placeholder="请选择培训方式" clearable style="width: 160px" @change="handleQuery">
+                                    <el-option v-for="item in dm_training_join_type" :key="item.value" :label="item.label" :value="item.value" />
                                 </el-select>
                             </el-form-item>
                             <el-form-item label="是否颁发证书" prop="certFlag">
-                                <el-select v-model="queryParams.certFlag" placeholder="请选择是否颁发证书" clearable
-                                    style="width: 160px" @change="handleQuery">
-                                    <el-option v-for="item in yes_no" :key="item.value" :label="item.label"
-                                        :value="item.value" />
+                                <el-select v-model="queryParams.certFlag" placeholder="请选择是否颁发证书" clearable style="width: 160px" @change="handleQuery">
+                                    <el-option v-for="item in yes_no" :key="item.value" :label="item.label" :value="item.value" />
                                 </el-select>
                             </el-form-item>
                             <el-form-item>
@@ -35,22 +30,21 @@
             <div class="d-flex flex1 ov-hd flex-cln pd-16">
                 <div class="d-flex j-sb mb-16">
                     <div>
-                        <searchTabs v-model="queryParams.status" @change="handleQuery" :list="tabs" key-label="name"
-                            key-count="num" key-value="type"></searchTabs>
+                        <searchTabs v-model="queryParams.status" @change="handleQuery" :list="tabs" key-label="name" key-count="num" key-value="type"></searchTabs>
                     </div>
                     <el-button type="primary" @click="router.push({ path: 'lmmeetingadd' })">新增会议</el-button>
                 </div>
                 <div class="flex1 ov-hd">
                     <vxe-table :loading="loading" border :data="dataList" min-height="0" max-height="100%">
                         <vxe-column title="序号" align="center" type="seq" width="50" />
-                        <vxe-column field="trainingName" title="会议名称" :formatter="colNoData" min-width="150" />
-                        <vxe-column field="trainingTime" min-width="130" title="培训时间">
+                        <vxe-column field="trainingName" title="会议名称" :formatter="colNoData" min-width="150" class-name="f-w-5" />
+                        <vxe-column field="trainingTime" min-width="130" title="会议时间" class-name="f-w-5">
                             <template #default="{ row }">{{ row.trainingStart }}~{{ row.trainingEnd }}</template>
                         </vxe-column>
-                        <vxe-column field="signupsTime" min-width="130" title="报名时间">
+                        <vxe-column field="signupsTime" min-width="130" title="报名时间" class-name="f-w-5">
                             <template #default="{ row }">{{ row.signupStart }}~{{ row.signupEnd }}</template>
                         </vxe-column>
-                        <vxe-column field="joinType" title="培训方式" width="80">
+                        <vxe-column field="joinType" title="会议方式" width="80">
                             <template #default="{ row }">
                                 {{ selectDictLabel(dm_training_join_type, row.joinType) }}
                             </template>
@@ -61,8 +55,9 @@
                                 {{ selectDictLabel(yes_no, row.certFlag) }}
                             </template>
                         </vxe-column>
-                        <vxe-column field="joinCount" title="报名人数" width="60" />
-                        <vxe-column field="signCount" title="签到人数" width="60" />
+                        <vxe-column field="joinCount" title="报名人数" width="60" class-name="f-w-5" />
+                        <vxe-column field="signCount" title="签到人数" width="60" class-name="f-w-5" />
+                        <vxe-column field="waitCount" title="待审核人数" width="60" class-name="f-w-5" />
                         <vxe-column field="certCount" title="领取证书人数" width="80" />
                         <vxe-column field="certFlag" title="会议状态" width="80">
                             <template #default="{ row }">
@@ -71,63 +66,42 @@
                         </vxe-column>
                         <vxe-column field="certFlag" title="签到二维码" width="90" align="center">
                             <template #default="{ row }">
-                                <el-button @click="trainingSignIn(row)"
-                                    :style="{ color: !['1', '0'].includes(row?.trainingStatus) ? '#999' : '#0079fe' }"
-                                    text :disabled="!['1', '0'].includes(row?.trainingStatus)">
-                                    查看
-                                </el-button>
+                                <el-button @click="trainingSignIn(row)" :style="{ color: !['1', '0'].includes(row?.trainingStatus) ? '#999' : '#0079fe' }" text :disabled="!['1', '0'].includes(row?.trainingStatus)">查看</el-button>
                             </template>
                         </vxe-column>
-                        <vxe-column title="临时报名通道" align="center" field="createByName" width="120"
-                            :formatter="colNoData">
+                        <vxe-column title="临时报名通道" align="center" field="createByName" width="120" :formatter="colNoData">
                             <template #default="{ row }">
-                                <el-popconfirm confirm-button-text="确认" cancel-button-text="取消" title="通过临时报名通道报名将不受时间限制,是否确认打开?"
-                                    :disabled="row.trainingStatus == '2'" @confirm="confirmEvent(row)"
-                                    @cancel="cancelEvent">
+                                <el-popconfirm confirm-button-text="确认" cancel-button-text="取消" title="通过临时报名通道报名将不受时间限制,是否确认打开?" :disabled="row.trainingStatus == '2'" @confirm="confirmEvent(row)" @cancel="cancelEvent">
                                     <template #reference>
-                                        <el-switch v-model="row.tempStatus" :loading="loading1" active-value="1"
-                                            inactive-value="0" :before-change="beforeChange1"
-                                            :disabled="row.trainingStatus == '2'" />
+                                        <el-switch :model-value="row.trainingStatus == '2' ? '0' : row.tempStatus" @update:model-value="row.trainingStatus != '2' ? row.tempStatus = $event : null" :loading="loading1" active-value="1" inactive-value="0" :before-change="beforeChange1" :disabled="row.trainingStatus == '2'" />
                                     </template>
                                 </el-popconfirm>
-                                <el-button v-if="row.tempStatus == '1'" type="primary" text @click="temporary(row)"
-                                    :disabled="row.trainingStatus == '2'">
-                                    查看
-                                </el-button>
+                                <el-button v-if="row.tempStatus == '1' && row.trainingStatus !== '2'" type="primary" text @click="temporary(row)" :disabled="row.trainingStatus == '2'">查看</el-button>
                             </template>
                         </vxe-column>
-                        <vxe-column title=" 创建人" align="center" field="createByName" width="70"
-                            :formatter="colNoData" />
+                        <vxe-column title=" 创建人" align="center" field="createByName" width="70" :formatter="colNoData" />
                         <vxe-column title="创建时间" align="center" field="createTime" width="160" :formatter="colNoData" />
                         <vxe-column title="操作" width="240" fixed="right">
                             <template #default="{ row }">
-                                <el-button v-if="['3'].includes(row?.trainingStatus)" type="primary" text
-                                    @click="trainingOn(row)">上架</el-button>
+                                <el-button v-if="['3'].includes(row?.trainingStatus)" type="primary" text @click="trainingOn(row)">上架</el-button>
                                 <span></span>
-                                <el-button v-if="!['3'].includes(row?.trainingStatus)" type="danger" text
-                                    @click="trainingOff(row)">下架</el-button>
+                                <el-button v-if="!['3'].includes(row?.trainingStatus)" type="danger" text @click="trainingOff(row)">下架</el-button>
                                 <span></span>
-                                <el-button v-if="['3'].includes(row?.trainingStatus)" type="primary"
-                                    @click="editRow(row)" text>编辑</el-button>
+                                <el-button v-if="['3'].includes(row?.trainingStatus)" type="primary" @click="editRow(row)" text>编辑</el-button>
                                 <span></span>
-                                <el-button @click="router.push({ path: 'lmmeetingdetail', query: { id: row?.id } })"
-                                    style="color: #0079fe;" text>人员管理及详情</el-button>
+                                <el-button @click="router.push({ path: 'lmmeetingdetail', query: { id: row?.id } })" style="color: #0079fe;" text>人员管理及详情</el-button>
                                 <span></span>
                                 <el-button text type="danger" @click="deleteRow(row)">删除</el-button>
                             </template>
                         </vxe-column>
                     </vxe-table>
                 </div>
-                <pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
-                    @pagination="getList" />
+                <pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
             </div>
         </div>
     </div>
-    <SignInCode v-if="showSignIn" v-model:show="showSignIn" :info="rowInfo" :dict="{ dm_training_join_type }">
-    </SignInCode>
-    <TemporaryRegistration v-if="showTemporary" v-model:show="showTemporary" :info="temporaryRegistration"
-        :dict="{ dm_training_join_type }">
-    </TemporaryRegistration>
+    <SignInCode v-if="showSignIn" v-model:show="showSignIn" :info="rowInfo" :dict="{ dm_training_join_type }"></SignInCode>
+    <TemporaryRegistration v-if="showTemporary" v-model:show="showTemporary" :info="temporaryRegistration" :dict="{ dm_training_join_type }"></TemporaryRegistration>
 </template>
 
 <script setup name="meeting" lang="ts">
@@ -182,6 +156,7 @@ const offOrNoTemps = async (row) => {
     })
 }
 
+
 const confirmEvent = (row) => {
     if (resolvePromise) {
         loading1.value = false;
@@ -277,4 +252,4 @@ onMounted(() => {
     getMeetingCount();
     getList();
 });
-</script>
+</script>

+ 1 - 1
src/views/training/models/meeting-custom-preview.vue

@@ -99,7 +99,7 @@
         </template>
         <template v-if="field.type === '3'">
             <div class="pb-5 f-w-6 f-s-16 c-#606266">出生日期</div>
-            <el-time-select v-if="field.label == '出生日期'" style="width: 340px" start="08:30" step="00:15" end="18:30" placeholder="请选择出生日期" />
+            <el-time-select v-if="field.label == '出生日期'" style="width: 340px" start="08:30" step="00:15" end="18:30" placeholder="请输入" />
         </template>
         <template v-if="field.type === '6' || field.type === '8' || field.type === '9'">
             <div prop="label">

+ 1 - 1
src/views/training/models/meeting-custom.vue

@@ -112,7 +112,7 @@
             </template>
             <template v-if="field.type === '3'">
                 <div class="pb-5 f-w-6 f-s-16">出生日期</div>
-                <el-time-select v-if="field.label == '出生日期'" style="width: 340px" start="08:30" step="00:15" end="18:30" placeholder="请输入" :disabled="true" />
+                <el-time-select v-if="field.label == '出生日期'" style="width: 340px;pointer-events: none " start="08:30" step="00:15" end="18:30" placeholder="请输入" />
             </template>
             <template v-if="field.type === '6' || field.type === '8' || field.type === '9'">
                 <el-form-item prop="label">

+ 61 - 15
src/views/training/models/meeting-detail-attend.vue

@@ -94,7 +94,12 @@
             </vxe-column>
             <vxe-column v-if="form?.conditions?.totalCheck == '1'" title="审核状态" min-width="100" fixed="right">
                 <template #default="{ row }">
-                    <DictTag :options="cpy_res_status" :value="row?.res"></DictTag>
+                    <div class="d-flex a-c">
+                        <DictTag :options="cpy_res_status" :value="row?.res"></DictTag>
+                        <el-tooltip class="box-item" effect="dark" :content="row?.msg" placement="top">
+                            <el-icon v-show="row?.res == '2'"><QuestionFilled /></el-icon>
+                        </el-tooltip>
+                    </div>
                 </template>
             </vxe-column>
             <vxe-column v-if="form?.conditions?.totalCheck == '1'" title="操作" width="250" align="center" fixed="right">
@@ -107,19 +112,28 @@
         <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
     </div>
     <el-dialog v-model="dialogVisible" title="审核信息" width="500" center>
-        <span class="f-s-16 mb-15">请填写审核原因:</span>
-        <el-input v-model="dialoginput" type="textarea" :rows="4"></el-input>
+        <el-form ref="formRef" :model="fromvalue" :rules="rules" label-width="80px">
+            <el-form-item label="审核结果" prop="res">
+                <el-radio-group v-model="fromvalue.res">
+                    <el-radio value="1" border>通过</el-radio>
+                    <el-radio value="2" border :class="{'reject-radio': fromvalue.res === '2'}">不通过</el-radio>
+                </el-radio-group>
+            </el-form-item>
+            <el-form-item label="理由" prop="msg" :rules="fromvalue.res === '2' ? rules.msgRequired : rules.msgOptional">
+                <el-input v-model="fromvalue.msg" type="textarea" :rows="4" placeholder="请填写不通过的理由" maxlength="50" show-word-limit/>
+            </el-form-item>
+        </el-form>
         <template #footer>
             <div class="dialog-footer">
-                <el-button type="primary" @click="signupApprovals('1')">通过</el-button>
-                <el-button type="danger" @click="signupApprovals('2')">不通过</el-button>
+                <el-button @click="dialogVisible = false">取消</el-button>
+                <el-button type="primary" @click="signupApprovals()">确认</el-button>
             </div>
         </template>
     </el-dialog>
     <registrationInfo v-if="showTemporary" v-model:show="showTemporary" :info="temporaryRegistration"></registrationInfo>
 </template>
 <script setup name="MeetingDetailInfo" lang="ts">
-import { ref, onMounted } from 'vue';
+import { ref, onMounted,reactive } from 'vue';
 import { signupCount, trainingMembers, signupApproval, exportTrainingMembers } from '@/api/training';
 import { searchTabs } from '@/views/models';
 import { colNoData } from '@/utils/noData';
@@ -134,17 +148,34 @@ const props = defineProps({
         default: () => ({})
     }
 });
+
+const rules = reactive({
+  res: [
+    { required: true, message: '请选择审核结果', trigger: 'blur' }
+  ],
+  msgRequired: [ // For "不通过" (value="2")
+    { required: true, message: '请填写不通过的理由', trigger: 'blur' }
+  ],
+  msgOptional: [ // For "通过" (value="1")
+    { required: false, trigger: 'blur' }
+  ]
+})
 const showTemporary = ref(false);
 const dialogVisible = ref(false);
-const dialoginput = ref();
-const currentRow = ref();
 const temporaryRegistration = ref();
+const fromvalue = ref({
+    targetId: '',
+        res: '',
+        msg: ''
+})
 const checkRegostrationInfo = (row) => {
     temporaryRegistration.value = row;
     showTemporary.value = true;
 };
 const openDialog = (row) => {
-    currentRow.value = row; // 保存当前行数据
+    fromvalue.value.targetId = row.id; // 保存当前行数据
+    fromvalue.value.res = ''
+    fromvalue.value.msg = ''
     dialogVisible.value = true;
 };
 const query = useRoute().query;
@@ -158,6 +189,7 @@ const loading = ref(false);
 const total = ref(0);
 const list = ref<any>([]);
 const tabs = ref([]);
+const formRef = ref()
 const getExpertPersonCount = async () => {
     const res = await signupCount(query?.id);
     if (res?.code === 200) {
@@ -172,18 +204,17 @@ const getList = async () => {
     total.value = res.total;
     loading.value = false;
 };
-const signupApprovals = async (type: string) => {
-    const res = await signupApproval({
-        targetId: currentRow.value.id,
-        res: type,
-        msg: dialoginput.value
-    });
+const signupApprovals = async () => {
+    console.log(fromvalue.value);
+    await formRef.value.validate()
+    const res = await signupApproval(fromvalue.value);
     dialogVisible.value = false;
     handleQuery();
 };
 const handleQuery = () => {
     queryParams.value.pageNum = 1;
     getList();
+    getExpertPersonCount()
 };
 const queryFormRef = ref<ElFormInstance>();
 const resetQuery = () => {
@@ -224,4 +255,19 @@ onMounted(() => {
 .border-botttom {
     border-bottom: 1px solid #d7d7d7;
 }
+.reject-radio :deep(.el-radio__label) {
+  color: #F56C6C;
+}
+
+.reject-radio :deep(.el-radio__inner) {
+  border-color: #F56C6C;
+  background: #F56C6C;
+}
+
+.reject-radio :deep(.el-radio__border) {
+  border-color: #F56C6C;
+}
+ :deep(.reject-radio.el-radio.is-bordered.is-checked){
+    border-color: #F56C6C !important;
+}
 </style>

+ 4 - 0
src/views/training/models/meeting-detail-info.vue

@@ -119,6 +119,10 @@
                             <meetingCustomPreview :field="field" style="pointer-events: none" v-if="field" />
                         </div>
                     </template>
+                    <div class="pd-15 border1 c-#D7D7D7 d-flex j-sb">
+                        <span class="c-#606266 f-s-16 f-w-6">备注</span>
+                        <span>请输入</span>
+                    </div>
                 </div>
             </div>
         </div>

+ 5 - 1
src/views/training/models/meeting-editors.vue

@@ -212,7 +212,7 @@
                     </div>
                     <template v-for="(item, index) in fixedField" :key="index">
                         <div class="pd-15 border1 c-#D7D7D7 d-flex j-sb">
-                            <span>{{ item.label }}</span>
+                            <span class="c-#606266 f-s-16 f-w-6">{{ item.label }}</span>
                             <span>(固定字段,不可编辑)</span>
                         </div>
                     </template>
@@ -224,6 +224,10 @@
                             </div>
                         </template>
                     </VueDraggable>
+                    <div class="pd-15 border1 c-#D7D7D7 d-flex j-sb">
+                        <span class="c-#606266 f-s-16 f-w-6">备注</span>
+                        <span>(固定字段,不可编辑)</span>
+                    </div>
                 </div>
             </div>
         </div>

+ 13 - 17
src/views/training/models/registration-info.vue

@@ -1,24 +1,22 @@
 <template>
-    <vxe-modal v-model="dialogVisible" :title="title" show-zoom resize show-footer destroy-on-close transfer
-        @hide="close" :width="width" :z-index="1002">
+    <vxe-modal v-model="dialogVisible" :title="title" show-zoom resize show-footer destroy-on-close transfer @hide="close" :width="width" :z-index="1002">
         <template #default>
             <div>
                 <div v-if="info" ref="codeImgRef" style="width: 400px; margin: 0 auto;">
                     <div class="mb-6 f-w-6 f-s-16 c-333">报名信息</div>
                     <div class="mb-6">企业名称:{{ info?.company || '-' }}</div>
                     <div class="mb-6">姓名:{{ info?.name || '-' }}</div>
-                    <div class="mb-6">职务{{ info?.position || '-' }}</div>
+                    <div class="mb-6">职务{{ info?.position || '-' }}</div>
                     <div class="mb-6">联系电话:{{ info?.contact || '-' }}</div>
-                    <div v-for="item, index in info.questionAnswer" :key="index" class="d-flex"
-                        :style="['6', '8', '9', '10'].includes(item.type) ? { 'flex-direction': 'column' } : {}">
+                    <div v-for="item, index in info.questionAnswer" :key="index" class="d-flex" :style="['6', '8', '9', '10'].includes(item.type) ? { 'flex-direction': 'column' } : {}">
                         <div class="d-flex mb-6">
-                            <div class=" f-s-14" v-if="item.type !== '10'">{{ item.label }}:</div>
+                            <div class=" f-s-14" v-if="item.type !== '10' && item.type !== '9'">{{ item.label }}:</div>
                         </div>
-                        <div class="ov-hd mb-6  f-s-14" v-if="!['5', '6', '8', '9', '10'].includes(item.type)">{{
-                            item?.value || '-' }}
+                        <div class="ov-hd mb-6  f-s-14" v-if="!['5', '6', '8', '9', '10'].includes(item.type)">
+                            {{item?.value || '-' }}
                         </div>
-                        <div class="ov-hd mb-6  f-s-14" v-if="item.type == '5'">{{
-                            item?.value.join(',') || '-' }}
+                        <div class="ov-hd mb-6  f-s-14" v-if="item.type == '5'">
+                            {{item?.value.join(',') || '-' }}
                         </div>
                         <div class="ov-hd mb-6  f-s-14" v-if="item.type == '6'">
                             <FileLook v-model="item.value" :span="24"></FileLook>
@@ -30,22 +28,20 @@
                                 </div>
                             </template>
                         </div>
-                        <div class="ov-hd mb-6  f-s-14 pt-10 pb-10 d-flex flex-wrap" v-if="item.type == '9'">
+                        <!-- <div class="ov-hd mb-6  f-s-14 pt-10 pb-10 d-flex flex-wrap" v-if="item.type == '9'">
                             <template v-for="(items, index) in item.defValue.split(',')" :key="index">
                                 <div class="mr-10 mb-10">
                                     <ImagePreview :src="items" :width="100" :height="100"></ImagePreview>
                                 </div>
                             </template>
-                        </div>
-                        <div class="ov-hd mb-6  f-s-14 pt-10 pb-10" v-if="item.type == '10'">
+                        </div> -->
+                        <!-- <div class="ov-hd mb-6  f-s-14 pt-10 pb-10" v-if="item.type == '10'">
                             {{ item?.defValue }}
-                        </div>
+                        </div> -->
                     </div>
-
                 </div>
             </div>
-            <div class="d-flex j-c">
-            </div>
+            <div class="d-flex j-c"></div>
         </template>
     </vxe-modal>
 </template>