使用oracle数据库做的数据上传系统前端
kongdeqiang
2026-03-21 4506560a9de9c54e5b41cdc46c3ca84bf234386e
fix: 修改前端
6个文件已修改
136 ■■■■ 已修改文件
src/api/user.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/MainLayout.vue 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Dashboard.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/data/Excel.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/User.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/user.js
@@ -58,3 +58,11 @@
    responseType: 'blob'
  })
}
export const changePassword = (data) => {
  return request({
    url: '/user/change-password',
    method: 'post',
    data
  })
}
src/layout/MainLayout.vue
@@ -2,7 +2,7 @@
  <el-container class="main-layout">
    <el-aside :width="isCollapse ? '64px' : '220px'" class="aside">
      <div class="logo">
        <span v-if="!isCollapse">数据管理系统</span>
        <span v-if="!isCollapse">数据录入系统</span>
        <span v-else>数据</span>
      </div>
      <el-menu
@@ -37,11 +37,11 @@
        <el-sub-menu index="data">
          <template #title>
            <el-icon><Upload /></el-icon>
            <span>数据导入管理</span>
            <span>数据管理</span>
          </template>
          <el-menu-item index="/data/excel">
            <el-icon><Document /></el-icon>
            <template #title>Excel上传</template>
            <template #title>单位数据上传</template>
          </el-menu-item>
        </el-sub-menu>
      </el-menu>
@@ -50,8 +50,8 @@
    <el-container>
      <el-header class="header">
        <div class="header-left">
          <el-icon
            class="collapse-btn"
          <el-icon
            class="collapse-btn"
            :size="20"
            @click="isCollapse = !isCollapse"
          >
@@ -68,6 +68,7 @@
            </span>
            <template #dropdown>
              <el-dropdown-menu>
                <el-dropdown-item command="editPassword">修改密码</el-dropdown-item>
                <el-dropdown-item command="logout">退出登录</el-dropdown-item>
              </el-dropdown-menu>
            </template>
@@ -79,6 +80,24 @@
        <router-view />
      </el-main>
    </el-container>
    <el-dialog v-model="passwordDialogVisible" title="修改密码" width="400px">
      <el-form ref="passwordFormRef" :model="passwordForm" :rules="passwordRules" label-width="80px">
        <el-form-item label="原密码" prop="oldPassword">
          <el-input v-model="passwordForm.oldPassword" type="password" placeholder="请输入原密码" show-password />
        </el-form-item>
        <el-form-item label="新密码" prop="newPassword">
          <el-input v-model="passwordForm.newPassword" type="password" placeholder="请输入新密码" show-password />
        </el-form-item>
        <el-form-item label="确认密码" prop="confirmPassword">
          <el-input v-model="passwordForm.confirmPassword" type="password" placeholder="请再次输入新密码" show-password />
        </el-form-item>
      </el-form>
      <template #footer>
        <el-button @click="passwordDialogVisible = false">取消</el-button>
        <el-button type="primary" @click="handlePasswordChange" :loading="passwordLoading">确定</el-button>
      </template>
    </el-dialog>
  </el-container>
