wxd há 1 mês atrás
pai
commit
55428e8e2f

+ 1 - 1
.env.development

@@ -8,4 +8,4 @@ VITE_APP_ENV = 'development'
 VITE_APP_BASE_API = '/dev-api'
 
 # 图片路径
-VITE_APP_IMAGURL = 'http://192.168.1.100:8088'
+VITE_APP_IMAGURL = 'http://192.168.1.50:8088'

+ 1 - 0
package.json

@@ -21,6 +21,7 @@
     "@vueuse/core": "10.6.1",
     "ant-design-vue": "^4.2.3",
     "axios": "0.27.2",
+    "dayjs": "^1.11.13",
     "echarts": "5.4.3",
     "element-plus": "2.4.3",
     "file-saver": "2.0.5",

+ 8 - 0
src/api/login.js

@@ -85,3 +85,11 @@ export function resetPassWord(data) {
     data,
   });
 }
+
+//公示公告
+export function getNotice() {
+  return request({
+    url: "/Notice/list",
+    method: "get",
+  });
+}

BIN
src/assets/images/profile.jpg


+ 355 - 158
src/components/AmatterClass/index.vue

@@ -22,19 +22,6 @@
           "
         >
           <div class="subheading">个人基本信息</div>
-          <el-form-item prop="photoPath" style="margin-bottom: 10px">
-            <el-upload
-              :class="{ isUpload: fileList.length }"
-              :action="uploadFileUrl"
-              v-model:file-list="fileList"
-              list-type="picture-card"
-              :headers="headers"
-              :on-success="handleUploadSuccess"
-              :on-remove="handleRemove"
-            >
-              <el-icon style="font-size: 50px"><Avatar /></el-icon>
-            </el-upload>
-          </el-form-item>
         </div>
 
         <div class="avater">
@@ -63,140 +50,180 @@
           </el-descriptions> -->
         </div>
 
-        <el-descriptions
-          width="200px"
-          class="margin-top"
-          style="margin-bottom: 30px; margin-top: 0px"
-          :column="4"
-          size="large"
-          border
-        >
-          <el-descriptions-item>
-            <template #label>
-              <div class="cell-item">中文名</div>
-              <span class="required">*</span>
-            </template>
-            <el-form-item prop="chineseName">
-              <el-input
-                placeholder="请输入中文名"
-                v-model="personDataForm.chineseName"
-              ></el-input>
-            </el-form-item>
-          </el-descriptions-item>
-          <el-descriptions-item>
-            <template #label>
-              <div class="cell-item">英文名</div>
-            </template>
-            <el-form-item>
-              <el-input
-                placeholder="请输入英文名"
-                v-model="personDataForm.englishName"
-              ></el-input>
-            </el-form-item>
-          </el-descriptions-item>
+        <div style="display: flex">
+          <el-descriptions
+            width="200px"
+            class="margin-top"
+            style="margin-bottom: 30px; margin-top: 0px; width: 90%"
+            :column="3"
+            size="large"
+            border
+          >
+            <el-descriptions-item>
+              <template #label>
+                <div class="cell-item">中文名</div>
+                <span class="required">*</span>
+              </template>
+              <el-form-item prop="chineseName">
+                <el-input
+                  placeholder="请输入中文名"
+                  v-model="personDataForm.chineseName"
+                ></el-input>
+              </el-form-item>
+            </el-descriptions-item>
+            <el-descriptions-item>
+              <template #label>
+                <div class="cell-item">英文名</div>
+              </template>
+              <el-form-item>
+                <el-input
+                  placeholder="请输入英文名"
+                  v-model="personDataForm.englishName"
+                ></el-input>
+              </el-form-item>
+            </el-descriptions-item>
 
-          <el-descriptions-item>
-            <template #label>
-              <div class="cell-item">性别</div>
-              <span class="required">*</span>
-            </template>
-            <el-form-item prop="gender">
-              <el-select
-                placeholder="请选择性别"
-                v-model="personDataForm.gender"
-              >
-                <el-option label="男" value="0"></el-option>
-                <el-option label="女" value="1"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-descriptions-item>
+            <el-descriptions-item>
+              <template #label>
+                <div class="cell-item">性别</div>
+                <span class="required">*</span>
+              </template>
+              <el-form-item prop="gender">
+                <el-select
+                  style="width: 100%"
+                  placeholder="请选择性别"
+                  v-model="personDataForm.gender"
+                >
+                  <el-option label="男" value="0"></el-option>
+                  <el-option label="女" value="1"></el-option>
+                </el-select>
+              </el-form-item>
+            </el-descriptions-item>
 
