nahida 1 год назад
Родитель
Сommit
6c6dc12817

+ 1 - 0
package.json

@@ -22,6 +22,7 @@
     "axios": "0.24.0",
     "bmap": "^1.0.1",
     "bmapgl": "^1.0.0",
+    "crypto-js": "^4.2.0",
     "echarts": "5.2.2",
     "element-plus": "^2.0.1",
     "file-saver": "2.0.5",

+ 8 - 0
pnpm-lock.yaml

@@ -29,6 +29,9 @@ importers:
       bmapgl:
         specifier: ^1.0.0
         version: 1.0.0
+      crypto-js:
+        specifier: ^4.2.0
+        version: 4.2.0
       echarts:
         specifier: 5.2.2
         version: 5.2.2
@@ -793,6 +796,9 @@ packages:
   crypto-browserify@3.3.0:
     resolution: {integrity: sha512-9n5nGl6D8zb29Ui8Ji8pVdUIE3RUe6A9zQf2iLPjFKftnkkkJBCGb7TkYAFNjt9nfsvZTLL52CwxzS9Tw7Bujw==}
 
+  crypto-js@4.2.0:
+    resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
+
   css-select@4.3.0:
     resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
 
@@ -3723,6 +3729,8 @@ snapshots:
       ripemd160: 0.2.0
       sha.js: 2.2.6
 
+  crypto-js@4.2.0: {}
+
   css-select@4.3.0:
     dependencies:
       boolbase: 1.0.0

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

@@ -12,7 +12,7 @@
         <el-dropdown @command="handleCommand" class="right-menu-item hover-effect" trigger="click">
           <div class="avatar-wrapper">
             <div class="image-slot">
-              {{ getters.name }}
+              {{ getters.userInfo.nickName }}
             </div>
             <el-icon style="top:auto"><caret-bottom /></el-icon>
           </div>

+ 1 - 0
src/main.js

@@ -69,6 +69,7 @@ app.use(store)
 app.use(plugins)
 app.use(elementIcons)
 
+
 app.component('svg-icon', SvgIcon)
 
 directive(app)

+ 3 - 1
src/store/modules/user.js

@@ -1,6 +1,8 @@
 import { login, logout, getInfo } from '@/api/login'
 import { getToken, setToken, removeToken } from '@/utils/auth'
 import defAva from '@/assets/logo/logo.ico'