</template>
@@ -86,12 +105,56 @@
import { ref, computed } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { useUserStore } from '@/stores/user'
import { changePassword } from '@/api/user'
import { ElMessage } from 'element-plus'
const route = useRoute()
const router = useRouter()
const userStore = useUserStore()
const isCollapse = ref(false)
const passwordDialogVisible = ref(false)
const passwordLoading = ref(false)
const passwordFormRef = ref(null)
const passwordForm = ref({
  oldPassword: '',
  newPassword: '',
  confirmPassword: ''
})
const validateConfirmPassword = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请再次输入新密码'))
  } else if (value !== passwordForm.value.newPassword) {
    callback(new Error('两次输入的密码不一致'))
  } else {
    callback()
  }
}
const validateNotSameAsOld = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请输入新密码'))
  } else if (value === passwordForm.value.oldPassword) {
    callback(new Error('新密码不能与原密码相同'))
  } else {
    callback()
  }
}
const passwordRules = {
  oldPassword: [
    { required: true, message: '请输入原密码', trigger: 'blur' }
  ],
  newPassword: [
    { required: true, validator: validateNotSameAsOld, trigger: 'blur' },
    { min: 6, message: '密码长度不能少于6位', trigger: 'blur' }
  ],
  confirmPassword: [
    { required: true, validator: validateConfirmPassword, trigger: 'blur' }
  ]
}
const activeMenu = computed(() => {
  return route.path
@@ -101,8 +164,39 @@
  if (command === 'logout') {
    userStore.logout()
    router.push('/login')
  } else if (command === 'editPassword') {
    passwordDialogVisible.value = true
    passwordForm.value = {
      oldPassword: '',
      newPassword: '',
      confirmPassword: ''
    }
  }
}
const handlePasswordChange = async () => {
  if (!passwordFormRef.value) return
  await passwordFormRef.value.validate(async (valid) => {
    if (valid) {
      passwordLoading.value = true
      try {
        await changePassword({
          oldPassword: passwordForm.value.oldPassword,
          newPassword: passwordForm.value.newPassword
        })
        ElMessage.success('密码修改成功')
        passwordDialogVisible.value = false
        userStore.logout()
        router.push('/login')
      } catch (error) {
        ElMessage.error(error.message || '密码修改失败')
      } finally {
        passwordLoading.value = false
      }
    }
  })
}
</script>
<style scoped>
src/utils/request.js
@@ -5,7 +5,7 @@
const request = axios.create({
  baseURL: '/api',
  timeout: 300000
  timeout: 3600000
})
request.interceptors.request.use(
src/views/Dashboard.vue
@@ -31,7 +31,7 @@
        <el-card class="box-card">
          <template #header>
            <div class="card-header">
              <span>模板总数</span>
              <span>数据总数</span>
            </div>
          </template>
          <div class="card-content">
src/views/data/Excel.vue
@@ -146,7 +146,7 @@
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="BP合同号" prop="bpContractNo">
              <el-input v-model="form.bpContractNo" placeholder="请输入BP合同号" />
              <el-input v-model="form.bpContractNo" placeholder="请输入BIP合同号" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
@@ -158,19 +158,19 @@
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="BP发票号" prop="bpInvoiceNo">
              <el-input v-model="form.bpInvoiceNo" placeholder="请输入BP发票号" />
              <el-input v-model="form.bpInvoiceNo" placeholder="请输入BIP发票号" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="古控系统对应发票号" prop="gkInvoiceNo">
              <el-input v-model="form.gkInvoiceNo" placeholder="请输入古控系统对应发票号" />
              <el-input v-model="form.gkInvoiceNo" placeholder="请输入百旺系统对应发票号" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="业务关联关系" prop="businessRelation">
              <el-input v-model="form.businessRelation" placeholder="请输入业务关联关系" />
              <el-input v-model="form.businessRelation" placeholder="请输入四者未关联原因" />
            </el-form-item>
          </el-col>
<!--          <el-col :span="12">-->
src/views/system/User.vue
@@ -34,11 +34,11 @@
      <el-table :data="tableData" v-loading="loading" border stripe>
        <el-table-column prop="id" label="ID" width="80" />
        <el-table-column prop="username" label="用户名" width="120" />
        <el-table-column prop="realName" label="真实姓名" width="120" />
        <el-table-column prop="email" label="邮箱" width="180" />
        <el-table-column prop="phone" label="手机号" width="130" />
        <el-table-column prop="deptName" label="所属部门" width="150" />
        <el-table-column prop="username" label="用户名" width="150" />
        <el-table-column prop="realName" label="真实姓名" width="150" />
        <el-table-column prop="email" label="邮箱" width="220" />
        <el-table-column prop="phone" label="手机号" width="150" />
        <el-table-column prop="deptName" label="所属部门" width="220" />
        <el-table-column prop="status" label="状态" width="80">
          <template #default="{ row }">
            <el-tag :type="row.status === 1 ? 'success' : 'danger'">
@@ -46,7 +46,7 @@
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column prop="createTime" label="创建时间" width="180" />
        <el-table-column prop="createTime" label="创建时间" />
        <el-table-column label="操作" fixed="right" width="180">
          <template #default="{ row }">
            <el-button type="primary" link :icon="Edit" @click="handleEdit(row)">编辑</el-button>