-          <el-descriptions-item>
-            <template #label>
-              <div class="cell-item">政治面貌</div>
-              <span class="required">*</span>
-            </template>
-            <el-form-item>
-              <el-select
-                v-model="personDataForm.politicsStatus"
-                placeholder="请选择您的政治面貌"
-              >
-                <el-option
-                  v-for="item of politics_status"
-                  :key="item.value"
-                  :value="item.value"
-                  :label="item.label"
+            <el-descriptions-item>
+              <template #label>
+                <div class="cell-item">政治面貌</div>
+                <span class="required">*</span>
+              </template>
+              <el-form-item>
+                <el-select
+                  style="width: 100%"
+                  v-model="personDataForm.politicsStatus"
+                  placeholder="请选择您的政治面貌"
                 >
-                </el-option>
-              </el-select>
-            </el-form-item>
-          </el-descriptions-item>
+                  <el-option
+                    v-for="item of politics_status"
+                    :key="item.value"
+                    :value="item.value"
+                    :label="item.label"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </el-descriptions-item>
 
-          <el-descriptions-item>
-            <template #label>
-              <div class="cell-item">民族</div>
-              <span class="required">*</span>
-            </template>
-            <el-form-item>
-              <el-select
-                v-model="personDataForm.minZu"
-                placeholder="请选择所属民族"
-              >
-                <el-option
-                  v-for="item of mz_data"
-                  :key="item.name"
-                  :label="item.name"
-                  :value="item.name"
-                ></el-option>
-              </el-select>
-            </el-form-item>
-          </el-descriptions-item>
+            <el-descriptions-item>
+              <template #label>
+                <div class="cell-item">民族</div>
+                <span class="required">*</span>
+              </template>
+              <el-form-item>
+                <el-select
+                  style="width: 100%"
+                  v-model="personDataForm.minZu"
+                  placeholder="请选择所属民族"
+                >
+                  <el-option
+                    v-for="item of mz_data"
+                    :key="item.name"
+                    :label="item.name"
+                    :value="item.name"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-descriptions-item>
 
-          <el-descriptions-item>
-            <template #label>
-              <div class="cell-item">出生日期</div>
-              <span class="required">*</span>
-            </template>
-            <el-form-item prop="chuShengDate">
-              <el-date-picker
-                v-model="personDataForm.chuShengDate"
-                type="date"
-                placeholder="请选择出生日期"
-                format="YYYY-MM-DD"
-                value-format="YYYY-MM-DD"
-              />
-            </el-form-item>
-          </el-descriptions-item>
+            <el-descriptions-item>
+              <template #label>
+                <div class="cell-item">出生日期</div>
+                <span class="required">*</span>
+              </template>
+              <el-form-item prop="chuShengDate">
+                <el-date-picker
+                  style="width: 100%"
+                  v-model="personDataForm.chuShengDate"
+                  type="date"
+                  placeholder="请选择出生日期"
+                  format="YYYY-MM-DD"
+                  value-format="YYYY-MM-DD"
+                />
+              </el-form-item>
+            </el-descriptions-item>
 
-          <el-descriptions-item>
-            <template #label>
-              <div class="cell-item">国籍/籍贯</div>
-            </template>
-            <el-form-item>
-              <el-input
-                v-model="personDataForm.jiGuan"
-                placeholder="请输入籍贯"
-              ></el-input>
-            </el-form-item>
-          </el-descriptions-item>
+            <el-descriptions-item>
+              <template #label>
+                <div class="cell-item">国籍/籍贯</div>
+              </template>
+              <el-form-item>
+                <el-input
+                  v-model="personDataForm.jiGuan"
+                  placeholder="请输入籍贯"
+                ></el-input>
+              </el-form-item>
+            </el-descriptions-item>
+
+            <el-descriptions-item>
+              <template #label>
+                <div class="cell-item">本市居住地</div>
+                <span class="required">*</span>
+              </template>
+              <el-form-item prop="juZhuDi">
+                <div style="display: flex; align-items: center; width: 100%">
+                  <div style="width: 273px">
+                    <el-select
+                      style="width: 100%"
+                      v-model="personDataForm.juZhuDiQu"
+                      placeholder="请选择区县"
+                    >
+                      <el-option
+                        v-for="item in rclk_dzqx"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      >
+                      </el-option>
+                    </el-select>
+                  </div>
+
+                  <div style="margin-left: 10px; width: 350px">
+                    <el-input
+                      v-model="personDataForm.juZhuDi"
+                      placeholder="请输入本市居住地"
+                    ></el-input>
+                  </div>
+                </div>
+              </el-form-item>
+            </el-descriptions-item>
+          </el-descriptions>
+          <el-form-item style="margin-left: 20px" prop="photoPath">
+            <el-upload
+              :class="{ isUpload: fileList.length }"
+              :action="uploadFileUrl"
+              v-model:file-list="fileList"
+              list-type="picture-card"
+              :headers="headers"
+              :on-success="handleUploadSuccess"
+              :on-remove="handleRemove"
+            >
+              <el-icon style="font-size: 50px"><Avatar /></el-icon>
+            </el-upload>
+          </el-form-item>
+        </div>
 
