Commit 8a3117ba authored by liang's avatar liang
parents 4cd8b6b5 5dc80d7e
<template>
<el-row class="el-table-self">
<el-table
:max-height="maxHeight || maxTableHeight"
:height="tableHeight"
ref="selftab"
v-loading="listLoading"
:data="tableData"
:show-overflow-tooltip="true"
:highlight-current-row="highLight"
:header-row-class-name="headerClass"
style="width: 100%"
>
<template v-for="(column, index) in columns">
<template v-if="!column.type && !column.operType">
<el-table-column
:key="column.value"
:show-overflow-tooltip="true"
:fixed="column.fixed"
:prop="column.value"
:label="column.label"
:width="column.width"
:min-width="column.minWidth"
align="center"
:sortable="column.sortable"
:formatter="column.formatter"
:class-name="column.className"
:label-class-name="column.labelClassName"
>
<!-- 表头插槽 -->
<template slot="header" slot-scope="scope">
<span :style="{ fontSize: fontSize[fontIndex] }">{{
column.label
}}</span>
</template>
<!-- 表内容插槽 -->
<template slot-scope="scope">
<span :style="{ fontSize: fontSize[fontIndex] }">
{{ scope.row[column.value] }}</span
>
</template>
</el-table-column>
</template>
<template v-else>
<el-table-column
:key="index"
:fixed="column.fixed"
:prop="column.value"
:label="column.label"
:sortable="column.sortable"
:width="column.width"
:min-width="column.minWidth"
align="center"
>
<!-- 表头插槽 -->
<template slot="header" slot-scope="scope">
<span :style="{ fontSize: fontSize[fontIndex] }">{{
column.label
}}</span>
</template>
<!-- 表内容插槽 -->
<template slot-scope="scope">
<!-- 按钮 -->
<template
v-if="column.type === 'button' || column.operType === 'button'"
>
<!-- 按钮数组 -->
<template v-for="(op, opIndex) in column.operations">
<el-button
:key="opIndex"
:disabled="
op.formatter ? op.formatter(scope.row).disabled : false
"
:style="{ fontSize: fontSize[fontIndex] }"
:type="
op.formatter
? op.formatter(scope.row).type
: op.type || ''
"
:icon="op.icon"
@click="op.func(scope.row, scope.$index)"
>
{{
op.formatter
? op.formatter(scope.row).label
: op.label
? op.label
: scope.row[column.value]
}}
</el-button>
</template>
</template>
<!-- html -->
<template v-if="column.type === 'html'">
<div v-html="scope.row[column.value]" class="highlight"></div>
</template>
</template>
</el-table-column>
</template>
</template>
</el-table>
<!-- 分页 -->
<div v-if="pageSize && totalCounts > 0" class="pagination-footer">
<!-- <span class="description">{{ description }}</span> -->
<el-pagination
background
:current-page="currentPage"
:page-sizes="pageSizes"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalCounts"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
></el-pagination>
</div>
</el-row>
</template>
<script>
import resize from "../TabComponents/resize.js"
import { mapGetters } from "vuex"
export default {
props: {
tableHeight: Number, // 表格的高度
maxHeight: Number, // 表格的最大高度
listLoading: Boolean, // table 加载层
pageSizes: Array, // 决定每页显示的条数[10,15,20,25]
pageSize: Number,
totalCount: [Number, String], // 表格数据总数
currentPage: { type: Number, default: 1 },
highLight: { type: Boolean, default: true },
headerClass: { type: String, default: "default" }, // 头部背景色Class名称,默认default
columns: Array, // 表格列配置数据,{vlaue:对应数据对象中的属性,label:对应的是标题文字,fixed:列是否固定,width:列宽, sortable:是否可排序,formatter:列格式化, className:对应的是列的样式类名}
tableData: Array, // 表格数据
},
mixins: [resize],
data() {
return {
fontSize: ["12px", "14px", "16px"],
}
},
computed: {
...mapGetters({
fontIndex: "table/fontIndex",
}),
totalCounts() {
return this.totalCount - 0
},
},
watch: {},
mounted() {},
methods: {
// 切换页面显示条数
handleSizeChange(val) {
this.$emit("pageSizeChange", val)
},
// 跳转页码
handleCurrentChange(val) {
this.$emit("currentPageChange", val)
},
},
}
</script>
<style lang="scss" scoped>
.el-table__empty-block {
position: relative;
min-height: 60px;
text-align: center;
width: 100%;
height: 100%;
}
.el-table__empty-text {
position: absolute;
left: 50%;
width: 110px;
height: 110px;
top: 50%;
line-height: 220px;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
color: #5e7382;
background-position: center center;
background-repeat: no-repeat;
background-size: cover;
}
</style>
<template>
<el-form ref="form" :model="form" :label-position="labelPosition" :inline="inlineFlag" :label-width="labelWidth" :size="size" @submit.native.prevent="handleSearch()" class="el-form-self" :style="formStyle">
<el-col :xs="item.xs?item.xs:24" :sm="item.sm?item.sm:12" :md="item.md?item.md:8" :lg="item.lg?item.lg:8" :xl="item.xl?item.xl:6" v-for="(item,index) in forms" :key="index" v-if="!item.hidden">
<el-form-item :label="item.label?item.label+(item.hiddenColon?'':':'):''" :prop="item.prop" :rules="item.rules" :label-width="item.labelWidth || '110px'">
<!-- 输入框 -->
<el-input v-if="item.type === 'input'" :id="item.id?item.id:''" v-model="form[item.prop]" :readonly="item.readonly" :disabled="item.disabled" :placeholder="item.placeholder" @focus="item.focusFunc?item.focusFunc($event):{}" @change="item.func?item.func($event):{}">
<span :slot="item.slot?item.slot:'append'" v-if="item.unit">{{item.unit}}</span>
</el-input>
<template v-if="item.type === 'textarea'">
<el-input type="textarea" :placeholder="item.placeholder" :rows="item.rows" :autosize="item.autosize" v-model="form[item.prop]" :minlength="item.minlength" :maxlength="item.maxlength" :show-word-limit="item.showLimit"></el-input>
</template>
<!-- 模糊查询输入 -->
<el-autocomplete :popper-class="item.popperClass" style="width:100%;" v-else-if="item.type === 'autocomplete'" v-model="form[item.prop]" :fetch-suggestions="item.func" :placeholder="item.placeholder" @select="item.selectfun?item.selectfun($event):{}" clearable>
<template slot-scope="{ item }">
<div class="name">{{ item.value }}</div>
<span class="description">{{ item.description }}</span>
</template>
</el-autocomplete>
<!-- 模糊查询选择 -->
<el-select v-else-if="item.type === 'remote'" v-model="form[item.prop]" filterable remote reserve-keyword :placeholder="item.placeholder" :remote-method="item.remoteFunc">
<el-option v-for="(opt,optIndex) in item.opts" :key="optIndex" :label="opt.label" :value="item.isSelect?opt.selectValue:opt.value">
</el-option>
</el-select>
<!-- 日期区间 -->
<el-date-picker v-else-if="item.type === 'daterange'" v-model="form[item.prop]" type="daterange" align="right" unlink-panels range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="item.options" :format="item.format" :value-format="item.valueFormat">
</el-date-picker>
<!-- 日期 -->
<el-date-picker v-else-if="item.type === 'date'" v-model="form[item.prop]" :type="item.dateType?item.dateType:'date'" :placeholder="item.placeholder" :picker-options="item.options" :format="item.format" :value-format="item.valueFormat">
</el-date-picker>
<!-- 下拉框 -->
<el-select v-else-if="item.type === 'select'" clearable filterable :disabled="item.disabled" v-model="form[item.prop]" :placeholder="item.placeholder?item.placeholder:'请选择'" @change="item.func?item.func($event):{}">
<el-option v-for="(opt,optIndex) in item.opts" :key="optIndex" :label="opt.label" :value="item.isSelect?opt.selectValue:opt.value">
</el-option>
</el-select>
<!-- 单选框 -->
<el-radio :class="item.class" v-else-if="item.type === 'radio'" v-model="form[item.prop]" v-for="(opt,optIndex) in item.opts" :key="optIndex" :label="opt.value" @change="item.func?item.func($event):{}">{{opt.label}}
</el-radio>
<!-- 级联 -->
<el-cascader v-else-if="item.type === 'cascader'" v-model="form[item.prop]" :style="'width:'+item.width" :options="item.list" :change-on-select="item.changeSelect" :show-all-levels="item.showLevel"></el-cascader>
<!-- 文字 -->
<span v-else-if="item.type === 'text'">
{{item.text?item.text:form[item.prop]}}
</span>
<!-- 数字输入框 -->
<el-input-number v-else-if="item.type === 'number'" :controls="false" :min="item.min || 0" :precision="item.precision" v-model="form[item.prop]" :disabled="item.disabled || disabled" />
<!-- 图标 -->
<span v-else-if="item.type === 'svg'">
<svg-icon :style="item.style" :icon-class="item.iconClass" @click.native="clickSvg(item.func)" class="form-svg"></svg-icon>
</span>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :lg="24" v-if="lists" style="padding-left:120px;">
<el-button v-for="(btn,index) in lists" :key="index" :type="btn.type" :size="size" :icon="btn.icon" @click="btn.func" :style="btn.style">
{{btn.btnText}}
</el-button>
</el-col>
</el-form>
<el-form
ref="form"
:model="form"
:label-position="labelPosition"
:inline="inlineFlag"
:label-width="labelWidth"
:size="size"
class="el-form-self"
:style="formStyle"
@submit.native.prevent="handleSearch()"
>
<el-col
v-for="(item, index) in forms"
v-if="!item.hidden"
:key="index"
:xs="item.xs ? item.xs : 24"
:sm="item.sm ? item.sm : 12"
:md="item.md ? item.md : 8"
:lg="item.lg ? item.lg : 8"
:xl="item.xl ? item.xl : 6"
>
<el-form-item
v-if="item.type != 'btn'"
:label="item.label ? item.label + (item.hiddenColon ? '' : ':') : ''"
:prop="item.prop"
:rules="item.rules"
:label-width="item.labelWidth || '110px'"
>
<!-- 输入框 -->
<el-input
v-if="item.type === 'input'"
:id="item.id ? item.id : ''"
v-model="form[item.prop]"
:readonly="item.readonly"
:disabled="item.disabled"
:placeholder="item.placeholder"
@focus="item.focusFunc ? item.focusFunc($event) : {}"
@change="item.func ? item.func($event) : {}"
>
<span v-if="item.unit" :slot="item.slot ? item.slot : 'append'">{{
item.unit
}}</span>
</el-input>
<template v-if="item.type === 'textarea'">
<el-input
v-model="form[item.prop]"
type="textarea"
:placeholder="item.placeholder"
:rows="item.rows"
:autosize="item.autosize"
:minlength="item.minlength"
:maxlength="item.maxlength"
:show-word-limit="item.showLimit"
></el-input>
</template>
<!-- 模糊查询输入 -->
<el-autocomplete
v-else-if="item.type === 'autocomplete'"
v-model="form[item.prop]"
:popper-class="item.popperClass"
style="width: 100%"
:fetch-suggestions="item.func"
:placeholder="item.placeholder"
clearable
@select="item.selectfun ? item.selectfun($event) : {}"
>
<template slot-scope="{ item }">
<div class="name">{{ item.value }}</div>
<span class="description">{{ item.description }}</span>
</template>
</el-autocomplete>
<!-- 模糊查询选择 -->
<el-select
v-else-if="item.type === 'remote'"
v-model="form[item.prop]"
filterable
remote
reserve-keyword
:placeholder="item.placeholder"
:remote-method="item.remoteFunc"
>
<el-option
v-for="(opt, optIndex) in item.opts"
:key="optIndex"
:label="opt.label"
:value="item.isSelect ? opt.selectValue : opt.value"
>
</el-option>
</el-select>
<!-- 日期区间 -->
<el-date-picker
v-else-if="item.type === 'daterange'"
v-model="form[item.prop]"
type="daterange"
align="right"
unlink-panels
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="item.options"
:format="item.format"
:value-format="item.valueFormat"
>
</el-date-picker>
<!-- 日期 -->
<el-date-picker
v-else-if="item.type === 'date'"
v-model="form[item.prop]"
:type="item.dateType ? item.dateType : 'date'"
:placeholder="item.placeholder"
:picker-options="item.options"
:format="item.format"
:value-format="item.valueFormat"
>
</el-date-picker>
<!-- 下拉框 -->
<el-select
v-else-if="item.type === 'select'"
v-model="form[item.prop]"
clearable
filterable
:disabled="item.disabled"
:placeholder="item.placeholder ? item.placeholder : '请选择'"
@change="item.func ? item.func($event) : {}"
>
<el-option
v-for="(opt, optIndex) in item.opts"
:key="optIndex"
:label="opt.label"
:value="item.isSelect ? opt.selectValue : opt.value"
>
</el-option>
</el-select>
<!-- 单选框 -->
<el-radio
v-for="(opt, optIndex) in item.opts"
v-else-if="item.type === 'radio'"
:key="optIndex"
v-model="form[item.prop]"
:class="item.class"
:label="opt.value"
@change="item.func ? item.func($event) : {}"
>{{ opt.label }}
</el-radio>
<!-- 级联 -->
<el-cascader
v-else-if="item.type === 'cascader'"
v-model="form[item.prop]"
:style="'width:' + item.width"
:options="item.list"
:change-on-select="item.changeSelect"
:show-all-levels="item.showLevel"
></el-cascader>
<!-- 文字 -->
<span v-else-if="item.type === 'text'">
{{ item.text ? item.text : form[item.prop] }}
</span>
<!-- 数字输入框 -->
<el-input-number
v-else-if="item.type === 'number'"
v-model="form[item.prop]"
:controls="false"
:min="item.min || 0"
:precision="item.precision"
:disabled="item.disabled || disabled"
/>
<!-- 图标 -->
<span v-else-if="item.type === 'svg'">
<svg-icon
:style="item.style"
:icon-class="item.iconClass"
class="form-svg"
@click.native="clickSvg(item.func)"
></svg-icon>
</span>
</el-form-item>
<div v-if="item.type == 'btn'" class="flex">
<template v-for="(btn, index) in item.list">
<el-button
v-if="btn.btnType == 'button'"
:key="index"
:type="btn.type"
:size="size"
:icon="btn.icon"
:style="btn.style"
@click="btn.func"
>
{{ btn.btnText }}
</el-button>
<div
v-if="btn.btnType == 'tobeModified'"
:key="index"
class="tobeModified"
:style="{ backgroundColor: modifiedFlag ? '#4E68FF' : '#fff' }"
@click="changeModified"
>
<i
:style="{ color: modifiedFlag ? '#fff' : '#d9d9d9' }"
class="el-icon-check"
></i>
<span :style="{ color: modifiedFlag ? '#fff' : '#000' }"
>待修改({{ btn.tobeModified }}</span
>
</div>
</template>
</div>
</el-col>
<el-col v-if="lists" :xs="24" :sm="24" :lg="24" style="padding-left: 120px">
<el-button
v-for="(btn, index) in lists"
:key="index"
:type="btn.type"
:size="size"
:icon="btn.icon"
:style="btn.style"
@click="btn.func"
>
{{ btn.btnText }}
</el-button>
</el-col>
</el-form>
</template>
<script>
export default {
data() {
props: {
size: { type: String, default: "small" },
labelPosition: { type: String, default: "right" },
labelWidth: { type: String },
formStyle: { type: Object },
inlineFlag: { type: Boolean, default: false },
forms: { type: Array }, // 表单组,
lists: { type: Array }, // 按钮组
},
data() {
const form = {}
const { forms } = this.$props
forms.forEach((item) => {
if (!item.prop || item.hidden) return false
if (
item.type === "daterange" ||
item.type === "checkboxList" ||
item.type === "checkbox" ||
item.type === "cascader" ||
(item.type === "select" && item.multiple)
) {
form[item.prop] = []
} else {
form[item.prop] = ""
}
})
return {
form,
modifiedFlag: false,
}
},
methods: {
// 查询
handleSearch() {
this.$emit("handleSearch", this.form)
},
// 重置
handleReset() {
this.$refs.form.resetFields()
this.handleSearch()
},
handleConfirm() {
this.loading = true
this.$refs.form.validate((valid) => {
if (valid) {
this.$emit("handleConfirm", this.form)
} else {
this.loading = false
}
})
},
// 表单赋值
initforms(formEdit) {
this.$nextTick(() => {
const form = {}
const { forms } = this.$props
forms.forEach(item => {
if (!item.prop || item.hidden) return false
if (
item.type === 'daterange' ||
item.type === 'checkboxList' ||
item.type === 'checkbox' ||
item.type === 'cascader' ||
(item.type === 'select' && item.multiple)
) {
form[item.prop] = []
} else {
form[item.prop] = ''
}
this.forms.forEach((item) => {
if (!item.prop || item.hidden) return false
if (
item.type === "daterange" ||
item.type === "checkboxList" ||
item.type === "checkbox" ||
item.type === "cascader" ||
(item.type === "select" && item.multiple)
) {
form[item.prop] = []
} else {
form[item.prop] = ""
}
})
return {
form
if (formEdit) {
this.form = Object.assign(form, formEdit)
} else {
this.form = Object.assign({}, form)
}
this.loading = false
if (this.$refs.form && this.$refs.form.clearValidate) {
this.$refs.form.clearValidate()
}
})
},
props: {
size: { type: String, default: 'small' },
labelPosition: { type: String, default: 'right' },
labelWidth: { type: String },
formStyle: { type: Object },
inlineFlag: { type: Boolean, default: false },
forms: { type: Array }, // 表单组,
lists: { type: Array } // 按钮组
// 绑定部分值(此时表单已渲染)
initfields(obj) {
this.form = Object.assign(this.form, obj)
},
methods: {
// 查询
handleSearch() {
this.$emit('handleSearch', this.form)
},
// 重置
handleReset() {
this.$refs.form.resetFields()
this.handleSearch()
},
handleConfirm() {
this.loading = true
this.$refs.form.validate(valid => {
if (valid) {
this.$emit('handleConfirm', this.form)
} else {
this.loading = false
}
})
},
// 表单赋值
initforms(formEdit) {
this.$nextTick(() => {
const form = {}
this.forms.forEach(item => {
if (!item.prop || item.hidden) return false
if (
item.type === 'daterange' ||
item.type === 'checkboxList' ||
item.type === 'checkbox' ||
item.type === 'cascader' ||
(item.type === 'select' && item.multiple)
) {
form[item.prop] = []
} else {
form[item.prop] = ''
}
})
if (formEdit) {
this.form = Object.assign(form, formEdit)
} else {
this.form = Object.assign({}, form)
}
this.loading = false
if (this.$refs.form && this.$refs.form.clearValidate) {
this.$refs.form.clearValidate()
}
})
},
// 绑定部分值(此时表单已渲染)
initfields(obj) {
this.form = Object.assign(this.form, obj)
},
// 点击图标
clickSvg(str) {
this.$emit(str)
}
}
// 点击图标
clickSvg(str) {
this.$emit(str)
},
// 修改
changeModified() {
this.modifiedFlag = !this.modifiedFlag
},
},
}
</script>
<style lang="scss" scoped>
.el-form-self {
margin: 20px 0;
overflow: hidden;
zoom: 1;
.el-input,
.el-select,
.el-cascader,
.el-date-editor {
width: 100%;
}
.form-svg {
cursor: pointer;
}
width: 100%;
margin: 20px 0;
overflow: hidden;
zoom: 1;
.el-input,
.el-select,
.el-cascader,
.el-date-editor {
width: 100%;
}
.form-svg {
cursor: pointer;
}
.el-form-item {
margin-right: 20px;
}
}
.tobeModified {
// width: 134px;
height: 31px;
margin-left: 20px;
background: #ffffff;
border-radius: 4px;
padding: 0px 8px;
border: 1px solid #d9d9d9;
display: flex;
align-items: center;
cursor: pointer;
.el-icon-check {
font-size: 18px;
margin-right: 8px;
}
span {
font-size: 14px;
font-family: AlibabaPuHuiTiR;
color: #333333;
}
}
</style>
<template>
<div style="min-width: 1440px; overflow: overlay">
<Layout>
<Header class="layout-header">
<div class="logotitle">
<div class="leftLogo"></div>
<div class="rightText">
国家消化道早癌防治中心联盟 <br />早期胃癌筛查项目
</div>
<header class="layout-header">
<div class="logotitle">
<div class="leftLogo"></div>
<div class="rightText">
国家消化道早癌防治中心联盟 <br />早期胃癌筛查项目
</div>
<div v-if="!allianceToken" class="login">
<div class="login_title text-center">
筛查随访数据库登录
<Form ref="form" :model="form" :rules="rules" inline>
<FormItem prop="username" label="登录名:">
<Input
v-model="form.username"
type="text"
placeholder="请输入登录名"
>
</Input>
</FormItem>
<FormItem prop="password" label="密码:">
<Input
v-model="form.password"
type="password"
placeholder="请输入密码"
>
</Input>
</FormItem>
<FormItem>
<Button
type="primary"
class="login_button"
:loading="loading"
@click="handleSubmit('form')"
>登录</Button
>
</FormItem>
</Form>
</div>
</div>
<div v-if="allianceToken" class="userInfo">
<div class="white"></div>
<div class="text">欢迎,LIXid胡</div>
<div class="exit" @click="logout">退出</div>
</div>
</Header>
<div class="sider">
<Menu mode="horizontal" :active-name="currentRoute" class="siderMenu">
<MenuItem
v-for="(item, index) in menuList"
:key="index"
:name="item.route"
:to="item.route"
style="width: 10%; text-align: center; min-width: 120px"
</div>
<div v-if="!allianceToken" class="login">
<div class="login_title text-center">
筛查随访数据库登录
<el-form
ref="form"
label-position="top"
:model="form"
label-suffix=":"
label-width="100%"
:rules="rules"
>
{{ item.name }}
</MenuItem>
</Menu>
<el-form-item prop="username" label="登录名">
<el-input
v-model="form.username"
placeholder="请输入登录名"
></el-input>
</el-form-item>
<el-form-item prop="password" label="密码">
<el-input
v-model="form.password"
type="password"
placeholder="请输入密码"
></el-input>
</el-form-item>
<el-form-item>
<el-button
type="primary"
class="login_button"
:loading="loading"
@click="handleSubmit('form')"
>登录</el-button
>
</el-form-item>
</el-form>
</div>
</div>
<div v-if="allianceToken" class="userInfo">
<div class="white"></div>
<div class="text">欢迎,LIXid胡</div>
<div class="exit" @click="logout">退出</div>
</div>
<Content style="overflow: hidden; padding: 32px 10%; background: #f3f3f3">
<transition name="fade-transform" mode="out-in">
<router-view></router-view>
</transition>
</Content>
<Footer class="layout-footer-center text-center"
>copyright@ 联盟信息等</Footer
</header>
<div class="sider">
<el-menu
mode="horizontal"
:default-active="currentRoute"
class="siderMenu"
router
>
</Layout>
<el-menu-item
v-for="(item, index) in menuList"
:key="index"
:index="item.route"
style="width: 10%; text-align: center; min-width: 120px"
>
{{ item.name }}
</el-menu-item>
</el-menu>
</div>
<section style="overflow: hidden; padding: 32px 10%; background: #f3f3f3">
<transition name="fade-transform" mode="out-in">
<router-view></router-view>
</transition>
</section>
<footer class="layout-footer-center text-center">
copyright@ 联盟信息等
</footer>
</div>
</template>
<script>
......@@ -184,7 +190,7 @@ export default {
background-position: center;
background-size: cover;
display: flex;
padding-right: 10%;
padding: 0 10% 0 5%;
justify-content: space-between;
align-items: center;
.logotitle {
......@@ -263,20 +269,14 @@ export default {
width: 100%;
height: 108px;
background: #efefef;
line-height: 68px;
line-height: 108px;
}
::v-deep {
.ivu-form {
.ivu-form-item {
display: block;
margin-bottom: 10px;
}
.ivu-form-item-label {
font-size: 14px;
font-family: AlibabaPuHuiTiR;
color: #333333;
}
}
.el-menu--horizontal > .el-menu-item:not(.is-disabled):hover,
.el-menu--horizontal > .el-menu-item:not(.is-disabled):focus {
background-color: transparent;
}
.el-form-item {
text-align: left;
}
/* fade-transform */
.fade-transform-leave-active,
......
......@@ -28,9 +28,8 @@ router.beforeResolve(async (to, from, next) => {
if (!loginInterception) hasToken = true
if (hasToken) {
if (to.path === "/home") {
next({
path: "/",
})
next()
// { path: "/" }
if (progressBar) VabProgress.done()
} else if (routesWhiteList.indexOf(to.path) !== -1) {
next()
......@@ -49,6 +48,7 @@ router.beforeResolve(async (to, from, next) => {
accessRoutes = await store.dispatch("routes/setAllRoutes", menulist)
}
router.addRoutes(accessRoutes)
console.log(router)
if (accessRoutes.length === 1) {
Message({
message: "暂无菜单权限,请联系管理员",
......
......@@ -53,7 +53,7 @@ export default {
async () => {
const fullPath = this.$route.fullPath
await this.$store.dispatch("user/logout")
this.$router.push(`/login?redirect=${fullPath}`)
this.$router.push(`/home?redirect=${fullPath}`)
}
)
},
......
......@@ -4,9 +4,40 @@
<vab-remix-icon class="logo" icon-class="logo" />
<span class="hidden-xs-only">无症状人群胃癌筛查随访数据中心</span>
</div>
<div class="right-panel">
<div class="userInfo">
<error-log></error-log>
<avatar></avatar>
<!-- <avatar></avatar> -->
<div class="fontSelect">
<div
v-for="(item, index) in fontList"
:key="index"
:class="['font', index == fontIndex ? 'active' : '']"
@click="changeFont(index)"
>
<div class="label">
{{ item.label }}
</div>
</div>
</div>
<div
v-show="curSelectedIndex != -1"
class="community"
@click="openModalFlag"
>
<img src="~@/assets/img/DataCenter/shift.png" alt="" />
{{ screeningList[curSelectedIndex].title }}
</div>
<div class="user">
<img src="~@/assets/img/DataCenter/user.png" alt="" />
<avatar></avatar>
</div>
<el-badge :value="messageCount" :class-name="'badge'">
<div class="user">
<img src="~@/assets/img/DataCenter/message.png" alt="" />
消息
</div>
</el-badge>
</div>
</div>
</template>
......@@ -31,10 +62,37 @@ export default {
FullScreenBar,
ThemeBar,
},
props: {
curSelectedIndex: {
type: Number,
default: -1,
},
},
data() {
return {
pulse: false,
isDot: true,
messageCount: 10,
screeningList: [
{
title: "社区筛查",
src: require("@/assets/img/DataCenter/shequ.png"),
},
{
title: "医院筛查",
src: require("@/assets/img/DataCenter/yiyuan.png"),
},
{
title: "体检筛查",
src: require("@/assets/img/DataCenter/tijian.png"),
},
],
fontList: [
{ fontSize: "12px", label: "A-" },
{ fontSize: "14px", label: "A" },
{ fontSize: "16px", label: "A+" },
],
fontIndex: localStorage.getItem("fontIndex") || 1,
}
},
computed: {
......@@ -46,6 +104,8 @@ export default {
feedBackNumber: "user/feedBackNumber",
}),
},
created() {},
mounted() {},
methods: {
handleCollapse() {
this.$store.dispatch("settings/changeCollapse")
......@@ -60,6 +120,14 @@ export default {
this.pulse = false
}, 1000)
},
openModalFlag() {
this.$emit("openModalFlag")
},
changeFont(i) {
this.fontIndex = i
this.$store.commit("table/setFontIndex", i)
localStorage.setItem("fontIndex", i)
},
},
}
</script>
......@@ -104,61 +172,65 @@ export default {
}
}
}
.right-panel {
.userInfo {
display: flex;
align-content: center;
align-items: center;
justify-content: flex-end;
height: 74px;
::v-deep {
.user-avatar {
margin-top: 2px;
margin-right: 5px;
font-weight: 600;
cursor: pointer;
}
.user-name {
position: relative;
margin-right: 35px;
margin-left: 5px;
font-weight: 600;
cursor: pointer;
}
.user-name + i {
position: absolute;
top: 4px;
right: 15px;
}
svg {
width: 1em;
height: 1em;
margin-right: 20px;
font-size: $base-font-size-big;
color: $base-color-gray;
padding-right: 40px;
.fontSelect {
display: flex;
margin-right: 20px;
.font {
width: 40px;
height: 40px;
background: #4e68ff;
border-radius: 4px;
border: 1px solid #ffffff;
text-align: center;
line-height: 40px;
cursor: pointer;
fill: $base-color-gray;
margin-left: 20px;
}
button {
svg {
margin-right: 0;
color: $base-color-white;
cursor: pointer;
fill: $base-color-white;
.active {
box-sizing: border-box;
background: #ffffff;
height: 40px;
color: #4e68ff;
padding: 1px;
.label {
height: 36px;
border: 1px solid #4e68ff;
}
}
.el-badge {
margin-right: 20px;
padding: 0 5px;
svg {
margin-right: 0px;
}
}
.community {
width: 106px;
height: 30px;
white-space: nowrap;
background: rgba(255, 255, 255, 0.1);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
img {
margin-right: 4px;
width: 18px;
height: 18px;
}
}
.user {
white-space: nowrap;
margin-left: 40px;
height: 30px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
color: #fff;
img {
margin-right: 4px;
width: 18px;
height: 18px;
}
}
}
......
......@@ -32,7 +32,10 @@
}"
>
<div :class="header === 'fixed' ? 'fixed-header' : ''">
<nav-bar></nav-bar>
<nav-bar
:cur-selected-index="curSelectedIndex"
@openModalFlag="openModalFlag"
></nav-bar>
</div>
<side-bar></side-bar>
<div class="vab-main" :class="collapse ? 'is-collapse-main' : ''">
......@@ -40,6 +43,51 @@
</div>
</div>
<back-to-top transition-name="fade"></back-to-top>
<el-dialog
:title="''"
:visible="modalFlag"
:close-on-click-modal="false"
:close-on-press-escape="false"
:show-close="false"
width="70%"
>
<div class="modalContent">
<div class="title">请选择您的筛查填报场景</div>
<ul class="list">
<li
v-for="(item, index) in screeningList"
:key="index"
@click="selectedIndex = index"
>
<div class="screeningItem">
<div class="circle">
<img
v-if="selectedIndex !== index"
src="~@/assets/img/DataCenter/circle.png"
alt=""
srcset=""
/>
<img
v-if="selectedIndex == index"
src="~@/assets/img/DataCenter/selected.png"
alt=""
srcset=""
/>
</div>
<div class="itemTitle">{{ item.title }}</div>
</div>
<div class="ItemIamge">
<img :src="item.src" alt="" />
</div>
</li>
</ul>
<div class="submit">
<el-button type="primary" class="btn" @click="setSelectedIndex"
>保存</el-button
>
</div>
</div>
</el-dialog>
</div>
</template>
......@@ -68,7 +116,25 @@ export default {
},
mixins: [Media],
data() {
return {}
return {
modalFlag: false,
screeningList: [
{
title: "社区筛查",
src: require("@/assets/img/DataCenter/shequ.png"),
},
{
title: "医院筛查",
src: require("@/assets/img/DataCenter/yiyuan.png"),
},
{
title: "体检筛查",
src: require("@/assets/img/DataCenter/tijian.png"),
},
],
selectedIndex: 0,
curSelectedIndex: "",
}
},
computed: {
...mapGetters({
......@@ -84,7 +150,18 @@ export default {
}
},
},
created() {
this.selectedIndex = localStorage.getItem("selectedIndex") || ""
this.curSelectedIndex = this.selectedIndex ? this.selectedIndex - 0 : -1
},
mounted() {
if (!this.selectedIndex) {
this.modalFlag = true
this.selectedIndex = 0
} else {
this.selectedIndex = this.selectedIndex - 0
this.curSelectedIndex = this.selectedIndex ? this.selectedIndex : -1
}
this.$nextTick(() => {
window.addEventListener(
"storage",
......@@ -100,6 +177,15 @@ export default {
...mapActions({
handleFoldSideBar: "settings/foldSideBar",
}),
setSelectedIndex() {
console.log(this.selectedIndex)
this.curSelectedIndex = this.selectedIndex
localStorage.setItem("selectedIndex", this.selectedIndex)
this.modalFlag = false
},
openModalFlag() {
this.modalFlag = true
},
},
}
</script>
......@@ -238,4 +324,63 @@ export default {
height: calc(100vh - 90px);
}
}
::v-deep .el-dialog__header {
display: none;
}
.modalContent {
padding: 60px;
.title {
text-align: center;
height: 30px;
font-size: 24px;
font-family: AlibabaPuHuiTiM;
color: #333333;
line-height: 30px;
margin-bottom: 60px;
}
.list {
display: flex;
justify-content: space-between;
li {
cursor: pointer;
}
.screeningItem {
display: flex;
.circle {
width: 26px;
height: 26px;
margin-right: 12px;
img {
width: 100%;
height: 100%;
}
}
.itemTitle {
height: 24px;
font-size: 18px;
font-family: AlibabaPuHuiTiM;
color: #333333;
font-weight: bold;
line-height: 24px;
}
}
.ItemIamge {
width: 90%;
// height: 180px;
margin-top: 14px;
img {
width: 100%;
height: 100%;
}
}
}
.submit {
margin-top: 60px;
text-align: center;
.btn {
width: 100px;
height: 32px;
}
}
}
</style>
......@@ -6,12 +6,9 @@ import store from "./store"
import router from "./router"
import "./plugins"
import "./mixins"
import iView from "view-design"
import "view-design/dist/styles/iview.css"
import "@/assets/style/common.scss"
// const { mockXHR } = require("../mock/static")
// mockXHR()
Vue.use(iView)
Vue.config.productionTip = false
new Vue({
......
......@@ -9,7 +9,7 @@ export const constantRoutes = [
{
path: "/home",
name: "Home",
redirect: "/home",
// redirect: "/home",
component: layout,
children: [
{
......
const state = {
fontIndex: localStorage.getItem("fontIndex") || 1,
}
const getters = {
fontIndex: (state) => state.fontIndex,
}
const mutations = {
setFontIndex(state, fontIndex) {
state.fontIndex = fontIndex
},
}
const actions = {}
export default {
state,
getters,
mutations,
actions,
}
......@@ -5,8 +5,8 @@
<video :src="videoSrc" controls class="video" />
</div>
<div class="right box tabbox">
<Tabs :value="curTab">
<TabPane
<el-tabs v-model="curTab">
<el-tab-pane
v-for="(e, index) in tabList"
:key="index"
:label="e.title"
......@@ -23,8 +23,8 @@
</div>
</li>
</ul>
</TabPane>
</Tabs>
</el-tab-pane>
</el-tabs>
</div>
</div>
<!-- 数据分析 -->
......
<template>
<div>数据概览</div>
<div class="dataCenter">
<div class="header">
<div
v-for="(item, index) in headList"
:key="index"
:class="['btn', selectedIndex == index ? 'active' : '']"
@click="setSelectedIndex(index)"
>
{{ item }}
</div>
</div>
<customs-table
ref="table"
:table-data="tableData"
:columns="columns"
:header-class="'newHeader'"
:list-loading="listLoading"
:current-page="pageIndex"
:total-count="total"
:page-sizes="pageSizes"
:page-size="pageSize"
@pageSizeChange="handleSizeChange"
@currentPageChange="handleCurrentChange"
/>
</div>
</template>
<script>
import CustomsTable from "@/components/CustomsTable"
import paginationMixin from "@/components/TabComponents/mixin"
export default {
// 数据概览
name: "",
components: {
CustomsTable,
},
mixins: [paginationMixin],
data() {
return {}
return {
listLoading: false,
selectedIndex: sessionStorage.getItem("homeSelectedIndex") - 0 || 0,
headList: ["社区筛查", "医院筛查", "体检筛查"],
columns: [
{
label: "医联体",
minWidth: 120,
value: "name",
},
{
label: "累计上报量",
minWidth: 120,
value: "1",
},
{
label: "最近一季度上报量",
minWidth: 120,
value: "2",
},
{
label: "累计审核合格量",
minWidth: 120,
value: "3",
},
{
label: "高风险",
minWidth: 120,
value: "4",
},
{
label: "中风险",
minWidth: 120,
value: "5",
},
{
label: "低风险",
minWidth: 120,
value: "6",
},
{
label: "胃癌",
minWidth: 120,
value: "7",
},
{
label: "早期胃癌",
minWidth: 120,
value: "8",
},
{
label: "食道癌",
minWidth: 120,
value: "9",
},
],
tableData: [
{
name: "1",
1: 2,
},
],
}
},
methods: {},
mounted() {},
watch: {},
mounted() {},
methods: {
setSelectedIndex(i) {
console.log(this.selectedIndex)
this.selectedIndex = i
sessionStorage.setItem("homeSelectedIndex", this.selectedIndex)
},
},
}
</script>
<style lang="scss" scoped></style>
<style lang="scss" scoped>
.dataCenter {
padding: 24px;
height: 100%;
display: flex;
flex-direction: column;
.header {
display: flex;
margin-bottom: 20px;
.btn {
cursor: pointer;
width: 112px;
height: 48px;
background: #ffffff;
border-radius: 4px;
border: 1px solid #dddddd;
font-size: 16px;
font-family: AlibabaPuHuiTiM;
color: #000;
text-align: center;
line-height: 48px;
margin-right: 24px;
}
.active {
background: #4e68ff;
border: none;
color: #ffffff;
}
}
}
</style>
<template>
<div class="screeningSearch">
<div class="top">
<form-components :forms="formList"></form-components>
</div>
<div class="bot">
<customs-table
ref="table"
:table-data="tableData"
:columns="columns"
:header-class="'newHeader'"
:list-loading="listLoading"
:current-page="pageIndex"
:total-count="total"
:page-sizes="pageSizes"
:page-size="pageSize"
@pageSizeChange="handleSizeChange"
@currentPageChange="handleCurrentChange"
/>
</div>
</div>
</template>
<script>
import FormComponents from "@/components/FormComponents"
import CustomsTable from "@/components/CustomsTable"
import paginationMixin from "@/components/TabComponents/mixin"
export default {
components: {
FormComponents,
CustomsTable,
},
mixins: [paginationMixin],
data() {
return {
listLoading: false,
keyword: "",
modifiedFlag: false,
columns: [
{
label: "医联体",
minWidth: 120,
value: "groupName",
},
{
label: "姓名",
minWidth: 120,
value: "name",
},
{
label: "性别",
minWidth: 120,
value: "sex",
},
{
label: "身份证",
minWidth: 120,
value: "idCard",
},
{
label: "年龄",
minWidth: 120,
value: "age",
},
{
label: "筛查时间",
minWidth: 120,
value: "screenTime",
},
{
label: "风险评估结果",
minWidth: 120,
value: "result",
},
{
label: "上次随访时间",
minWidth: 120,
value: "targetFieldCode",
},
{
label: "筛查审核状态",
minWidth: 180,
value: "createTime",
},
{
label: "操作",
width: 220,
fixed: "right",
operType: "button",
operations: [
{
func: this.rowOpration,
formatter(row) {
return {
label: " 录入",
type: "text",
}
},
},
],
},
],
tableData: [
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第十个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第十个",
},
{
groupName: "第一个",
},
{
groupName: "第er一个",
},
],
formList: [
{
type: "select",
label: "筛查时间",
prop: "screeningTime",
placeholder: "请选择时间",
rules: [],
opts: [{ label: "123", value: "1" }],
},
{
type: "select",
label: "随访审核状态",
prop: "screeningStatus",
placeholder: "请选择随访状态",
rules: [],
opts: [{ label: "123", value: "1" }],
},
{
type: "select",
label: "随访进度",
prop: "screeningProgress",
placeholder: "请选择随访进度",
rules: [],
opts: [{ label: "123", value: "1" }],
},
{
type: "select",
label: "计划随访时间",
prop: "planScreeningTime",
placeholder: "请选择计划随访时间",
rules: [],
opts: [{ label: "123", value: "1" }],
},
{
type: "input",
label: "关键词",
prop: "keyWord",
placeholder: "请输入医联体/姓名/身份证",
rules: [],
},
{
type: "btn",
list: [
{
btnType: "button",
type: "",
style: {
width: "80px",
height: "32px",
borderRadius: "4px",
fontSize: "14px",
marginLeft: "40px",
},
btnText: "查询",
func: () => {
this.onSearch()
},
},
{
btnType: "tobeModified",
tobeModified: 20,
},
],
},
],
}
},
watch: {},
mounted() {
this.total = 20
},
methods: {
changeModified() {
this.modifiedFlag = !this.modifiedFlag
},
setSelectedIndex(i) {
console.log(this.selectedIndex)
this.selectedIndex = i
sessionStorage.setItem("homeSelectedIndex", this.selectedIndex)
},
handleSizeChange(v) {
console.log(v)
},
onSearch() {
console.log(123456)
},
rowOpration(row, index) {
console.log(row, index)
},
},
}
</script>
<style lang="scss" scoped>
.screeningSearch {
.top {
width: 100%;
// height: 72px;
padding: 0 116px 0 44px;
display: flex;
justify-content: space-between;
align-items: center;
}
.bot {
padding: 0 24px;
}
}
::v-deep {
.el-table {
thead {
.newHeader {
height: 60px;
background: #f6f6f6;
}
}
}
}
</style>
<template>
<div class="screeningSearch">
<div class="top">
<form-components :forms="formList"></form-components>
</div>
<div class="bot">
<customs-table
ref="table"
:table-data="tableData"
:columns="columns"
:header-class="'newHeader'"
:list-loading="listLoading"
:current-page="pageIndex"
:total-count="total"
:page-sizes="pageSizes"
:page-size="pageSize"
@pageSizeChange="handleSizeChange"
@currentPageChange="handleCurrentChange"
/>
</div>
</div>
</template>
<script>
import FormComponents from "@/components/FormComponents"
import CustomsTable from "@/components/CustomsTable"
import paginationMixin from "@/components/TabComponents/mixin"
export default {
components: {
CustomsTable,
FormComponents,
},
mixins: [paginationMixin],
data() {
return {
listLoading: false,
keyword: "",
modifiedFlag: false,
columns: [
{
label: "医联体",
value: "name",
minWidth: 120,
},
{
label: "姓名",
value: "1",
minWidth: 120,
},
{
label: "性别",
value: "2",
minWidth: 120,
},
{
label: "身份证",
value: "3",
minWidth: 120,
},
{
label: "年龄",
minWidth: 120,
},
{
label: "筛查时间",
value: "5",
minWidth: 120,
},
{
label: "风险评估结果",
value: "6",
minWidth: 120,
},
{
label: "上次随访时间",
value: "7",
minWidth: 120,
},
{
label: "随访进度",
value: "8",
minWidth: 120,
},
{
label: "计划随访时间",
value: "9",
minWidth: 120,
},
{
label: "操作",
width: 220,
fixed: "right",
operType: "button",
operations: [
{
func: this.rowOpration,
formatter(row) {
return {
label: " 录入",
type: "text",
}
},
},
],
},
],
tableData: [
{
name: "1",
1: 2,
},
],
formList: [
{
xs: 24,
sm: 12,
md: 12,
lg: 7,
xl: 7,
type: "select",
label: "计划随访时间",
prop: "planScreeningTime",
placeholder: "请选择计划随访时间",
rules: [],
opts: [{ label: "123", value: "1" }],
},
{
xs: 24,
sm: 12,
md: 12,
lg: 7,
xl: 7,
type: "input",
label: "关键词",
prop: "keyWord",
placeholder: "请输入医联体/姓名/身份证",
rules: [],
},
{
xs: 24,
sm: 12,
md: 12,
lg: 7,
xl: 7,
type: "select",
label: "随访进度",
prop: "screeningProgress",
placeholder: "请选择随访进度",
rules: [],
opts: [{ label: "123", value: "1" }],
},
{
xs: 1,
sm: 2,
md: 2,
lg: 2,
xl: 2,
type: "btn",
list: [
{
btnType: "button",
type: "",
style: {
width: "80px",
height: "32px",
borderRadius: "4px",
fontSize: "14px",
marginLeft: "40px",
},
btnText: "查询",
func: () => {
this.onSearch()
},
},
// {
// btnType: "tobeModified",
// tobeModified: 20,
// },
],
},
],
}
},
watch: {},
mounted() {},
methods: {
changeModified() {
this.modifiedFlag = !this.modifiedFlag
},
setSelectedIndex(i) {
console.log(this.selectedIndex)
this.selectedIndex = i
sessionStorage.setItem("homeSelectedIndex", this.selectedIndex)
},
changePage(v) {
this.page[v.type] = v.value
console.log(this.page)
this.$refs.customTable.loading = false
},
onSearch() {
console.log(123456)
},
},
}
</script>
<style lang="scss" scoped>
.screeningSearch {
.top {
width: 100%;
// height: 72px;
padding: 0 116px 0 44px;
display: flex;
justify-content: space-between;
align-items: center;
}
.bot {
padding: 0 24px;
}
}
</style>
......@@ -2042,11 +2042,6 @@ async-limiter@~1.0.0:
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
async-validator@^3.3.0:
version "3.5.2"
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz#68e866a96824e8b2694ff7a831c1a25c44d5e500"
integrity sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==
async-validator@~1.8.1:
version "1.8.5"
resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-1.8.5.tgz#dc3e08ec1fd0dddb67e60842f02c0cd1cec6d7f0"
......@@ -2203,11 +2198,6 @@ base@^0.11.1:
mixin-deep "^1.2.0"
pascalcase "^0.1.1"
batch-processor@1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8"
integrity sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==
batch@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
......@@ -3655,11 +3645,6 @@ deepmerge@^1.2.0, deepmerge@^1.5.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753"
integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==
deepmerge@^2.2.1:
version "2.2.1"
resolved "https://registry.npmmirror.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==
default-gateway@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
......@@ -3954,13 +3939,6 @@ electron-to-chromium@^1.3.649:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.704.tgz#894205a237cbe0097d63da8f6d19e605dd13ab51"
integrity sha512-6cz0jvawlUe4h5AbfQWxPzb+8LzVyswGAWiGc32EJEmfj39HTQyNPkLXirc7+L4x5I6RgRkzua8Ryu5QZqc8cA==
element-resize-detector@^1.2.0:
version "1.2.4"
resolved "https://registry.npmmirror.com/element-resize-detector/-/element-resize-detector-1.2.4.tgz#3e6c5982dd77508b5fa7e6d5c02170e26325c9b1"
integrity sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==
dependencies:
batch-processor "1.0.0"
element-ui@^2.15.2:
version "2.15.3"
resolved "https://registry.yarnpkg.com/element-ui/-/element-ui-2.15.3.tgz#55108ab82a3bcc646e7b0570871c48ba96300652"
......@@ -6271,11 +6249,6 @@ js-base64@^2.1.9:
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
js-calendar@^1.2.3:
version "1.2.3"
resolved "https://registry.npmmirror.com/js-calendar/-/js-calendar-1.2.3.tgz#a583b0644b4e695ba394f344d103dbcc7a7a7d3e"
integrity sha512-dAA1/Zbp4+c5E+ARCVTIuKepXsNLzSYfzvOimiYD4S5eeP9QuplSHLcdhfqFSwyM1o1u6ku6RRRCyaZ0YAjiBw==
js-cookie@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8"
......@@ -6644,11 +6617,6 @@ lodash.memoize@^4.1.2:
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
lodash.throttle@^4.1.1:
version "4.1.1"
resolved "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
lodash.transform@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0"
......@@ -8110,11 +8078,6 @@ pnp-webpack-plugin@^1.6.4:
dependencies:
ts-pnp "^1.1.6"
popper.js@^1.14.6:
version "1.16.1"
resolved "https://registry.npmmirror.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b"
integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
portfinder@^1.0.26:
version "1.0.28"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
......@@ -10318,11 +10281,6 @@ timsort@^0.3.0:
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
tinycolor2@^1.4.1:
version "1.4.2"
resolved "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803"
integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==
title-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa"
......@@ -10774,11 +10732,6 @@ uuid@^3.3.2, uuid@^3.4.0:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
v-click-outside-x@^3.7.1:
version "3.7.1"
resolved "https://registry.npmmirror.com/v-click-outside-x/-/v-click-outside-x-3.7.1.tgz#aa03eaa0e41e44cb5207dcf86c2d9f0dd64084c1"
integrity sha512-WmUgmcIXr9clVpm1AYS/FgHtcDicfnfoxgQCNg4O6vfk9GVnxA0vSqO321ogUo0b7czYTidj7fQENvWFMWOkUg==
v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
......@@ -10836,20 +10789,6 @@ vfile@^4.0.0:
unist-util-stringify-position "^2.0.0"
vfile-message "^2.0.0"
view-design@^4.7.0:
version "4.7.0"
resolved "https://registry.npmmirror.com/view-design/-/view-design-4.7.0.tgz#98c4ec18ed70d1b58157007f8107a77158334846"
integrity sha512-WRvVRfsZciN0aJYlz+6b1zxs5G8tLFb4OUKOu+PiN0QyIGmdgWVziEyEmioYtJahQpueWiQpRYGzyxrpz3UkWQ==
dependencies:
async-validator "^3.3.0"
deepmerge "^2.2.1"
element-resize-detector "^1.2.0"
js-calendar "^1.2.3"
lodash.throttle "^4.1.1"
popper.js "^1.14.6"
tinycolor2 "^1.4.1"
v-click-outside-x "^3.7.1"
vm-browserify@^1.0.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment