update
This commit is contained in:
parent
aa64f4f2ed
commit
c4c1c2ea4d
|
@ -1,7 +1,8 @@
|
||||||
FROM node:10
|
FROM node:16
|
||||||
COPY ./ /app
|
COPY ./ /app
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
RUN npm config set registry http://registry.npm.taobao.org
|
RUN npm config set registry http://registry.npm.taobao.org
|
||||||
|
RUN npm cache clean --force
|
||||||
RUN npm install && npm run build
|
RUN npm install && npm run build
|
||||||
|
|
||||||
FROM nginx
|
FROM nginx
|
||||||
|
|
|
@ -1,42 +1,89 @@
|
||||||
<template>
|
<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>
|
<template #header>
|
||||||
<el-row justify="end">
|
<h3>验证码登录</h3>
|
||||||
<el-image :src="emailImage" class="header-logo"></el-image>
|
|
||||||
</el-row>
|
|
||||||
</template>
|
</template>
|
||||||
<el-row justify="center">
|
<el-form label-position="top">
|
||||||
<el-image :src="logo" class="logo"></el-image>
|
<el-form-item label="邮箱">
|
||||||
</el-row>
|
<el-input v-model="form.email" :prefix-icon="Message" />
|
||||||
<el-form>
|
</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-form>
|
||||||
|
<el-row>
|
||||||
|
<el-button type="primary" style="width:100%">登 录</el-button>
|
||||||
|
</el-row>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { ref } from 'vue'
|
import { ref, reactive, watch, inject } from 'vue';
|
||||||
import { ElMessageBox } from 'element-plus'
|
import { Message, Paperclip } from '@element-plus/icons-vue'
|
||||||
import logo from "@/assets/image/logo.png"
|
import { ElMessage } from 'element-plus'
|
||||||
import emailImage from "@/assets/image/email.png"
|
const api: any = inject("$axios")
|
||||||
import passwordImage from "@/assets/image/password.png"
|
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 props = defineProps({
|
||||||
const dialogVisible = ref(false)
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
const handleClose = (done: () => void) => {
|
default: false,
|
||||||
ElMessageBox.confirm('Are you sure to close this dialog?')
|
}
|
||||||
.then(() => {
|
|
||||||
done()
|
|
||||||
})
|
})
|
||||||
.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>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.el-dialog {}
|
|
||||||
|
|
||||||
.header-logo {
|
.header-logo {
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
|
@ -47,8 +94,11 @@ const handleClose = (done: () => void) => {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h3{
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
.logo {
|
:deep(.el-dialog__body){
|
||||||
width: 200px;
|
padding-top: 0px !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<el-table :data="props.data">
|
<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>
|
:prop="item.prop"></el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<el-link v-for="(item, index) in routerPath" :key="index" @click="goPath(item.path)">{{ item.name }}</el-link>
|
<el-link v-for="(item, index) in routerPath" :key="index" @click="goPath(item.path)">{{ item.name }}</el-link>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row align="middle">
|
<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>
|
<el-dropdown trigger="click" v-else>
|
||||||
<span class="el-dropdown-link" style="color:#fff">
|
<span class="el-dropdown-link" style="color:#fff">
|
||||||
你好,{{ user.company_name }}
|
你好,{{ user.company_name }}
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
</template>
|
</template>
|
||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
</el-row>
|
</el-row>
|
||||||
<login />
|
<login :visible="visible" @close="close" />
|
||||||
</el-header>
|
</el-header>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ import { useRouter } from 'vue-router';
|
||||||
import { Message, SwitchButton } from '@element-plus/icons-vue'
|
import { Message, SwitchButton } from '@element-plus/icons-vue'
|
||||||
import login from "./login.vue"
|
import login from "./login.vue"
|
||||||
|
|
||||||
|
const visible = ref(false)
|
||||||
const routerPath = ref([
|
const routerPath = ref([
|
||||||
{ path: "/home", name: "首页" },
|
{ path: "/home", name: "首页" },
|
||||||
{ path: "/rank", name: "企业榜单" },
|
{ path: "/rank", name: "企业榜单" },
|
||||||
|
@ -51,6 +52,10 @@ const init = async () => {
|
||||||
const logOut = () => {
|
const logOut = () => {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const close = (value) => {
|
||||||
|
visible.value = value
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
|
@ -1,29 +1,13 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="table-box">
|
<div class="table-box">
|
||||||
<el-table :data="data" v-loading="loading" :height="height">
|
<my-table :data="data" :column="column"></my-table>
|
||||||
<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>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang='ts'>
|
<script setup lang='ts'>
|
||||||
import { onMounted, ref } from 'vue'
|
import { onMounted, ref } from 'vue'
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
|
import myTable from "@/components/table.vue"
|
||||||
const count = ref(400)
|
const count = ref(400)
|
||||||
const height = ref(0)
|
const height = ref(0)
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
|
@ -34,17 +18,23 @@ const query = ref({
|
||||||
})
|
})
|
||||||
const data = ref([
|
const data = ref([
|
||||||
{
|
{
|
||||||
date: '2016-05-01',
|
name: "远东资信2022年信用评价报告",
|
||||||
name: 'Tom',
|
create_date: "2023-01-01",
|
||||||
state: 'California',
|
status: "finished",
|
||||||
city: 'Los Angeles',
|
level: "AAA",
|
||||||
address: 'No. 189, Grove St, Los Angeles',
|
reportUrl: "",
|
||||||
zip: 'CA 90036',
|
}
|
||||||
},
|
|
||||||
|
|
||||||
])
|
])
|
||||||
|
|
||||||
|
interface ListItem {
|
||||||
|
label: string,
|
||||||
|
prop: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const column = ref<ListItem[]>([])
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
init()
|
||||||
setTableMaxHeight()
|
setTableMaxHeight()
|
||||||
window.addEventListener('resize', () => setTableMaxHeight())
|
window.addEventListener('resize', () => setTableMaxHeight())
|
||||||
})
|
})
|
||||||
|
@ -56,7 +46,9 @@ function setTableMaxHeight() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const init = () => {
|
const init = () => {
|
||||||
|
column.value = Object.keys(data.value[0]).map(key => {
|
||||||
|
return { label: key, prop: key }
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const showDetail = (value) => {
|
const showDetail = (value) => {
|
||||||
|
|
|
@ -7,8 +7,6 @@ const routes = [
|
||||||
{ path: "/", redirect: "/home" }
|
{ path: "/", redirect: "/home" }
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (const path in pageModules) {
|
for (const path in pageModules) {
|
||||||
if (pageModules.hasOwnProperty(path)) {
|
if (pageModules.hasOwnProperty(path)) {
|
||||||
const routeName = path.match(reg)[1];
|
const routeName = path.match(reg)[1];
|
||||||
|
|
|
@ -9,4 +9,7 @@ export default defineConfig({
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
plugins: [vue()],
|
plugins: [vue()],
|
||||||
|
build:{
|
||||||
|
target:['edge90','chrome90','firefox90','safari15']
|
||||||
|
}
|
||||||
});
|
});
|
Loading…
Reference in New Issue