-          <el-descriptions-item>
-            <template #label>
-              <div class="cell-item">本市居住地</div>
-              <span class="required">*</span>
-            </template>
-            <el-form-item prop="juZhuDi">
-              <el-input
-                v-model="personDataForm.juZhuDi"
-                placeholder="请输入本市居住地"
-              ></el-input>
-            </el-form-item>
-          </el-descriptions-item>
-        </el-descriptions>
         <el-descriptions
           title="人才类别,证件类别"
           class="margin-top"
-          :column="4"
+          :column="3"
           size="large"
           border
           direction="horizontal"
@@ -208,6 +235,7 @@
             </template>
             <el-form-item prop="renCaiType">
               <el-select
+                style="width: 100%"
                 @change="handleChangeCardType"
                 v-model="personDataForm.renCaiType"
                 placeholder="请选择人才类别"
@@ -228,6 +256,7 @@
             </template>
             <el-form-item>
               <el-select
+                style="width: 100%"
                 v-model="personDataForm.renCaiChengHao"
                 placeholder="请选择人才称号"
               >
@@ -241,6 +270,22 @@
             </el-form-item>
           </el-descriptions-item>
 
+          <el-descriptions-item>
+            <template #label>
+              <div class="cell-item">取得日期</div>
+              <span class="required">*</span>
+            </template>
+            <el-form-item>
+              <el-date-picker
+                v-model="personDataForm.getDate"
+                style="width: 100%"
+                type="date"
+                placeholder="请选择取得日期"
+                format="YYYY-MM-DD"
+                value-format="YYYY-MM-DD"
+              />
+            </el-form-item>
+          </el-descriptions-item>
           <el-descriptions-item>
             <template #label>
               <div class="cell-item">证件类别</div>
@@ -248,6 +293,7 @@
             </template>
             <el-form-item prop="zhengJianType">
               <el-select
+                style="width: 100%"
                 v-model="personDataForm.zhengJianType"
                 placeholder="请选择证件类别"
               >
@@ -268,6 +314,7 @@
             </template>
             <el-form-item prop="idNum">
               <el-input
+                style="width: 288px"
                 v-model="personDataForm.idNum"
                 placeholder="请输入证件号码"
               ></el-input>
@@ -278,7 +325,6 @@
           title="毕业院校及学历专业"
           class="margin-top"
           :column="3"
-          style="width: 75%"
           size="large"
           border
         >
@@ -289,6 +335,7 @@
             </template>
             <el-form-item>
               <el-select
+                style="width: 100%"
                 v-model="personDataForm.xueLi"
                 placeholder="请输入学历学位"
               >
@@ -301,17 +348,58 @@
               </el-select>
             </el-form-item>
           </el-descriptions-item>
+
           <el-descriptions-item>
             <template #label>
               <div class="cell-item">全日制教育</div>
+              <span class="required">*</span>
             </template>
-            <el-form-item>
+            <el-form-item prop="school">
               <el-input
                 v-model="personDataForm.school"
                 placeholder="请输入教育经历"
               ></el-input>
             </el-form-item>
           </el-descriptions-item>
