This commit is contained in:
xuyucheng 2023-08-07 16:48:00 +08:00
parent aa64f4f2ed
commit c4c1c2ea4d
7 changed files with 109 additions and 60 deletions

View File

@ -1,7 +1,8 @@
FROM node:10
FROM node:16
COPY ./ /app
WORKDIR /app
RUN npm config set registry http://registry.npm.taobao.org
RUN npm cache clean --force
RUN npm install && npm run build
FROM nginx

View File

@ -1,42 +1,89 @@
<template>
<el-dialog v-model="dialogVisible" width="30%" :show-close="false" style="border-radius: 10px;">
<el-dialog v-model="props.visible" width="400px" :show-close="false" style="border-radius: 10px;" @close="close">
<template #header>
<el-row justify="end">
<el-image :src="emailImage" class="header-logo"></el-image>
</el-row>
<h3>验证码登录</h3>
</template>
<el-row justify="center">
<el-image :src="logo" class="logo"></el-image>
</el-row>
<el-form>
<el-form label-position="top">
<el-form-item label="邮箱">
<el-input v-model="form.email" :prefix-icon="Message" />
</el-form-item>
<el-form-item label="验证码">
<el-input v-model="form.code" :prefix-icon="Paperclip">
<template #suffix>
<span @click="send" v-if="!isSend">发送验证码</span>
<span v-else>
<el-countdown format="ss" :value="countDown">
<template #suffix>
<span></span>
</template>
</el-countdown>
</span>
</template>
</el-input>
</el-form-item>
<el-form-item>
注册登录即表示同意 用户协议 隐私政策
</el-form-item>
</el-form>
<el-row>
<el-button type="primary" style="width:100%"> </el-button>
</el-row>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { ElMessageBox } from 'element-plus'
import logo from "@/assets/image/logo.png"
import emailImage from "@/assets/image/email.png"
import passwordImage from "@/assets/image/password.png"
import { ref, reactive, watch, inject } from 'vue';
import { Message, Paperclip } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
const api: any = inject("$axios")
const countDown = ref(0)
const isSend = ref(false)
const reg = /^([a-zA-Z\d][\w-]{2,})@(\w{2,})\.([a-z]{2,})(\.[a-z]{2,})?$/
const dialogVisible = ref(false)
const handleClose = (done: () => void) => {
ElMessageBox.confirm('Are you sure to close this dialog?')
.then(() => {
done()
const props = defineProps({
visible: {
type: Boolean,
default: false,
}
})
.catch(() => {
// catch error
const form = reactive({
email: "",
code: "",
})
const emit = defineEmits(["close"]);
const close = () => {
emit("close", false)
}
async function send() {
if (reg.test(form.email)) {
const res = await api.post("/rate_sys/user/admin_user/get_email_login_verify_code", { email: form.email })
isSend.value = true
countDown.value = Date.now() + 1000 * 60
ElMessage({
message: res.msg,
type: 'success',
})
} else {
ElMessage({
message: '邮箱格式不正确',
type: 'warning',
})
}
}
watch(countDown, () => {
setTimeout(() => {
isSend.value = false
}, 59 * 1000)
})
</script>
<style scoped>
.el-dialog {}
.header-logo {
width: 40px;
height: 40px;
@ -47,8 +94,11 @@ const handleClose = (done: () => void) => {
padding: 10px;
}
h3{
margin: 0px;
}
.logo {
width: 200px;
:deep(.el-dialog__body){
padding-top: 0px !important;
}
</style>

View File

@ -1,6 +1,6 @@
<template>
<el-table :data="props.data">
<el-table-column v-for="(item, index) in props.column" :key="index" :label="item.label"
<el-table-column v-for="(item, index) in props.column" :key="index" :label="item.label" align="center"
:prop="item.prop"></el-table-column>
</el-table>
</template>

View File

@ -4,7 +4,7 @@
<el-link v-for="(item, index) in routerPath" :key="index" @click="goPath(item.path)">{{ item.name }}</el-link>
</el-row>
<el-row align="middle">
<el-link to="/login" v-if="!user.email">登录</el-link>
<el-link to="/login" v-if="!user.email" @click="visible = true">登录</el-link>
<el-dropdown trigger="click" v-else>
<span class="el-dropdown-link" style="color:#fff">
你好{{ user.company_name }}
@ -17,7 +17,7 @@
</template>
</el-dropdown>
</el-row>
<login />
<login :visible="visible" @close="close" />
</el-header>
</template>
@ -27,6 +27,7 @@ import { useRouter } from 'vue-router';
import { Message, SwitchButton } from '@element-plus/icons-vue'
import login from "./login.vue"
const visible = ref(false)
const routerPath = ref([
{ path: "/home", name: "首页" },
{ path: "/rank", name: "企业榜单" },
@ -51,6 +52,10 @@ const init = async () => {
const logOut = () => {
}
const close = (value) => {
visible.value = value
}
</script>
<style scoped>

View File

@ -1,29 +1,13 @@
<template>
<div class="table-box">
<el-table :data="data" v-loading="loading" :height="height">
<el-table-column prop="date" label="Date" align="center" />
<el-table-column prop="name" label="Name" align="center" />
<el-table-column prop="state" label="State" align="center" />
<el-table-column prop="city" label="City" align="center" />
<el-table-column prop="address" label="Address" align="center" />
<el-table-column prop="zip" label="Zip" align="center" />
<el-table-column label="operation" align="center">
<template #default="scope">
<el-button type="text"> </el-button>
</template>
</el-table-column>
</el-table>
<el-row justify="end" style="margin-top: 20px;">
<el-pagination :total="count" v-model:current-page="query.page" v-model:page-size="query.page_size"
:page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
@current-change="init" />
</el-row>
<my-table :data="data" :column="column"></my-table>
</div>
</template>
<script setup lang='ts'>
import { onMounted, ref } from 'vue'
import { useRouter } from 'vue-router';
import myTable from "@/components/table.vue"
const count = ref(400)
const height = ref(0)
const loading = ref(false)
@ -34,17 +18,23 @@ const query = ref({
})
const data = ref([
{
date: '2016-05-01',
name: 'Tom',
state: 'California',
city: 'Los Angeles',
address: 'No. 189, Grove St, Los Angeles',
zip: 'CA 90036',
},
name: "远东资信2022年信用评价报告",
create_date: "2023-01-01",
status: "finished",
level: "AAA",
reportUrl: "",
}
])
interface ListItem {
label: string,
prop: string
}
const column = ref<ListItem[]>([])
onMounted(() => {
init()
setTableMaxHeight()
window.addEventListener('resize', () => setTableMaxHeight())
})
@ -56,7 +46,9 @@ function setTableMaxHeight() {
}
const init = () => {
column.value = Object.keys(data.value[0]).map(key => {
return { label: key, prop: key }
})
}
const showDetail = (value) => {

View File

@ -7,8 +7,6 @@ const routes = [
{ path: "/", redirect: "/home" }
]
for (const path in pageModules) {
if (pageModules.hasOwnProperty(path)) {
const routeName = path.match(reg)[1];

View File

@ -9,4 +9,7 @@ export default defineConfig({
},
},
plugins: [vue()],
build:{
target:['edge90','chrome90','firefox90','safari15']
}
});