+import {encryptAES} from "@/utils/cryptoAES";
+
 
 const user = {
   state: {
@@ -41,7 +43,7 @@ const user = {
     // 登录
     Login({ commit }, userInfo) {
       const username = userInfo.username.trim()
-      const password = userInfo.password
+      const password = encryptAES(userInfo.password)
       const code = userInfo.code
       const uuid = userInfo.uuid
       return new Promise((resolve, reject) => {

+ 10 - 0
src/utils/cryptoAES.js

@@ -0,0 +1,10 @@
+import cryptoJs from "crypto-js";
+const key = '4a2c2e36-1ddc-49'
+export function encryptAES(data) {
+    var encrypt = cryptoJs.AES.encrypt(data, cryptoJs.enc.Utf8.parse(key), {
+        iv: cryptoJs.enc.Utf8.parse(key),
+        mode: cryptoJs.mode.CBC,
+        padding: cryptoJs.pad.Pkcs7
+    }).toString();
+    return encrypt;
+}

+ 266 - 0
src/views/CFMonitoring/rzsq/index.vue

@@ -0,0 +1,266 @@
+<template>
+  <div class="financing-applications">
+    <!-- 搜索板块 -->
+    <el-row :gutter="20">
+      <el-col style="display:flex" :span="20" :xs="24">
+        <el-form :model="searchCondition" :inline="true">
+          <el-form-item label="放款机构名称" prop="tableName">
+            <el-input
+                style="max-width: 600px"
+                placeholder="请输入业务名称"
+                class="input-with-select"
+                :clearable="true"
+            >
+            </el-input>
+          </el-form-item>
+          <el-form-item label="状态" prop="tableName">
+            <el-input
+                style="max-width: 600px"
+                placeholder="请输入业务名称"
+                class="input-with-select"
+                :clearable="true"
+            >
+            </el-input>
+          </el-form-item>
+<!--          <el-form-item>-->
+<!--            <el-button type="primary" icon="Search" @click="handleSearch">搜索</el-button>-->
+<!--            <el-button icon="Refresh" @click="handleReset">重置</el-button>-->
+<!--          </el-form-item>-->
+        </el-form>
+      </el-col>
+    </el-row>
+    <el-row :gutter="20">
+      <el-col :span="8" v-for="(application, index) in applications" :key="index">
+        <el-card class="financing-card" shadow="hover">
+          <div class="card-header">
+            <h3>{{ application.enterpriseName }}</h3>
+            <div class="actions">
+              <el-button size="small" type="primary" @click="handleEdit(application)">编辑</el-button>
+              <el-button size="small" type="danger" @click="handleDelete(application)">删除</el-button>
+            </div>
+          </div>
+          <div class="card-content">
+            <div class="card-item">
+              <span class="label">企业统一社会信用编码:</span>
+              <span class="value">{{ application.unifiedSocialCreditCode }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">企业名称:</span>
+              <span class="value">{{ application.enterpriseName }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">联系人:</span>
+              <span class="value">{{ application.contactPerson }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">联系方式:</span>
+              <span class="value">{{ application.contactMethod }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">放款机构代码:</span>
+              <span class="value">{{ application.lendingInstitutionCode }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">放款机构名称:</span>
+              <span class="value">{{ application.lendingInstitutionName }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">融资需求编码:</span>
+              <span class="value">{{ application.financingDemandCode }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">需求金额:</span>
+              <span class="value">{{ application.requiredAmount }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">实际放款金额:</span>
+              <span class="value">{{ application.actualLendingAmount }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">状态:</span>
+              <el-tag :type="getStatusType(application.status)">
+                {{ formatStatus(application.status) }}
+              </el-tag>
+            </div>
+            <div class="card-item">
+              <span class="label">放款时间:</span>
+              <span class="value">{{ application.lendingTime ? application.lendingTime.toLocaleString() : '-' }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">需求描述:</span>
+              <span class="value">{{ application.demandDescription }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">备注(未放款原因):</span>
+              <span class="value">{{ application.remarkUnlendingReason }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">创建时间:</span>
+              <span class="value">{{ application.createTime ? application.createTime.toLocaleString() : '-' }}</span>
+            </div>
+            <div class="card-item">
+              <span class="label">更新时间:</span>
+              <span class="value">{{ application.updateTime ? application.updateTime.toLocaleString() : '-' }}</span>
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <el-pagination
+        background
+        layout="prev, pager, next"
+        :total="total"
+        :page-size="pageSize"
+        :current-page="currentPage"
+        @current-change="handlePageChange"
+    ></el-pagination>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+import { ElMessage } from 'element-plus';
+
+// 假数据
+const applications = ref([
+  {
+    id: 1,
+    unifiedSocialCreditCode: '913101011234567890',
+    enterpriseName: '阿里巴巴集团',
+    contactPerson: '张三',
+    contactMethod: '13800138000',
+    lendingInstitutionCode: '001',
+    lendingInstitutionName: '工商银行',
+    financingDemandCode: 'FD001',
+    requiredAmount: 5000000.00,
+    actualLendingAmount: 4500000.00,
+    status: 2,
+    lendingTime: new Date(),
+    demandDescription: '扩大生产规模',
+    remarkUnlendingReason: '',
+    createTime: new Date(),
+    updateTime: new Date()
+  },
+  {
+    id: 2,
+    unifiedSocialCreditCode: '913101011234567891',
+    enterpriseName: '腾讯公司',
+    contactPerson: '李四',
+    contactMethod: '13900139000',
+    lendingInstitutionCode: '002',
+    lendingInstitutionName: '建设银行',
+    financingDemandCode: 'FD002',
+    requiredAmount: 3000000.00,
+    actualLendingAmount: 2500000.00,
+    status: 3,
+    lendingTime: null,
+    demandDescription: '研发投入',
+    remarkUnlendingReason: '资料不全',
+    createTime: new Date(),
+    updateTime: new Date()
+  },
+  {
+    id: 3,
+    unifiedSocialCreditCode: '913101011234567892',
+    enterpriseName: '百度公司',
+    contactPerson: '王五',
+    contactMethod: '13700137000',
+    lendingInstitutionCode: '003',
+    lendingInstitutionName: '农业银行',
+    financingDemandCode: 'FD003',
+    requiredAmount: 4000000.00,
+    actualLendingAmount: 3500000.00,
+    status: 2,
+    lendingTime: new Date(),
+    demandDescription: '市场拓展',
+    remarkUnlendingReason: '',
+    createTime: new Date(),
+    updateTime: new Date()
+  }
+]);
+
+const total = ref(applications.value.length);
+const pageSize = ref(10);
+const currentPage = ref(1);
+
+const handleEdit = (application) => {
+  console.log('Editing application:', application);
+  // 这里可以添加编辑逻辑
+};
+
+const handleDelete = (application) => {
+  console.log('Deleting application:', application);
+  // 这里可以添加删除逻辑
+};
+
+const handlePageChange = (newPage) => {
+  currentPage.value = newPage;
+  // 这里可以添加分页逻辑
+};
+
+const formatStatus = (status) => {
+  switch (status) {
+    case 0:
+      return '待发布';
+    case 1:
+      return '待审核';
+    case 2:
+      return '已放款';
+    case 3:
+      return '未放款';
+    case 4:
+      return '已撤销';
+    default:
+      return '未知状态';
+  }
+};
+
+const getStatusType = (status) => {
+  switch (status) {
+    case 0:
+      return 'warning';
+    case 1:
+      return 'warning';
+    case 2:
+      return 'success';
+    case 3:
+      return 'danger';
+    case 4:
+      return 'info';
+    default:
+      return 'default';
+  }
+};
+</script>
+
+<style scoped>
+.financing-applications {
+  margin: 20px;
+}
+
+.financing-card {
+  margin-bottom: 20px;
+}
+
+.card-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.card-item {
+  display: flex;
+  justify-content: space-between;
+  margin-bottom: 10px;
+}
+
+.label {
+  font-weight: bold;
+  width: 30%;
+}
+
+.value {
+  width: 70%;
+}
+</style>

+ 11 - 0
src/views/home/CompanyHome/index.vue

@@ -0,0 +1,11 @@
+<script setup>
+console.log(5415345335)
+</script>
+
+<template>
+  好想你
+</template>
+
+<style scoped lang="scss">
+
+</style>

+ 55 - 56
src/views/home/index.vue

@@ -1,66 +1,67 @@
 <template>
-  <div class="homeContainer">
-    <div class="title">守信企业</div>
-    <div class="carouselContainer">
-      <div>
-        <el-carousel :interval="5000" arrow="always" :height="'500px'">
-          <el-carousel-item>
-            <img src="@/assets/images/2222.jpg" style="width: 50vw;" />
-          </el-carousel-item>
-          <el-carousel-item>
-            <img src="@/assets/images/1111.jpg" style="width: 50vw;" />
-          </el-carousel-item>
-          <el-carousel-item>
-            <img src="@/assets/images/3333.jpg" style="width: 50vw;" />
-          </el-carousel-item>
-        </el-carousel>
-      </div>
+  <div>
+    <div v-if="store.getters.userInfo.dept.deptName == '企业注册' && store.getters.userInfo.deptId == 225">
+      <CompanyHome />
     </div>
-    <div class="listContainer" ref="listContainer" @mouseenter="handleMouseEnter" @mouseleave="handleMouseLeave" @wheel.prevent="handleWheel">
-      <div class="listContent" ref="listContent" :style="{ transform: 'translateY(' + moveValue + 'px)' }" >
-        <div class="lsitItem" v-for="(item, index) in homeList" :key="index" style="position: relative" @click="toDetail(item)">
-          <span style="position: absolute;left: 10px;">{{ index + 1 }}<span style="font-weight: bold">.</span></span>{{ item.enterpriseName }}
+    <div v-else class="homeContainer">
+      <div class="title">守信企业</div>
+      <div class="carouselContainer">
+        <div>
+          <el-carousel :interval="5000" arrow="always" :height="'500px'">
+            <el-carousel-item>
+              <img src="@/assets/images/2222.jpg" style="width: 50vw;" />
+            </el-carousel-item>
+            <el-carousel-item>
+              <img src="@/assets/images/1111.jpg" style="width: 50vw;" />
+            </el-carousel-item>
+            <el-carousel-item>
+              <img src="@/assets/images/3333.jpg" style="width: 50vw;" />
+            </el-carousel-item>
+          </el-carousel>
         </div>
       </div>
-    </div>
-    <div class="footerContianer">
-      <div class="block text-center" m="t-4">
-        <el-carousel trigger="click" height="230px">
-          <el-carousel-item>
-            <div style="display: flex;justify-content: space-around">
-              <div class="imgContainer" @click="toLink(1)">
-                <img src="@/assets/images/666.jpg" />
-                <div class="textContainer">企业评价等级</div>
-              </div>
-              <div class="imgContainer" @click="toLink(4)">
-                <img src="@/assets/images/888.jpg" />
-                <div class="textContainer">企业税收分析</div>
-              </div>
-              <div class="imgContainer" @click="toLink(3)">
-                <img src="@/assets/images/999.jpg" />
-                <div class="textContainer">产值产能分析</div>
-              </div>
-              <div class="imgContainer" @click="toLink(2)">
-                <img src="@/assets/images/777.jpg" />
-                <div class="textContainer">信用修复服务</div>
-              </div>
-              <div class="imgContainer" @click="toLink(5)">
-                <img src="@/assets/images/000.jpg" />
-                <div class="textContainer">可视化入口</div>
+      <div class="listContainer" ref="listContainer" @mouseenter="handleMouseEnter" @mouseleave="handleMouseLeave" @wheel.prevent="handleWheel">
+        <div class="listContent" ref="listContent" :style="{ transform: 'translateY(' + moveValue + 'px)' }" >
+          <div class="lsitItem" v-for="(item, index) in homeList" :key="index" style="position: relative" @click="toDetail(item)">
+            <span style="position: absolute;left: 10px;">{{ index + 1 }}<span style="font-weight: bold">.</span></span>{{ item.enterpriseName }}
+          </div>
+        </div>
+      </div>
+      <div class="footerContianer">
+        <div class="block text-center" m="t-4">
+          <el-carousel trigger="click" height="230px">
+            <el-carousel-item>
+              <div style="display: flex;justify-content: space-around">
+                <div class="imgContainer" @click="toLink(1)">
+                  <img src="@/assets/images/666.jpg" />
+                  <div class="textContainer">企业评价等级</div>
+                </div>
+                <div class="imgContainer" @click="toLink(4)">
+                  <img src="@/assets/images/888.jpg" />
+                  <div class="textContainer">企业税收分析</div>
+                </div>
+                <div class="imgContainer" @click="toLink(3)">
+                  <img src="@/assets/images/999.jpg" />
+                  <div class="textContainer">产值产能分析</div>
+                </div>
+                <div class="imgContainer" @click="toLink(2)">
+                  <img src="@/assets/images/777.jpg" />
+                  <div class="textContainer">信用修复服务</div>
+                </div>
+                <div class="imgContainer" @click="toLink(5)">
+                  <img src="@/assets/images/000.jpg" />
+                  <div class="textContainer">可视化入口</div>
+                </div>
               </div>
-            </div>
-          </el-carousel-item>
-        </el-carousel>
+            </el-carousel-item>
+          </el-carousel>
+        </div>
       </div>
     </div>
   </div>
 </template>
 
 <script setup>
-// import Cookies from 'js-cookie'
-
-// const imgUrl = new URL('../../assets/logo/logo.png', import.meta.url).href
-
 import { nextTick, onMounted, onUnmounted, watch } from "vue";
 import {getCreditScoreList, getHomeList} from "../../api/home/home";
 import {ElMessage, ElNotification} from "element-plus";
@@ -68,6 +69,7 @@ import {getListByPage} from "@/api/rkpz/rkpzxx";
 import {useStore} from "vuex";
 import MyNotifycation from './MyNotifycation/index'
 import {useRouter} from "vue-router";
+import CompanyHome from './CompanyHome'
 
 const router = useRouter()
 const store = useStore();
@@ -188,10 +190,7 @@ const getInventoryReview =async ()=>{
 const init = ()=>{
   getInventoryReview();
 }
-
-init();
-
-
+init()
 
 </script>
 

+ 1 - 1
src/views/login.vue

@@ -88,7 +88,7 @@
 	// 验证码开关
 	const captchaOnOff = ref(true)
 	// 注册开关
-	const register = ref(false)
+	const register = ref(true)
 	const redirect = ref(undefined)
 
 	function handleLogin() {

+ 52 - 14
src/views/register.vue

@@ -13,10 +13,10 @@
           type="text"
           size="large"
           auto-complete="off"
-          placeholder="账号"
+          placeholder="统一社会信用代码"
         >
           <template #prefix
-            ><svg-icon icon-class="user" class="el-input__icon input-icon"
+            ><span style="color: red">*</span><svg-icon icon-class="user" class="el-input__icon input-icon"
           /></template>
         </el-input>
       </el-form-item>
@@ -30,7 +30,7 @@
           @keyup.enter="handleRegister"
         >
           <template #prefix
-            ><svg-icon icon-class="password" class="el-input__icon input-icon"
+            ><span style="color: red">*</span><svg-icon icon-class="password" class="el-input__icon input-icon"
           /></template>
         </el-input>
       </el-form-item>
@@ -44,7 +44,33 @@
           @keyup.enter="handleRegister"
         >
           <template #prefix
-            ><svg-icon icon-class="password" class="el-input__icon input-icon"
+            ><span style="color: red">*</span><svg-icon icon-class="password" class="el-input__icon input-icon"
+          /></template>
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="email">
+        <el-input
+            v-model="registerForm.email"
+            size="large"
+            auto-complete="off"
+            placeholder="请输入邮箱"
+            @keyup.enter="handleRegister"
+        >
+          <template #prefix
+          ><svg-icon icon-class="password" class="el-input__icon input-icon"
+          /></template>
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="phonenumber">
+        <el-input
+            v-model="registerForm.phonenumber"
+            size="large"
+            auto-complete="off"
+            placeholder="请输入手机号"
+            @keyup.enter="handleRegister"
+        >
+          <template #prefix
+          ><svg-icon icon-class="password" class="el-input__icon input-icon"
           /></template>
         </el-input>
       </el-form-item>
@@ -58,7 +84,7 @@
           @keyup.enter="handleRegister"
         >
           <template #prefix
-            ><svg-icon icon-class="validCode" class="el-input__icon input-icon"
+            ><span style="color: red">*</span><svg-icon icon-class="validCode" class="el-input__icon input-icon"
           /></template>
         </el-input>
         <div class="register-code">
@@ -95,6 +121,7 @@
 <script setup>
 import { ElMessageBox } from 'element-plus'
 import { getCodeImg, register } from '@/api/login'
+import {encryptAES} from "@/utils/cryptoAES";
 
 const router = useRouter()
 const { proxy } = getCurrentInstance()
@@ -103,8 +130,13 @@ const registerForm = ref({
   username: '',
   password: '',
   confirmPassword: '',
+  email:'',
+  phonenumber:'',
   code: '',
-  uuid: ''
+  uuid: '',
+  userType:'1',
+  roleIds:[119],
+  deptId:225
 })
 
 const equalToPassword = (rule, value, callback) => {
@@ -117,12 +149,11 @@ const equalToPassword = (rule, value, callback) => {
 
 const registerRules = {
   username: [
-    { required: true, trigger: 'blur', message: '请输入您的账号' },
+    { required: true, trigger: 'blur', message: '请输入您的统一社会信用代码' },
     {
-      min: 2,
-      max: 20,
-      message: '用户账号长度必须介于 2 和 20 之间',
-      trigger: 'blur'
+      pattern: /^[A-Za-z0-9]{18}$/,
+      message: '统一社会信用代码必须为 18 位数字或大写字母',
+      trigger: ['blur', 'change']
     }
   ],
   password: [
@@ -138,8 +169,14 @@ const registerRules = {
     { required: true, trigger: 'blur', message: '请再次输入您的密码' },
     { required: true, validator: equalToPassword, trigger: 'blur' }
   ],
+  email: [
+    { type: 'email', message: '请输入有效的邮箱地址', trigger: ['blur', 'change'] }
+  ],
+  phonenumber: [
+    { pattern: /^1[3-9]\d{9}$/, message: '请输入有效的手机号码', trigger: ['blur', 'change'] }
+  ],
   code: [{ required: true, trigger: 'change', message: '请输入验证码' }]
-}
+};
 
 const codeUrl = ref('')
 const loading = ref(false)
@@ -149,9 +186,10 @@ function handleRegister() {
   proxy.$refs.registerRef.validate((valid) => {
     if (valid) {
       loading.value = true
-      register(registerForm.value)
+      const form = registerForm.value
+      register({...form,password:encryptAES(form.password),confirmPassword:encryptAES(form.confirmPassword)})
         .then((res) => {
-          const username = registerForm.value.username
+          const username = form.username
           ElMessageBox.alert(
             "<font color='red'>恭喜你,您的账号 " +
               username +