+
+          <el-descriptions-item>
+            <template #label>
+              <div class="cell-item">全日制教育专业</div>
+              <span class="required">*</span>
+            </template>
+            <div style="display: flex">
+              <el-form-item prop="specialty">
+                <el-input
+                  v-model="personDataForm.specialty"
+                  placeholder="专业"
+                ></el-input>
+              </el-form-item>
+              <el-form-item style="margin-left: 10px">
+                <el-checkbox
+                  :true-value="true"
+                  :false-value="false"
+                  v-model="personDataForm.isHaiwai"
+                  label="是否毕业"
+                >
+                  是否海外
+                </el-checkbox>
+              </el-form-item>
+            </div>
+          </el-descriptions-item>
+
+          <el-descriptions-item>
+            <template #label>
+              <div class="cell-item">毕业证书编号</div>
+              <span class="required">*</span>
+            </template>
+            <el-form-item>
+              <el-input
+                v-model="personDataForm.zhengShuNum"
+                placeholder="请输入毕业证书编号"
+              ></el-input>
+            </el-form-item>
+          </el-descriptions-item>
+
           <el-descriptions-item>
             <template #label>
               <div class="cell-item">在职教育</div>
@@ -319,10 +407,25 @@
             <el-form-item>
               <el-input
                 v-model="personDataForm.zaiZhiJiaoYu"
-                placeholder="请输入在职教育学校名称"
+                placeholder="学校"
               ></el-input>
             </el-form-item>
           </el-descriptions-item>
+
+          <el-descriptions-item>
+            <template #label>
+              <div class="cell-item">在职教育专业</div>
+            </template>
+            <div style="display: flex">
+              <el-form-item>
+                <el-input
+                  style="width: 288px"
+                  v-model="personDataForm.zaiZhiZhuanYe"
+                  placeholder="专业"
+                ></el-input>
+              </el-form-item>
+            </div>
+          </el-descriptions-item>
         </el-descriptions>
 
         <el-descriptions
@@ -330,7 +433,6 @@
           class="margin-top"
           :column="3"
           size="large"
-          style="width: 75%"
           border
         >
           <el-descriptions-item>
@@ -374,7 +476,6 @@
           class="margin-top"
           :column="3"
           size="large"
-          style="width: 75%"
           border
           direction="horizontal"
         >
@@ -408,6 +509,7 @@
             </template>
             <el-form-item prop="yjrcType">
               <el-select
+                style="width: 100%"
                 @change="handelChangeyjrcTypeRules"
                 placeholder="请选择引进人才类型"
                 v-model="personDataForm.yjrcType"
@@ -422,7 +524,12 @@
             </el-form-item>
           </el-descriptions-item>
 
-          <el-descriptions-item>
+          <el-descriptions-item
+            v-if="
+              personDataForm.yjrcType != 'gxyj' &&
+              personDataForm.yjrcType == 'rxyj'
+            "
+          >
             <template #label>
               <div class="cell-item">签约期限</div>
               <span v-if="personDataForm.yjrcType == 'rxyj'" class="required"
@@ -431,6 +538,7 @@
             </template>
             <el-form-item prop="yjrcQianyueDate" :rules="qyRules">
               <el-select
+                style="width: 288px"
                 v-model="personDataForm.yjrcQianyueDate"
                 placeholder="请输入签约期限"
               >
@@ -444,7 +552,13 @@
             </el-form-item>
           </el-descriptions-item>
 
-          <el-descriptions-item :span="0">
+          <el-descriptions-item
+            :span="1"
+            v-if="
+              personDataForm.yjrcType != 'gxyj' &&
+              personDataForm.yjrcType == 'zzpy'
+            "
+          >
             <template #label>
               <div class="cell-item">单位职务职称</div>
               <span v-if="personDataForm.yjrcType == 'zzpy'" class="required"
@@ -453,6 +567,7 @@
             </template>
             <el-form-item prop="zzpyZhiWu" :rules="zwRules">
               <el-input
+                style="width: 288px"
                 placeholder="请输入单位职务职称"
                 v-model="personDataForm.zzpyZhiWu"
               ></el-input>
@@ -465,7 +580,6 @@
           class="margin-top"
           :column="3"
           size="large"
-          style="width: 75%"
           border
           direction="horizontal"
         >
@@ -483,17 +597,24 @@
           </el-descriptions-item>
           <el-descriptions-item>
             <template #label>
-              <div class="cell-item">地址</div>
+              <div class="cell-item">单位性质</div>
               <span class="required">*</span>
             </template>
-            <el-form-item prop="yrdwAddress">
-              <el-input
-                v-model="personDataForm.yrdwAddress"
-                placeholder="请输入用人单位地址"
-              ></el-input>
+            <el-form-item prop="yrdwXingZhi">
+              <el-select
+                style="width: 100%"
+                v-model="personDataForm.yrdwXingZhi"
+                placeholder="请选择单位性质"
+              >
+                <el-option
+                  v-for="item of rclk_dwxz"
+                  :key="item.value"
+                  :value="item.value"
+                  :label="item.label"
+                ></el-option>
+              </el-select>
             </el-form-item>
           </el-descriptions-item>
-
           <el-descriptions-item>
             <template #label>
               <div class="cell-item">所属行业</div>
@@ -501,6 +622,7 @@
             </template>
             <el-form-item>
               <el-select
+                style="width: 100%"
                 v-model="personDataForm.yrdwIndustryInvolved"
                 placeholder="请输入所属行业"
               >
@@ -551,6 +673,35 @@
               ></el-input>
             </el-form-item>
           </el-descriptions-item>
+          <el-descriptions-item>
+            <template #label>
+              <div class="cell-item">地址</div>
+              <span class="required">*</span>
+            </template>
+            <el-form-item prop="yrdwAddress">
+              <div style="display: flex; align-items: center; width: 100%">
+                <el-select
+                  v-model="personDataForm.yrdwAddressArea"
+                  placeholder="请选择区县"
+                  style="width: 288px"
+                >
+                  <el-option
+                    v-for="item in rclk_dzqx"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  >
+                  </el-option>
+                </el-select>
+
+                <el-input
+                  style="width: 70%; margin-left: 20px"
+                  v-model="personDataForm.yrdwAddress"
+                  placeholder="请输入用人单位地址"
+                ></el-input>
+              </div>
+            </el-form-item>
+          </el-descriptions-item>
         </el-descriptions>
 
         <el-form-item label-width="140px" label="国内外学习工作经历">
@@ -589,6 +740,7 @@
   </div>
 </template>
 <script setup>
+import { useRoute } from "vue-router";
 import { getToken } from "@/utils/auth";
 import { computed, getCurrentInstance, watch } from "vue";
 import mz_data from "@/mzData";
@@ -602,7 +754,7 @@ import {
 import { ElMessage } from "element-plus";
 
 const { proxy } = getCurrentInstance();
-
+const route = useRoute();
 const baseImgUrl = import.meta.env.VITE_APP_IMAGURL;
 
 const {
@@ -612,13 +764,17 @@ const {
   xue_li,
   yrdw_industry_involved,
   yjrc_qianyue_date,
+  rclk_dwxz,
+  rclk_dzqx,
 } = proxy.useDict(
   "yjrc_type",
   "politics_status",
   "zheng_jian_type",
   "xue_li",
   "yrdw_industry_involved",
-  "yjrc_qianyue_date"
+  "yjrc_qianyue_date",
+  "rclk_dwxz",
+  "rclk_dzqx"
 );
 const personFormLoading = ref(false);
 const personFormRef = ref(null);
@@ -658,6 +814,13 @@ const personDataForm = reactive({
   jingLi: null, //国外学习工作经历
   huojiangCondition: null, //工作奖励和成果
   zzpyZhiWu: null, //单位职务职称
+  getDate: null, //取得日期
+  zhengShuNum: null, //毕业证书编号
+  juZhuDiQu: null,
+  specialty: null,
+  isHaiwai: null,
+  zaiZhiZhuanYe: null,
+  yrdwAddressArea: null,
 });
 
 const props = defineProps({
@@ -671,6 +834,34 @@ const props = defineProps({
 const emits = defineEmits("handleNextStep", "update:materialCalssId");
 
 const personDataFormRules = {
+  getDate: [
+    {
+      required: true,
+      message: "取得日期不能为空",
+      trigger: "blur",
+    },
+  ],
+  zhengShuNum: [
+    {
+      required: true,
+      message: "毕业证书编号不能为空",
+      trigger: "blur",
+    },
+  ],
+  school: [
+    {
+      required: true,
+      message: "全日制教育学校不能为空",
+      trigger: "blur",
+    },
+  ],
+  specialty: [
+    {
+      required: true,
+      message: "全日制教育专业不能为空",
+      trigger: "blur",
+    },
+  ],
   photoPath: [
     {
       required: true,
@@ -814,6 +1005,13 @@ const personDataFormRules = {
       trigger: "blur",
     },
   ],
+  yrdwXingZhi: [
+    {
+      required: true,
+      message: "单位性质不能为空",
+      trigger: "blur",
+    },
+  ],
 };
 const fileList = ref([]);
 const handleUploadSuccess = (file) => {
@@ -852,7 +1050,7 @@ const saveDraftBox = () => {
   }
   postDraftBox({
     ...personDataForm,
-    cardType: "A",
+    cardType: route.query.type,
     shenqingState: "cg",
     id: props.materialCalssId ?? null,
   }).then((res) => {
@@ -893,7 +1091,7 @@ const zwRules = computed(() =>
 //获取人才类别
 const handleGetlistByCardType = () => {
   getlistByCardType({
-    cardType: "A",
+    cardType: route.query.type,
     matterType: "F",
   }).then((res) => {
     listByCardType.value = res.data;
@@ -911,7 +1109,7 @@ const onsubmit = (formRef) => {
       personFormLoading.value = true;
       addCG({
         ...personDataForm,
-        cardType: "A",
+        cardType: route.query.type,
         shenqingState: "cg",
         id: props.materialCalssId ?? null,
       })
@@ -942,7 +1140,6 @@ if (props.materialCalssId) {
 //监听头像地址有变化更新图像列表回显
 watch(
   () => personDataForm.photoPath,
-
   (newVal) => {
     fileList.value = newVal
       ? [

+ 2 - 2
src/layout/components/Navbar.vue

@@ -39,9 +39,9 @@
         "
       >
         <el-dropdown>
-          <el-badge :hidden="!isHidden" class="item" is-dot>
+          <!-- <el-badge :hidden="!isHidden" class="item" is-dot>
             <svg-icon icon-class="xld" class="idClass" />
-          </el-badge>
+          </el-badge> -->
           <template #dropdown>
             <el-dropdown-menu>
               <el-dropdown-item v-for="item of logList" :key="item.id">

+ 9 - 7
src/router/userRoutes.js

@@ -12,9 +12,8 @@ export default [
         path: "/application",
         name: "application",
         unique_name: "application",
-
         component: () => import("@/views/application/talentApplication/index"),
-        meta: { title: "英才卡申请", icon: "dashboard" },
+        meta: { title: "英才卡申请", icon: "dashboard", affix: true },
       },
     ],
   },
@@ -103,11 +102,14 @@ export default [
           import("@/views/application/materialApplication/index"),
         hidden: true,
         meta: {
-          title: "修改密码",
-          icon: "",
-          noCache: false,
-          keepAlive: true,
-          unique_name: "materialApplication",
+          noCache: true,
+        },
+        beforeEnter: (to, from, next) => {
+          to.meta.title = to.query.type == "A" ? "英才A卡申请" : "英才B卡申请";
+          next();
+        },
+        beforeRouteLeave: (to, from, next) => {
+          next();
         },
       },
     ],

+ 2 - 1
src/views/application/materialApplication/index.vue

@@ -49,7 +49,8 @@ if (route.query.materialCalssId != undefined) {
 }
 
 const comList = {
-  0: route.query.type == "A" ? AmatterClass : BmatterClass,
+  // 0: route.query.type == "A" ? AmatterClass : BmatterClass,
+  0: AmatterClass,
   1: materialTable,
   2: FinishMatter,
 };

+ 1 - 1
src/views/application/talentApplication/index.vue

@@ -4,7 +4,7 @@
     <div class="image">
       <img
         @mouseover="handleChangeActiveContent('A')"
-        @click="handleMaterialApplication"
+        @click="handleMaterialApplication('A')"
         :src="aaImg"
         alt=""
       />

+ 201 - 92
src/views/login.vue

@@ -63,97 +63,113 @@
     </div>
 
     <div class="login-box" v-else>
-      <div class="left-icon">
-        <img :src="bnnerUrl" alt="" />
-      </div>
-      <el-form
-        ref="loginRef"
-        :model="loginForm"
-        :rules="loginRules"
-        class="login-form"
-      >
-        <h3 class="title">英才卡申请平台</h3>
-        <el-form-item prop="username">
-          <el-input
-            v-model="loginForm.username"
-            type="text"
-            size="large"
-            auto-complete="off"
-            placeholder="账号"
+      <div class="left-icon" style="width: 500px">
+        <div class="titleLog">公告公示</div>
+        <!--  <img :src="bnnerUrl" alt="" /> -->
+        <div class="message-list">
+          <div
+            class="message-list-title"
+            v-for="item in noticeList"
+            :key="item.id"
           >
-            <template #prefix
-              ><svg-icon icon-class="user" class="el-input__icon input-icon"
-            /></template>
-          </el-input>
-        </el-form-item>
-        <el-form-item prop="password">
-          <el-input
-            v-model="loginForm.password"
-            type="password"
-            size="large"
-            auto-complete="off"
-            placeholder="密码"
-            @keyup.enter="handleLogin"
-          >
-            <template #prefix
-              ><svg-icon
-                icon-class="password"
-                class="el-input__icon input-icon"
-            /></template>
-          </el-input>
-        </el-form-item>
-        <el-form-item prop="code" v-if="captchaEnabled">
-          <el-input
-            v-model="loginForm.code"
-            size="large"
-            auto-complete="off"
-            placeholder="验证码"
-            style="width: 63%"
-            @keyup.enter="handleLogin"
-          >
-            <template #prefix
-              ><svg-icon
-                icon-class="validCode"
-                class="el-input__icon input-icon"
-            /></template>
-          </el-input>
-          <div class="login-code">
-            <img :src="codeUrl" @click="getCode" class="login-code-img" />
+            <span class="blue-dot"></span>
+            <div class="title">{{ item.noticeTitle }}</div>
+            <div class="time">
+              {{ dayjs(item.createTime).format("MM-DD") }}
+            </div>
           </div>
-        </el-form-item>
-        <div class="password-state">
-          <el-checkbox
-            v-model="loginForm.rememberMe"
-            style="margin: 0px 0px 25px 0px"
-            >记住密码</el-checkbox
-          >
-          <p class="forget-password" @click="handleForgetPassword">
-            忘记密码?
-          </p>
         </div>
+      </div>
+      <div style="width: 400px">
+        <el-form
+          ref="loginRef"
+          :model="loginForm"
+          :rules="loginRules"
+          class="login-form"
+        >
+          <h3 class="title">英才卡申请平台</h3>
+          <el-form-item prop="username">
+            <el-input
+              v-model="loginForm.username"
+              type="text"
+              size="large"
+              auto-complete="off"
+              placeholder="账号"
+            >
+              <template #prefix
+                ><svg-icon icon-class="user" class="el-input__icon input-icon"
+              /></template>
+            </el-input>
+          </el-form-item>
+          <el-form-item prop="password">
+            <el-input
+              v-model="loginForm.password"
+              type="password"
+              size="large"
+              auto-complete="off"
+              placeholder="密码"
+              @keyup.enter="handleLogin"
+            >
+              <template #prefix
+                ><svg-icon
+                  icon-class="password"
+                  class="el-input__icon input-icon"
+              /></template>
+            </el-input>
+          </el-form-item>
+          <el-form-item prop="code" v-if="captchaEnabled">
+            <el-input
+              v-model="loginForm.code"
+              size="large"
+              auto-complete="off"
+              placeholder="验证码"
+              style="width: 63%"
+              @keyup.enter="handleLogin"
+            >
+              <template #prefix
+                ><svg-icon
+                  icon-class="validCode"
+                  class="el-input__icon input-icon"
+              /></template>
+            </el-input>
+            <div class="login-code">
+              <img :src="codeUrl" @click="getCode" class="login-code-img" />
+            </div>
+          </el-form-item>
+          <div class="password-state">
+            <el-checkbox
+              v-model="loginForm.rememberMe"
+              style="margin: 0px 0px 25px 0px"
+              >记住密码</el-checkbox
+            >
+            <p class="forget-password" @click="handleForgetPassword">
+              忘记密码?
+            </p>
+          </div>
 
-        <el-form-item style="width: 100%; margin-bottom: 0">
-          <el-button
-            :loading="loading"
-            size="large"
-            type="primary"
-            style="width: 100%"
-            round
-            @click.prevent="handleLogin"
-          >
-            <span v-if="!loading">登 录</span>
-            <span v-else>登 录 中...</span>
-          </el-button>
-          <div style="float: right" v-if="register"></div>
-        </el-form-item>
+          <el-form-item style="width: 100%; margin-bottom: 0">
+            <el-button
+              :loading="loading"
+              size="large"
+              type="primary"
+              style="width: 100%"
+              round
+              @click.prevent="handleLogin"
+            >
+              <span v-if="!loading">登 录</span>
+              <span v-else>登 录 中...</span>
+            </el-button>
+            <div style="float: right" v-if="register"></div>
+          </el-form-item>
 
-        <div class="register-password">
-          <p>没有账户?</p>
-          <p class="now">
-            <router-link :to="'/register'">立即注册</router-link>
-          </p>
-        </div>
-      </el-form>
+          <div class="register-password">
+            <p>没有账户?</p>
+            <p class="now">
+              <router-link :to="'/register'">立即注册</router-link>
+            </p>
+          </div>
+        </el-form>
+      </div>
     </div>
     <!--  底部  -->
     <div class="el-login-footer">
@@ -163,6 +179,7 @@
 </template>
 
 <script setup>
+import dayjs from "dayjs";
 import { getCodeImg } from "@/api/login";
 import Cookies from "js-cookie";
 import { encrypt, decrypt } from "@/utils/jsencrypt";
@@ -171,7 +188,7 @@ import bnnerUrl from "@/assets/images/login-banner.png?url";
 import { onUnmounted } from "vue";
 import { Eleme } from "@element-plus/icons-vue";
 import { ElNotification } from "element-plus";
-import { sendEmail } from "@/api/login";
+import { sendEmail, getNotice } from "@/api/login";
 
 const userStore = useUserStore();
 const route = useRoute();
@@ -217,7 +234,7 @@ const loginRules = {
   password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
   code: [{ required: true, trigger: "change", message: "请输入验证码" }],
 };
-
+const noticeList = ref([]);
 const isSend = ref(false);
 const loadingTime = ref(60);
 
@@ -332,6 +349,13 @@ function handleLogin() {
   });
 }
 
+//获取公告公示
+const getNoticeList = () => {
+  getNotice().then((res) => {
+    noticeList.value = res.rows;
+  });
+};
+
 function getCookie() {
   const username = Cookies.get("username");
   const password = Cookies.get("password");
@@ -345,9 +369,92 @@ function getCookie() {
 }
 getCode();
 getCookie();
+getNoticeList();
 </script>
 
 <style lang="scss" scoped>
+.titleLog {
+  font-size: 18px;
+  color: #333;
+  margin: 0;
+  text-align: center;
+  margin: 20px 0;
+  font-weight: bold;
+}
+.message-list-title:hover {
+  cursor: pointer;
+}
+.message-list-title:hover .title {
+  color: #5288f4;
+  text-decoration: underline;
+}
+.message-list-title:hover .time {
+}
+.message-list {
+  margin-top: 20px;
+  margin-left: 40px;
+}
+.message-list-title {
+  margin: 10px 0;
+  display: flex;
+  align-items: center;
+  position: relative;
+  height: 30px;
+  .blue-dot {
+    display: inline-block;
+    position: absolute;
+    left: 5px;
+    transform: translateY(-50%);
+    top: 50%;
+    width: 8px;
+    height: 8px;
+    background-color: #5288f4;
+    border-radius: 50%;
+    margin-right: 10px;
+  }
+
+  .title {
+    color: #333;
+    margin: 0;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    width: 75%;
+    font-size: 15px;
+    color: #333;
+  }
+}
+
+.message-list {
+  text-align: left;
+
+  .message-item {
+    margin-bottom: 15px;
+    padding: 10px;
+    background-color: #f5f7fa;
+    border-radius: 4px;
+
+    .message-title {
+      font-size: 16px;
+      font-weight: bold;
+      color: #333;
+      margin-bottom: 5px;
+    }
+
+    .message-content {
+      font-size: 14px;
+      color: #666;
+    }
+
+    .message-time {
+      font-size: 12px;
+      color: #999;
+      text-align: right;
+      margin-top: 5px;
+    }
+  }
+}
+
 .back-login {
   cursor: pointer;
   color: #5288f4 !important;
@@ -370,12 +477,14 @@ getCookie();
   transition: 0.3s;
 }
 .left-icon {
-  margin: auto;
-  padding: 60px 40px;
   border-right: 1px solid #cccccc5e;
   text-align: center;
-  flex: 0 0 58.333333%;
-  max-width: 58.333333%;
+  .time {
+    font-size: 13px;
+    color: #999;
+    margin-top: 3px;
+    margin-left: 50px;
+  }
 }
 .register-password {
   display: flex;

+ 2 - 2
vite.config.js

@@ -27,13 +27,13 @@ export default defineConfig(({ mode, command }) => {
     },
     // vite 相关配置
     server: {
-      port: 81,
+      port: 80,
       host: true,
       open: true,
       proxy: {
         // https://cn.vitejs.dev/config/#server-proxy
         "/dev-api": {
-          target: "http://192.168.1.100:8088",
+          target: "http://192.168.1.50:8088",
           changeOrigin: true,
           rewrite: (p) => p.replace(/^\/dev-api/, ""),
         },