Commit f3b41ea8 by 刘军

Initial commit

parents
> 1%
last 2 versions
not ie <= 8
.DS_Store
node_modules
/dist
example.html
favicon.ico
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
{
"tabWidth": 2,
"singleQuote": true,
"trailingComma": "all",
"semi": false
}
\ No newline at end of file
MIT License
Copyright (c) 2016 vue-manage-system
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
\ No newline at end of file
# vue-manage-system #
<a href="https://github.com/vuejs/vue">
<img src="https://img.shields.io/badge/vue-2.6.10-brightgreen.svg" alt="vue">
</a>
<a href="https://github.com/ElemeFE/element">
<img src="https://img.shields.io/badge/element--ui-2.8.2-brightgreen.svg" alt="element-ui">
</a>
<a href="https://github.com/lin-xin/vue-manage-system/blob/master/LICENSE">
<img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
</a>
<a href="https://github.com/lin-xin/vue-manage-system/releases">
<img src="https://img.shields.io/github/release/lin-xin/vue-manage-system.svg" alt="GitHub release">
</a>
<a href="http://blog.gdfengshuo.com/example/work/#/donate">
<img src="https://img.shields.io/badge/%24-donate-ff69b4.svg" alt="donate">
</a>
基于Vue.js + Element UI 的后台管理系统解d决方案。[线上地址](http://blog.gdfengshuo.com/example/work/)
本项目基于vue-cli3构建,如果是vue-cli2的请下载[旧版本V3.2.0](https://github.com/lin-xin/vue-manage-system/releases/tag/V3.2.0)
> React + Ant Design 的版本正在开发中,仓库地址:[react-manage-system](https://github.com/lin-xin/react-manage-system)
[English document](https://github.com/lin-xin/manage-system/blob/master/README_EN.md)
## 项目截图 ##
### 登录
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms3.png)
### 默认皮肤 ###
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms1.png)
### 浅绿色皮肤 ###
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms2.png)
## 赞赏
请作者喝杯咖啡吧!(微信号:linxin_20)
![微信扫一扫](http://blog.gdfengshuo.com/images/weixin.jpg)
## 前言 ##
之前在公司用了Vue + Element组件库做了个后台管理系统,基本很多组件可以直接引用组件库的,但是也有一些需求无法满足。像图片裁剪上传、富文本编辑器、图表等这些在后台管理系统中很常见的功能,就需要引用其他的组件才能完成。从寻找组件,到使用组件的过程中,遇到了很多问题,也积累了宝贵的经验。所以我就把开发这个后台管理系统的经验,总结成这个后台管理系统解决方案。
该方案作为一套多功能的后台框架模板,适用于绝大部分的后台管理系统(Web Management System)开发。基于vue.js,使用vue-cli@3.2.3脚手架快速生成项目目录,引用Element UI组件库,方便开发快速简洁好看的组件。分离颜色样式,支持手动切换主题色,而且很方便使用自定义主题色。
(已经升级到 vue-cli@3.2.3,请更新依赖)
## 功能 ##
- [x] Element UI
- [x] 登录/注销
- [x] Dashboard
- [x] 表格
- [x] Tab选项卡
- [x] 表单
- [x] 图表 :bar_chart:
- [x] 富文本编辑器
- [x] markdown编辑器
- [x] 图片拖拽/裁剪上传
- [x] 支持切换主题色 :sparkles:
- [x] 列表拖拽排序
- [x] 权限测试
- [x] 404 / 403
- [x] 三级菜单
- [x] 自定义图标
- [x] 可拖拽弹窗
- [x] 国际化
## 安装步骤 ##
```
git clone https://github.com/lin-xin/vue-manage-system.git // 把模板下载到本地
cd vue-manage-system // 进入模板目录
npm install // 安装项目依赖,等待安装完成之后,安装失败可用 cnpm 或 yarn
// 开启服务器,浏览器访问 http://localhost:8080
npm run serve
// 执行构建命令,生成的dist文件夹放在服务器下即可访问
npm run build
```
## 组件使用说明与演示 ##
### vue-schart ###
vue.js封装sChart.js的图表组件。访问地址:[vue-schart](https://github.com/linxin/vue-schart)
<p><a href="https://www.npmjs.com/package/vue-schart"><img src="https://img.shields.io/npm/dm/vue-schart.svg" alt="Downloads"></a></p>
```html
<template>
<div>
<schart class="wrapper"
:canvasId="canvasId"
:type="type"
:data="data"
:options="options"
></schart>
</div>
</template>
<script>
import Schart from 'vue-schart'; // 导入Schart组件
export default {
data: function(){
return {
canvasId: 'myCanvas', // canvas的id
type: 'bar', // 图表类型
data: [
{name: '2014', value: 1342},
{name: '2015', value: 2123},
{name: '2016', value: 1654},
{name: '2017', value: 1795},
],
options: { // 图表可选参数
title: 'Total sales of stores in recent years'
}
}
},
components: {
Schart
}
}
</script>
<style>
.wrapper{
width: 7rem;
height: 5rem;
}
</style>
```
## 其他注意事项 ##
### 一、如果我不想用到上面的某些组件呢,那我怎么在模板中删除掉不影响到其他功能呢? ###
举个栗子,我不想用 Vue-Quill-Editor 这个组件,那我需要分四步走。
第一步:删除该组件的路由,在目录 src/router/index.js 中,找到引入改组件的路由,删除下面这段代码。
```JavaScript
{
// 富文本编辑器组件
path: '/editor',
component: resolve => require(['../components/page/VueEditor.vue'], resolve)
},
```
第二步:删除引入该组件的文件。在目录 src/components/page/ 删除 VueEditor.vue 文件。
第三步:删除该页面的入口。在目录 src/components/common/Sidebar.vue 中,找到该入口,删除下面这段代码。
```js
{
index: 'editor',
title: '富文本编辑器'
},
```
第四步:卸载该组件。执行以下命令:
npm un vue-quill-editor -S
完成。
### 二、如何切换主题色呢? ###
第一步:打开 src/main.js 文件,找到引入 element 样式的地方,换成浅绿色主题。
```javascript
import 'element-ui/lib/theme-default/index.css'; // 默认主题
// import '../static/css/theme-green/index.css'; // 浅绿色主题
```
第二步:打开 src/App.vue 文件,找到 style 标签引入样式的地方,切换成浅绿色主题。
```javascript
@import "../static/css/main.css";
@import "../static/css/color-dark.css"; /*深色主题*/
/*@import "../static/css/theme-green/color-green.css"; !*浅绿色主题*!*/
```
第三步:打开 src/components/common/Sidebar.vue 文件,找到 el-menu 标签,把 background-color/text-color/active-text-color 属性去掉即可。
## License
[MIT](https://github.com/lin-xin/vue-manage-system/blob/master/LICENSE)
\ No newline at end of file
module.exports = {
presets: [
'@vue/app'
],
'ignore':['./src/static/webVideoCtrl.js']
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "vue-manage-system",
"version": "4.0.1",
"private": true,
"scripts": {
"dev": "npm run serve",
"serve": "vue-cli-service serve",
"build": "vue-cli-service build"
},
"dependencies": {
"@antv/g6": "^3.0.7-beta.1",
"axios": "^0.18.0",
"babel-polyfill": "^6.26.0",
"dg-table": "^0.2.0",
"echarts": "^4.3.0",
"element-theme-chalk": "^2.11.1",
"element-ui": "^2.13.0",
"file-saver": "^2.0.2",
"font-awesome": "^4.7.0",
"ginkgo-map": "^1.0.2",
"js-md5": "^0.7.3",
"jszip": "^3.2.2",
"less-loader": "^5.0.0",
"mavon-editor": "^2.6.17",
"quill": "^1.3.7",
"svg-progress-bar": "^0.1.17",
"vcolorpicker": "^0.1.8",
"vue": "^2.6.10",
"vue-amap": "^0.5.10",
"vue-circleprogressbar": "^2.0.0",
"vue-cropperjs": "^3.0.0",
"vue-i18n": "^8.10.0",
"vue-quill-editor": "^3.0.6",
"vue-router": "^3.0.1",
"vue-schart": "^1.0.0",
"vuedraggable": "^2.17.0",
"xlsx": "^0.15.1"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^3.2.0",
"@vue/cli-service": "^3.2.0",
"less": "^3.10.3",
"node-sass": "^4.12.0",
"sass-loader": "^8.0.0",
"script-loader": "^0.7.2",
"vue-template-compiler": "^2.5.21",
"vuex": "^3.1.1",
"webpack-cli": "^3.3.6"
}
}
module.exports = {
plugins: {
autoprefixer: {}
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
window.urlConfig = {
url: "http://192.168.6.131:10122/",
url2: "http://192.168.6.131:10123/",
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
<link rel="stylesheet" href="//at.alicdn.com/t/font_830376_qzecyukz0s.css">
<title>监测报表输出系统</title>
<script>document.write("<script src='./config.js?ver="+ new Date().getTime() + "'><\/script>"); </script>
</head>
<!-- <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> -->
<body>
<noscript>
<strong>We're sorry but vms doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
<style>
@import "./assets/css/main.css";
@import "./assets/css/color-dark.css"; /*深色主题*/
img{
width:24px;
height: 36px;
}
/*@import "./assets/css/theme-green/color-green.css"; 浅绿色主题*/
/* ---------------基础建模 BasedOnModeling------------- */
/* Material_classification_maintenance 物料分类维护 */
/* material_maintenance 物料维护
{Corresponding_material_classification 对应物料分类}
*/
/* factory_maintenance 工厂维护 */
/* Maintenance_workshop 车间维护 */
/* Production_line_maintenance 生产线维护 */
/* Section_maintenance 工段维护 */
/* Vehicle_classification 载具分类 */
/* Vehicle_maintenance 载具维护 */
/* factory_model 工厂建模 */
/* ----------------工艺建模 ProcessModeling--------------- */
/* Station_maintenance 工位维护 */
/* Standard_procedure_maintenance 标准工序维护 */
/* Product_process 产品工艺流程 */
/* ----------------车间维护 Workshop_task--------------------- */
/* production_order 生产订单
{
scdd_maintain 维护
scdd_affirm 确认
scdd_close 关闭
scdd_transmit 下达
}
*/
</style>
\ No newline at end of file
import axios from 'axios';
// 创建 axios 实例
const service = axios.create({
})
// request interceptor
service.interceptors.request.use(config => {
var token = localStorage.getItem("token")
// console.log("11111")
if (token) {
config.headers[ 'api_key' ] = token // 让每个请求携带自定义 token 请根据实际情况自行修改
}
return config
},(error) => {
return Promise.reject(error)
})
export {service as axios}
import * as api from './api';
export default api;
\ No newline at end of file
// const BASEURL = "http://120.27.199.219:18000/" //黄强
const BASEURL = "http://192.168.6.131:10223/" //徐建业
// const BASEURL = "http://106.15.197.131:12000/" //公司
const root = BASEURL + 'api/'
export default { root }
\ No newline at end of file
.header{
background-color: #409eff;
}
.login-wrap{
background: #324157;
}
.plugins-tips{
background: #eef1f6;
}
.plugins-tips a{
color: #20a0ff;
}
.el-upload--text em {
color: #20a0ff;
}
.pure-button{
background: #20a0ff;
}
.tags-li.active {
border: 1px solid #409EFF;
background-color: #409EFF;
}
.message-title{
color: #20a0ff;
}
.collapse-btn:hover{
/* background: rgb(40,52,70); */
}
\ No newline at end of file
[class*=" el-icon-lx"], [class^=el-icon-lx] {
font-family: lx-iconfont!important;
}
\ No newline at end of file
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1571023645467'); /* IE9 */
src: url('iconfont.eot?t=1571023645467#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAeAAAsAAAAADcQAAAcwAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCEWgqMFIoHATYCJAM0CxwABCAFhG0HgT8b0gtRlFBSL9lXh1jC1c+FEitZKyeXKN6NY65FRPkWmud/T8UD31zv38kk2eUCoyIG3fNsAcGIqrKtMGSBJX/cIdy0i2BWpZ55zSdmgUyM0gtNLSyEitK904kJhJkI8qZz5dsEkKGtAeME/Lqtauu/9mv1DE3QiPrwdr18k11mzsQbYokhQmkQivv03xAPEVKk1IiVbbJHJy8khqi86P0ElHWVCpk2aAQJpFJcCqjax1hMQJoxSRt6g+J0XnFu2hKZDzLF5AR6HeeC3w/fFKQksog/aNGOgYWgz0fs0UTM0eqwLn4NLk/nALuIiMGAlPCw0vVAjFKDYcrWX5U6jva0MMWP8X6X+xn38+4PvD/n/uL7Pz8IfdjtUe/WBqTrOjvfKGgv5Gj6By+TiwoqEqmisqoSIUdyFUvuZ8wfMWUQLBQHgwwoAwY5UB4k3dBAGBSA5sCgArQYBgnQz5gi5VPoFEU+dzUoB6gbpqjypXeLEqh553QEtAPCS5ImwPE2szIVJILAeSY/6a5Slccoze2H6iND1QSq1RJ6LS4VrpUjB072VW4+Tvnkbi6HW6HAV5xQaJpPxYgUzZ4mgXcKyKRlnmY3QLkUqW6s6foTF7uKV3k6qba4o4AyZNXa5PFuX+zyNUleIgW5pSduiyyPMlDLlgHSsVhOOpciyyKpcYI/oRvh9yci1/favtbrJX0+QyBA+f1VUjSGZDrf660kjaRBqKgbGKnalULHzS6wwtvDdVl+sbHNTbw/ksvX65fvOHIsZh0V+IU64DP0abwQyAgEzKpmz/YKBadLD+ilhwmEQ/nmIylbezB3vzfXsGTNctfm/VuFCONhb6IrcVot0pRsFOTqzcf14hUnOui2nUJItbO3uOz4iSUARW18Z7kzAms6KVc7j+tRRya4FJEsa2oINywBXSMKlBvbDXB3UG3zxCArhaOqlSIyXK26AUsZxxiUmGG8kRxLoUpqHBkbVGgJiUZMRdYqnd7b3nkcvju+1o7AvcDc39x/1z91vXeA8uK22KbAYNUFbSbrgLaWFvxOb2Khy+vwJUG3rzmQYvEEmvyFx5296JNNvS2nmnvCE44eXc/2XMnEVd6uul0Zx6xS58TlqEcPVFnitfEW1cBRmmz9IHWOBtjU7eL9IV6Tc0SD4oqfPONrpJJoS1QivWrA6aDj/yE+9dwdMSA3/Ivu6UA8G3Rqwp7eiOzbFsT/O35cxoR280WiF3EAdiVDe6L4yAkZgqtj3zAQ8Y/u2QCsH5JYhT07EdkXJHzvcwL/8iV9Ivq+BJ8wBoPJdsEvlXfzBfzvt5gAwiO1gMGBC3gSAN96wNfcQdPXMn0yj7dkWm+GqyOrknNAws5xv8Rz7dcW3Tfj8xWr+yeubXxjNUc4OP5++KCYyuoYSrlt+I0YOnG9LciKM8k2r/uP1e8Cew6VRlyPUDukXhe9WDelJel5km94MSb7GKDN1Jiv2kxUPGm61EisGfoH+ujw3G1/ftcvr/LocGQdGJeERUUhP77U6tPmt5HjpR7z8UCRmEUxJIpekQrSbOlK6RLUGiIVJN0R5EIkok/UI+ILKDK+5rphEo80W0H/8rNFHpGz6eAga4t+gr7Fip2eSyZInodFkhWSPIULEAe/T73EG6toWizZQVddTDm/o+HP/P2lKpNUjJ6LlyrVkp1A2tIUIWUkcYwYGRBaOBbPmK0jG8WDB88QZpBNLETHgon3HJMcYNySyLS0ZyMSjFJ4Fvp/TxhhxMq/F7b5rtW+w56aStGU5qKXBY1/ABql8XTyFOIs9BKNM05hfQAgdkHXAKQrMRYAYiW5DzTex36YrAshxvQFoHFa6xgAGj4eLAUHPQ/rW4ONuhSPhz/z/ez/a/LA6Zoe76SVf370zVVlXEB2E0unJ1BOUUJn5qM2ZKBBFeRtjos1Z0VqCxni5yoGpkZwgqGarcSJBGWxio/Z19Lvy8htbJknFjMMg0RBF4iKeqvTtsGQqRgNuaKJUDbI4IsrWuFgQlrCQN8YEDS3CxJ1zyBq7oY6bfsNMm09g1zzgEHZihB6zYq+gZH356CJh4VEQTXBmNlyWlp5eVg9DlrspSYuzQX9RsjZmCiRlZ6Zzw6G5ZCb4gRbhSWb52mC5tgyYpDxMFhayhJWji2GZj69iOet3TIy6KoT081sGZCbigOZ8N74QoQC1foMM1Y5en2evPDz40AWdqVMuIYZLX0jiGPDbJ6QJV1mB/VgubzTjFtptKlgkY2nBI1As0pWGcIgckClIsUiWKv3KgaZ8dIVDUhYdZNBK9Fd5fTlcdk7l72+Wflj1kISYkhDFvJQCMVQCuVQCdVQC3X5NlgKeagpZkzlPGs3cRxbmdslW2xmOHMpFKlC1gbFM+1VdVjXnEozs9Zq7ZfUFDGyHpaHWdhyS6FJqezuUiYt04CXsRVQbJs53blQVWznTDYbY55eypRDRQnd3wgAAAAA') format('woff2'),
url('iconfont.woff?t=1571023645467') format('woff'),
url('iconfont.ttf?t=1571023645467') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
url('iconfont.svg?t=1571023645467#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-delete:before {
content: "\e603";
}
.icon-jiantouarrow482:before {
content: "\e694";
}
.icon-circle:before {
content: "\e635";
}
.icon-close:before {
content: "\e6da";
}
.icon-quxian:before {
content: "\e61d";
}
.icon-jiantou-copy-copy:before {
content: "\e62f";
}
.icon-zhizhen:before {
content: "\e645";
}
.icon-gongdanguanli-gongda:before {
content: "\e713";
}
.icon-move:before {
content: "\e93f";
}
.icon-square:before {
content: "\e839";
}
.icon-jurassic_line:before {
content: "\e68d";
}
.icon-square-copy:before {
content: "\e83a";
}
!function(c){var t,o='<svg><symbol id="icon-delete" viewBox="0 0 1024 1024"><path d="M924.43026 238.663658 770.369466 238.663658l0-104.254435c0-38.566364-31.397081-69.990051-69.963445-69.990051L323.606259 64.419172c-38.566364 0-69.949118 31.423687-69.949118 69.990051l0 104.3363-154.334018 0.054235c-9.286504 0-18.013259 3.619434-24.595164 10.228969-6.568602 6.5553-10.188037 15.308661-10.160407 24.581861 0 19.173688 15.59621 34.81083 34.783201 34.81083l78.594009-0.013303L177.944761 889.430118c0 38.566364 31.382754 69.990051 69.963445 69.990051l528.225543 0c38.566364 0 69.963445-31.423687 69.963445-69.990051L846.097194 330.860477l-0.163729 0-0.013303-22.560832 78.539774-0.013303c19.188015 0 34.783201-15.637142 34.783201-34.851763C959.213461 254.259868 943.603949 238.663658 924.43026 238.663658zM412.347372 822.007543c-19.188015 0-34.783201-15.637142-34.783201-34.81083L377.399419 414.779771c0-19.173688 15.59621-34.824133 34.797527-34.824133 19.188015 0 34.783201 15.650445 34.783201 34.824133l0.163729 372.361683C447.143876 806.316166 431.521061 821.966611 412.347372 822.007543zM611.842962 822.007543c-19.201318 0-34.81083-15.637142-34.81083-34.81083L576.868403 414.779771c0-19.173688 15.59621-34.824133 34.783201-34.824133 19.201318 0 34.797527 15.650445 34.797527 34.824133l0.163729 372.361683C646.627187 806.316166 631.030977 821.966611 611.842962 822.007543zM323.401598 177.427992c0-23.844058 19.405979-43.210128 43.223431-43.210128l290.763247 0c23.844058 0 43.25106 19.365046 43.25106 43.210128l0 61.277622-377.237737 0.040932L323.401598 177.427992z" ></path></symbol><symbol id="icon-jiantouarrow482" viewBox="0 0 1024 1024"><path d="M183.75401767 337.40323006l-0.15205624 0.00724077c5.16267146-30.05645055-6.76288239-63.83465864-31.07015883-88.11297198l63.68984318-63.71880627c34.86432411 34.83536102 51.77877086 83.59472936 46.23233841 131.96309593-3.54073821 29.41926248 8.15311089 60.80801534 31.49736446 84.15226891 40.04871789 40.04871789 95.84611802 40.06319944 120.87747179 15.03184567l0.55029879 0.55029878c65.2900541-54.03789218 158.40640053-51.27191672 218.58446858 8.90615133 33.94474588 33.94474588 50.6781733 79.94537954 46.59437708 127.18418546L680.63037263 553.35205711c-1.64365557 20.03522011 3.83760992 40.91036993 14.85082632 59.22228596L778.54011108 695.6332552l48.88246148-88.31571364c1.64365557-2.94699479 4.80063279-5.03233754 7.72590526-5.09026373 2.92527247-0.07240773 4.90924439 1.94052728 4.80787357 4.86579975L834.36647429 808.71965477c-0.04344464 2.02741656-1.09335679 4.20688937-2.79493854 5.90847113-1.70158176 1.70158176-3.88829534 2.75873468-5.92295268 2.80942009l-201.61209564 5.57539555c-1.46263623 0.04344464-2.70080849-0.44168718-3.56246054-1.30333922-0.84717049-0.84717049-1.31782077-2.04189811-1.31057999-3.49729357 0.06516696-2.9180317 2.14326894-6.06776814 5.0975045-7.73314603l88.30847287-48.87522072-58.17961459-58.17961458c-36.00112554-32.75725904-55.39191681-80.16984352-52.46664434-128.49476546l-0.23894552 0.03620387c3.90277688-29.66544878-7.84899841-61.4741665-31.43943827-85.06460637-40.04871789-40.04871789-95.85335879-40.05595867-120.88471257-15.02460488l-0.56478033-0.56478033c-65.26109101 54.03789218-158.38467821 51.2791575-218.56274627-8.89891056C196.11401793 431.2508946 179.40231284 384.92442614 183.75401767 337.40323006z" ></path></symbol><symbol id="icon-circle" viewBox="0 0 1024 1024"><path d="M511.346619 64.089667c-246.965741 0-447.163319 200.197578-447.163319 447.163319 0 246.966765 200.197578 447.163319 447.163319 447.163319 246.944252 0 447.164343-200.197578 447.164343-447.163319C958.511985 264.287245 758.290871 64.089667 511.346619 64.089667zM511.346619 913.700895c-222.271316 0-402.446885-180.175569-402.446885-402.446885S289.075303 108.806101 511.346619 108.806101c222.271316 0 402.447908 180.175569 402.447908 402.446885S733.617935 913.700895 511.346619 913.700895z" ></path></symbol><symbol id="icon-close" viewBox="0 0 1024 1024"><path d="M692.992 227.52 512 408.576 331.008 227.52 227.52 331.008 408.576 512 227.52 692.992 331.008 796.48 512 615.424 692.992 796.48 796.48 692.992 615.424 512 796.48 331.008Z" ></path></symbol><symbol id="icon-quxian" viewBox="0 0 1280 1024"><path d="M1107.52366585 523.92991585c0-26.3671875-26.3671875-52.73437499-52.734375-52.734375-31.640625 0-52.73437499 26.3671875-52.734375 52.734375 0 36.91406251-10.54687499 142.3828125-58.00781251 195.1171875-26.3671875 26.3671875-58.00781251 36.91406251-100.19531249 36.9140625-73.82812499 0-126.5625-200.39062499-168.75000001-342.7734375-52.73437499-205.6640625-105.46875001-395.50781249-242.57812499-395.5078125C237.40647834 17.67991585 147.75804084 318.26585337 89.75022834 513.38304084c-10.54687499 42.1875-21.09375003 79.1015625-31.64062499 100.19531251-10.54687499 26.3671875 5.2734375 58.00781251 31.64062499 68.5546875 26.3671875 10.54687499 58.00781251-5.2734375 68.5546875-31.640625 10.54687499-26.3671875 21.09375003-63.28125002 36.91406251-110.7421875C232.13304085 397.36741585 316.50804084 123.14866585 432.52366585 123.14866585 490.53147834 123.14866585 543.26585334 312.99241585 580.17991585 439.55491584c58.00781251 205.6640625 116.015625 421.875 268.94531249 421.87500002 68.55468748 0 126.5625-21.09375003 168.75-68.55468751 94.92187501-100.1953125 89.64843749-263.671875 89.64843751-268.9453125z" ></path></symbol><symbol id="icon-jiantou-copy-copy" viewBox="0 0 1000 1000"><path d="M362.57 764.226h364.149c28.44 0 51.491-23.051 51.491-51.491v-364.149c0-28.44-23.051-51.491-51.491-51.491s-51.491 23.051-51.491 51.491v239.829l-349.073-349.073c-20.119-20.119-52.711-20.119-72.831 0s-20.119 52.711 0 72.831l349.073 349.073h-239.829c-14.202-0.001-27.093 5.754-36.415 15.076s-15.094 22.195-15.076 36.415c0 28.44 23.051 51.491 51.491 51.491z" ></path></symbol><symbol id="icon-zhizhen" viewBox="0 0 1024 1024"><path d="M806.152 553.109q-37.916-0.817-79.102 2.479-35.438 2.479-80.341 8.253t-91.863 18.141l121.131 200.232q8.253 15.662 9.466 32.141t-3.718 31.719-15.24 28.028-25.945 21.015q-14.844 8.253-31.324 9.466t-31.719-3.718-28.028-15.24-21.015-25.945l-101.355-224.938q-41.212 23.888-74.566 51.099t-57.27 51.099q-28.028 27.185-49.438 55.213l-1.661-672.364z" ></path></symbol><symbol id="icon-gongdanguanli-gongda" viewBox="0 0 1024 1024"><path d="M960.37 364.2v-25.59A60 60 0 0 0 942.59 296L725.88 81.31a60 60 0 0 0-42.36-17.37l-26 0.06H126.88a61.51 61.51 0 0 0-61.51 61.51v772A61.51 61.51 0 0 0 126.88 959h772a61.51 61.51 0 0 0 61.51-61.51V364.2zM811.86 925h-596a1.52 1.52 0 0 1-1.51-1.51V517.81A18.81 18.81 0 0 1 233.18 499h561.38a18.81 18.81 0 0 1 18.81 18.81v405.68a1.52 1.52 0 0 1-1.51 1.51z m114.51-18.81A18.81 18.81 0 0 1 907.56 925h-58.68a1.52 1.52 0 0 1-1.51-1.51v-401A57.49 57.49 0 0 0 789.88 465h-552a57.49 57.49 0 0 0-57.49 57.49v401a1.52 1.52 0 0 1-1.51 1.51h-60.7a18.81 18.81 0 0 1-18.81-18.81V118a20 20 0 0 1 20-20H681.3a25 25 0 0 1 17.64 7.28L919 324.33a25 25 0 0 1 7.36 17.72z m33.34-541.33l-3.57-3.56 3.58 3.55zM535.89 178h-299a56 56 0 0 0-56 56v88a56 56 0 0 0 56 56h299a56 56 0 0 0 56-56v-88a56 56 0 0 0-56-56z m22 148.7a17.29 17.29 0 0 1-17.3 17.3H232.17a17.29 17.29 0 0 1-17.3-17.3v-97.4a17.29 17.29 0 0 1 17.3-17.3h308.4a17.29 17.29 0 0 1 17.3 17.3z" ></path></symbol><symbol id="icon-move" viewBox="0 0 1024 1024"><path d="M759.568 703.92l199.504-199.488L759.12 304.48l-56.56 56.56L805.504 464H544V200.688l102.912 103.376 56.32-56.576L503.616 48l-200 199.92 57.008 56.576L464 201.568V464H200.608l102.944-102.944-56.576-56.56L47.04 504.432l199.52 199.488 56.56-56.56-103.36-103.36H464v262.416l-103.408-102.928-56.8 56.56L503.616 960 703.04 760.496l-56.128-56.576L544 807.296V544h262.352l-103.36 103.36z" fill="#565D64" ></path></symbol><symbol id="icon-square" viewBox="0 0 1024 1024"><path d="M725.333333 85.333333H298.666667a213.333333 213.333333 0 0 0-213.333334 213.333334v426.666666a213.333333 213.333333 0 0 0 213.333334 213.333334h426.666666a213.333333 213.333333 0 0 0 213.333334-213.333334V298.666667a213.333333 213.333333 0 0 0-213.333334-213.333334z m128 640a128 128 0 0 1-128 128H298.666667a128 128 0 0 1-128-128V298.666667a128 128 0 0 1 128-128h426.666666a128 128 0 0 1 128 128z" ></path></symbol><symbol id="icon-jurassic_line" viewBox="0 0 1024 1024"><path d="M64 480h896v64H64z" fill="#727272" ></path></symbol><symbol id="icon-square-copy" viewBox="0 0 1024 1024"><path d="M964.54833996 361.15055288L662.84944712 59.45166004a213.333333 213.333333 0 0 0-301.69889424 0l-301.69889284 301.69889284a213.333333 213.333333 0 0 0 0 301.69889424l301.69889284 301.69889284a213.333333 213.333333 0 0 0 301.69889424 0L964.54833996 662.84944712a213.333333 213.333333 0 0 0 0-301.69889424z m-362.03867197 543.05800795a128 128 0 0 1-181.01933598 0L119.79143917 602.50966799a128 128 0 0 1 0-181.01933598L421.49033201 119.79143917a128 128 0 0 1 181.01933598 0l301.69889284 301.69889284a128 128 0 0 1 0 181.01933598z" ></path></symbol></svg>',e=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss");if(e&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(t){console&&console.log(t)}}!function(t){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(t,0);else{var e=function(){document.removeEventListener("DOMContentLoaded",e,!1),t()};document.addEventListener("DOMContentLoaded",e,!1)}else document.attachEvent&&(a=t,l=c.document,i=!1,(n=function(){try{l.documentElement.doScroll("left")}catch(t){return void setTimeout(n,50)}o()})(),l.onreadystatechange=function(){"complete"==l.readyState&&(l.onreadystatechange=null,o())});function o(){i||(i=!0,a())}var a,l,i,n}(function(){var t,e;(t=document.createElement("div")).innerHTML=o,o=null,(e=t.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",function(t,e){e.firstChild?function(t,e){e.parentNode.insertBefore(t,e)}(t,e.firstChild):e.appendChild(t)}(e,document.body))})}(window);
\ No newline at end of file
{
"id": "1206595",
"name": "11",
"font_family": "iconfont",
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "256462",
"name": "delete",
"font_class": "delete",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "608316",
"name": "箭头",
"font_class": "jiantouarrow482",
"unicode": "e694",
"unicode_decimal": 59028
},
{
"icon_id": "939435",
"name": "circle",
"font_class": "circle",
"unicode": "e635",
"unicode_decimal": 58933
},
{
"icon_id": "1176891",
"name": "close",
"font_class": "close",
"unicode": "e6da",
"unicode_decimal": 59098
},
{
"icon_id": "1986972",
"name": "曲线",
"font_class": "quxian",
"unicode": "e61d",
"unicode_decimal": 58909
},
{
"icon_id": "2279253",
"name": "箭头",
"font_class": "jiantou-copy-copy",
"unicode": "e62f",
"unicode_decimal": 58927
},
{
"icon_id": "2404404",
"name": "指针",
"font_class": "zhizhen",
"unicode": "e645",
"unicode_decimal": 58949
},
{
"icon_id": "7674879",
"name": "保存",
"font_class": "gongdanguanli-gongda",
"unicode": "e713",
"unicode_decimal": 59155
},
{
"icon_id": "8827216",
"name": "move",
"font_class": "move",
"unicode": "e93f",
"unicode_decimal": 59711
},
{
"icon_id": "8953280",
"name": "square",
"font_class": "square",
"unicode": "e839",
"unicode_decimal": 59449
},
{
"icon_id": "10591744",
"name": "直线_图形对象_jurassic",
"font_class": "jurassic_line",
"unicode": "e68d",
"unicode_decimal": 59021
},
{
"icon_id": "11123344",
"name": "square",
"font_class": "square-copy",
"unicode": "e83a",
"unicode_decimal": 59450
}
]
}
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="iconfont" horiz-adv-x="1024" >
<font-face
font-family="iconfont"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="delete" unicode="&#58883;" d="M924.43026 573.336342 770.369466 573.336342l0 104.254435c0 38.566364-31.397081 69.990051-69.963445 69.990051L323.606259 747.580828c-38.566364 0-69.949118-31.423687-69.949118-69.990051l0-104.3363-154.334018-0.054235c-9.286504 0-18.013259-3.619434-24.595164-10.228969-6.568602-6.5553-10.188037-15.308661-10.160407-24.581861 0-19.173688 15.59621-34.81083 34.783201-34.81083l78.594009 0.013303L177.944761-77.430118c0-38.566364 31.382754-69.990051 69.963445-69.990051l528.225543 0c38.566364 0 69.963445 31.423687 69.963445 69.990051L846.097194 481.139523l-0.163729 0-0.013303 22.560832 78.539774 0.013303c19.188015 0 34.783201 15.637142 34.783201 34.851763C959.213461 557.740132 943.603949 573.336342 924.43026 573.336342zM412.347372-10.007543c-19.188015 0-34.783201 15.637142-34.783201 34.81083L377.399419 397.220229c0 19.173688 15.59621 34.824133 34.797527 34.824133 19.188015 0 34.783201-15.650445 34.783201-34.824133l0.163729-372.361683C447.143876 5.683834 431.521061-9.966611 412.347372-10.007543zM611.842962-10.007543c-19.201318 0-34.81083 15.637142-34.81083 34.81083L576.868403 397.220229c0 19.173688 15.59621 34.824133 34.783201 34.824133 19.201318 0 34.797527-15.650445 34.797527-34.824133l0.163729-372.361683C646.627187 5.683834 631.030977-9.966611 611.842962-10.007543zM323.401598 634.572008c0 23.844058 19.405979 43.210128 43.223431 43.210128l290.763247 0c23.844058 0 43.25106-19.365046 43.25106-43.210128l0-61.277622-377.237737-0.040932L323.401598 634.572008z" horiz-adv-x="1024" />
<glyph glyph-name="jiantouarrow482" unicode="&#59028;" d="M183.75401767 558.5967699400001l-0.15205624-0.00724077c5.16267146 30.05645055-6.76288239 63.83465864-31.07015883 88.11297198l63.68984318 63.71880627c34.86432411-34.83536102 51.77877086-83.59472936 46.23233841-131.96309593-3.54073821-29.41926248 8.15311089-60.80801534 31.49736446-84.15226891 40.04871789-40.04871789 95.84611802-40.06319944 120.87747179-15.03184567l0.55029879-0.55029878c65.2900541 54.03789218 158.40640053 51.27191672 218.58446858-8.90615133 33.94474588-33.94474588 50.6781733-79.94537954 46.59437708-127.18418546L680.63037263 342.64794288999997c-1.64365557-20.03522011 3.83760992-40.91036993 14.85082632-59.22228596L778.54011108 200.3667448l48.88246148 88.31571364c1.64365557 2.94699479 4.80063279 5.03233754 7.72590526 5.09026373 2.92527247 0.07240773 4.90924439-1.94052728 4.80787357-4.86579975L834.36647429 87.28034522999997c-0.04344464-2.02741656-1.09335679-4.20688937-2.79493854-5.90847113-1.70158176-1.70158176-3.88829534-2.75873468-5.92295268-2.80942009l-201.61209564-5.57539555c-1.46263623-0.04344464-2.70080849 0.44168718-3.56246054 1.30333922-0.84717049 0.84717049-1.31782077 2.04189811-1.31057999 3.49729357 0.06516696 2.9180317 2.14326894 6.06776814 5.0975045 7.73314603l88.30847287 48.87522072-58.17961459 58.17961458c-36.00112554 32.75725904-55.39191681 80.16984352-52.46664434 128.49476546l-0.23894552-0.03620387c3.90277688 29.66544878-7.84899841 61.4741665-31.43943827 85.06460637-40.04871789 40.04871789-95.85335879 40.05595867-120.88471257 15.02460488l-0.56478033 0.56478033c-65.26109101-54.03789218-158.38467821-51.2791575-218.56274627 8.89891056C196.11401793 464.7491054 179.40231284 511.07557386 183.75401767 558.5967699400001z" horiz-adv-x="1024" />
<glyph glyph-name="circle" unicode="&#58933;" d="M511.346619 831.910333c-246.965741 0-447.163319-200.197578-447.163319-447.163319 0-246.966765 200.197578-447.163319 447.163319-447.163319 246.944252 0 447.164343 200.197578 447.164343 447.163319C958.511985 631.712755 758.290871 831.910333 511.346619 831.910333zM511.346619-17.700895c-222.271316 0-402.446885 180.175569-402.446885 402.446885S289.075303 787.193899 511.346619 787.193899c222.271316 0 402.447908-180.175569 402.447908-402.446885S733.617935-17.700895 511.346619-17.700895z" horiz-adv-x="1024" />
<glyph glyph-name="close" unicode="&#59098;" d="M692.992 668.48 512 487.424 331.008 668.48 227.52 564.992 408.576 384 227.52 203.008 331.008 99.52 512 280.576 692.992 99.52 796.48 203.008 615.424 384 796.48 564.992Z" horiz-adv-x="1024" />
<glyph glyph-name="quxian" unicode="&#58909;" d="M1107.52366585 372.07008414999996c0 26.3671875-26.3671875 52.73437499-52.734375 52.734375-31.640625 0-52.73437499-26.3671875-52.734375-52.734375 0-36.91406251-10.54687499-142.3828125-58.00781251-195.1171875-26.3671875-26.3671875-58.00781251-36.91406251-100.19531249-36.9140625-73.82812499 0-126.5625 200.39062499-168.75000001 342.7734375-52.73437499 205.6640625-105.46875001 395.50781249-242.57812499 395.5078125C237.40647834 878.32008415 147.75804084 577.7341466299999 89.75022834 382.61695915999996c-10.54687499-42.1875-21.09375003-79.1015625-31.64062499-100.19531251-10.54687499-26.3671875 5.2734375-58.00781251 31.64062499-68.5546875 26.3671875-10.54687499 58.00781251 5.2734375 68.5546875 31.640625 10.54687499 26.3671875 21.09375003 63.28125002 36.91406251 110.7421875C232.13304085 498.63258415 316.50804084 772.85133415 432.52366585 772.85133415 490.53147834 772.85133415 543.26585334 583.00758415 580.17991585 456.44508416c58.00781251-205.6640625 116.015625-421.875 268.94531249-421.87500002 68.55468748 0 126.5625 21.09375003 168.75 68.55468751 94.92187501 100.1953125 89.64843749 263.671875 89.64843751 268.9453125z" horiz-adv-x="1280" />
<glyph glyph-name="jiantou-copy-copy" unicode="&#58927;" d="M362.57 131.774h364.149c28.44 0 51.491 23.051 51.491 51.491v364.149c0 28.44-23.051 51.491-51.491 51.491s-51.491-23.051-51.491-51.491v-239.829l-349.073 349.073c-20.119 20.119-52.711 20.119-72.831 0s-20.119-52.711 0-72.831l349.073-349.073h-239.829c-14.202 0.001-27.093-5.754-36.415-15.076s-15.094-22.195-15.076-36.415c0-28.44 23.051-51.491 51.491-51.491z" horiz-adv-x="1000" />
<glyph glyph-name="zhizhen" unicode="&#58949;" d="M806.152 342.891q-37.916 0.817-79.102-2.479-35.438-2.479-80.341-8.253t-91.863-18.141l121.131-200.232q8.253-15.662 9.466-32.141t-3.718-31.719-15.24-28.028-25.945-21.015q-14.844-8.253-31.324-9.466t-31.719 3.718-28.028 15.24-21.015 25.945l-101.355 224.938q-41.212-23.888-74.566-51.099t-57.27-51.099q-28.028-27.185-49.438-55.213l-1.661 672.364z" horiz-adv-x="1024" />
<glyph glyph-name="gongdanguanli-gongda" unicode="&#59155;" d="M960.37 531.8v25.59A60 60 0 0 1 942.59 600L725.88 814.69a60 60 0 0 1-42.36 17.37l-26-0.06H126.88a61.51 61.51 0 0 1-61.51-61.51v-772A61.51 61.51 0 0 1 126.88-63h772a61.51 61.51 0 0 1 61.51 61.51V531.8zM811.86-29h-596a1.52 1.52 0 0 0-1.51 1.51V378.19A18.81 18.81 0 0 0 233.18 397h561.38a18.81 18.81 0 0 0 18.81-18.81v-405.68a1.52 1.52 0 0 0-1.51-1.51z m114.51 18.81A18.81 18.81 0 0 0 907.56-29h-58.68a1.52 1.52 0 0 0-1.51 1.51v401A57.49 57.49 0 0 1 789.88 431h-552a57.49 57.49 0 0 1-57.49-57.49v-401a1.52 1.52 0 0 0-1.51-1.51h-60.7a18.81 18.81 0 0 0-18.81 18.81V778a20 20 0 0 0 20 20H681.3a25 25 0 0 0 17.64-7.28L919 571.67a25 25 0 0 0 7.36-17.72z m33.34 541.33l-3.57 3.56 3.58-3.55zM535.89 718h-299a56 56 0 0 1-56-56v-88a56 56 0 0 1 56-56h299a56 56 0 0 1 56 56v88a56 56 0 0 1-56 56z m22-148.7a17.29 17.29 0 0 0-17.3-17.3H232.17a17.29 17.29 0 0 0-17.3 17.3v97.4a17.29 17.29 0 0 0 17.3 17.3h308.4a17.29 17.29 0 0 0 17.3-17.3z" horiz-adv-x="1024" />
<glyph glyph-name="move" unicode="&#59711;" d="M759.568 192.08l199.504 199.488L759.12 591.52l-56.56-56.56L805.504 432H544V695.312l102.912-103.376 56.32 56.576L503.616 848l-200-199.92 57.008-56.576L464 694.432V432H200.608l102.944 102.944-56.576 56.56L47.04 391.568l199.52-199.488 56.56 56.56-103.36 103.36H464v-262.416l-103.408 102.928-56.8-56.56L503.616-64 703.04 135.504l-56.128 56.576L544 88.704V352h262.352l-103.36-103.36z" horiz-adv-x="1024" />
<glyph glyph-name="square" unicode="&#59449;" d="M725.333333 810.666667H298.666667a213.333333 213.333333 0 0 1-213.333334-213.333334v-426.666666a213.333333 213.333333 0 0 1 213.333334-213.333334h426.666666a213.333333 213.333333 0 0 1 213.333334 213.333334V597.333333a213.333333 213.333333 0 0 1-213.333334 213.333334z m128-640a128 128 0 0 0-128-128H298.666667a128 128 0 0 0-128 128V597.333333a128 128 0 0 0 128 128h426.666666a128 128 0 0 0 128-128z" horiz-adv-x="1024" />
<glyph glyph-name="jurassic_line" unicode="&#59021;" d="M64 416h896v-64H64z" horiz-adv-x="1024" />
<glyph glyph-name="square-copy" unicode="&#59450;" d="M964.54833996 534.8494471199999L662.84944712 836.54833996a213.333333 213.333333 0 0 1-301.69889424 0l-301.69889284-301.69889284a213.333333 213.333333 0 0 1 0-301.69889424l301.69889284-301.69889284a213.333333 213.333333 0 0 1 301.69889424 0L964.54833996 233.15055287999996a213.333333 213.333333 0 0 1 0 301.69889424z m-362.03867197-543.05800795a128 128 0 0 0-181.01933598 0L119.79143917 293.49033201a128 128 0 0 0 0 181.01933598L421.49033201 776.20856083a128 128 0 0 0 181.01933598 0l301.69889284-301.69889284a128 128 0 0 0 0-181.01933598z" horiz-adv-x="1024" />
</font>
</defs></svg>
* {
margin: 0;
padding: 0;
}
html,
body,
#app,
.wrapper {
width: 100%;
height: 100%;
overflow: hidden;
}
body {
font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif;
}
a {
text-decoration: none
}
.content-box {
position: absolute;
left: 250px;
right: 0;
top: 70px;
bottom: 0;
padding-bottom: 30px;
-webkit-transition: left .3s ease-in-out;
transition: left .3s ease-in-out;
background: #f0f0f0;
}
.content {
width: auto;
height: 100%;
padding: 10px;
overflow-y: scroll;
box-sizing: border-box;
}
.content-collapse {
left: 65px;
}
.container {
padding: 30px;
background: #fff;
border: 1px solid #ddd;
border-radius: 5px;
}
.crumbs {
margin: 10px 0;
}
.pagination {
margin: 20px 0;
text-align: right;
}
.plugins-tips {
padding: 20px 10px;
margin-bottom: 20px;
}
.el-button+.el-tooltip {
margin-left: 10px;
}
.el-table tr:hover {
background: #f6faff;
}
.mgb20 {
margin-bottom: 20px;
}
.move-enter-active,
.move-leave-active {
transition: opacity .5s;
}
.move-enter,
.move-leave {
opacity: 0;
}
/*BaseForm*/
.form-box {
width: 600px;
}
.form-box .line {
text-align: center;
}
.el-time-panel__content::after,
.el-time-panel__content::before {
margin-top: -7px;
}
.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) {
padding-bottom: 0;
}
/*Upload*/
.pure-button {
width: 150px;
height: 40px;
line-height: 40px;
text-align: center;
color: #fff;
border-radius: 3px;
}
.g-core-image-corp-container .info-aside {
height: 45px;
}
.el-upload--text {
background-color: #fff;
border: 1px dashed #d9d9d9;
border-radius: 6px;
box-sizing: border-box;
width: 360px;
height: 180px;
text-align: center;
cursor: pointer;
position: relative;
overflow: hidden;
}
.el-upload--text .el-icon-upload {
font-size: 67px;
color: #97a8be;
margin: 40px 0 16px;
line-height: 50px;
}
.el-upload--text {
color: #97a8be;
font-size: 14px;
text-align: center;
}
.el-upload--text em {
font-style: normal;
}
/*VueEditor*/
.ql-container {
min-height: 400px;
}
.ql-snow .ql-tooltip {
transform: translateX(117.5px) translateY(10px) !important;
}
.editor-btn {
margin-top: 20px;
}
/*markdown*/
.v-note-wrapper .v-note-panel {
min-height: 500px;
}
.header{
background-color: #07c4a8;
}
.login-wrap{
background: rgba(56, 157, 170, 0.82);;
}
.plugins-tips{
background: #f2f2f2;
}
.plugins-tips a{
color: #00d1b2;
}
.el-upload--text em {
color: #00d1b2;
}
.pure-button{
background: #00d1b2;
}
.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, .pagination > .active > span, .pagination > .active > span:hover, .pagination > .active > span:focus {
background-color: #00d1b2 !important;
border-color: #00d1b2 !important;
}
.tags-li.active {
border: 1px solid #00d1b2;
background-color: #00d1b2;
}
.collapse-btn:hover{
background: #00d1b2;
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
.list {
position: absolute;
width: 100%;
height: 100%;
}
.wrap {
position: relative;
height: 100%;
width: 100%;
}
@keyframes show {
0% {
opacity: 0;
left: 532px;
/* // 从何处开始 */
}
100% {
opacity: 1;
left: 0;
}
}
@keyframes hide {
0% {
opacity: 1;
left: 0;
}
100% {
opacity: 0;
left: -532px;
/* // 从何处开始 */
}
}
.show-enter-active {
animation: show 0.5s;
}
.show-leave-active {
animation: hide 0.5s;
}
.show-leave-to {
opacity: 0;
}
\ No newline at end of file
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
normalize.css 中也包含这行 */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
import Vue from 'vue'
const Bus = new Vue();
export default Bus
\ No newline at end of file
<template>
<!-- 化药参考文献 -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="saveInfo" style="margin: 10px;">保存</el-button>
</header>
<main>
<quill-editor v-model="informedConsent" ref="myQuillEditor" class="editer" style="padding:10px">
</quill-editor>
</main>
</div>
</template>
<script>
import { GetChemicalDrugTxt,SaveChemicalDrugTxt } from "../../api/api";
export default {
data() {
return {
informedConsent:'',
OID:''
}
},
mounted(){
this.getData()
},
methods: {
getData(){
GetChemicalDrugTxt().then(res=>{
this.informedConsent=res.data
})
},
saveInfo(){
let para={
chemicalDrugReferencesTxt:this.informedConsent
}
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveChemicalDrugTxt(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
}
},
}
</script>
<style scoped>
header {
height: 40px;
/* border:1px solid red; */
width: 100%;
}
</style>
<template>
<!-- 相关基因列表 -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="addList">添加</el-button>
<el-button type="success" @click="saveList">保存</el-button>
<el-button type="primary" @click="downModel('相关基因列表模板.xlsx')">导入模板下载</el-button>
<el-upload class="upload-demo" ref="fileExcel" action="/" accept=".xlsx, .xls" :before-upload="beforeUpload">
<el-button type="primary">导入</el-button>
</el-upload>
<el-button type="danger" @click="delList">删除</el-button>
<el-input placeholder="请输入查询条件" prefix-icon="el-icon-search" v-model="queryCondition" @keyup.enter.native="getData()" class="searchClass" clearable @clear="getData()" style="width:20%"></el-input>
</header>
<main>
<el-table ref="multipleTable" :data="tableData" border :height='tableheight' highlight-current-row @row-click="rowclick" @selection-change="handleSelectionChange" @cell-click="clickCell">
<el-table-column type="selection"></el-table-column>
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope"><span>{{scope.$index+(page.pageindex - 1) * page.pagesize + 1}} </span></template>
</el-table-column>
<el-table-column prop="geneName" label="名称">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit1" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.geneName"></el-input>
<span v-else >{{ scope.row.geneName}}</span>
</template>
</el-table-column>
<el-table-column prop="sortNo" label="排序">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.sortNo"></el-input>
<span v-else >{{ scope.row.sortNo}}</span>
</template>
</el-table-column>
<el-table-column prop="type" label="类型">
<template slot-scope="scope">
<el-select v-model="scope.row.type" placeholder="请选择" @change="textChange(scope.$index,scope.row)">
<el-option v-for="item in codeTable" :key="item.codeID" :label="item.codeName" :value="item.codeID"></el-option>
</el-select>
</template>
</el-table-column>
</el-table>
</main>
<footer>
<div class="block" style="text-align:center;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 20, 50, 100]" :page-size="page.pagesize" layout="total,sizes, prev, pager, next" :total="total" background :current-page="page.pageindex">
</el-pagination>
</div>
</footer>
</div>
</template>
<script>
import { GetGeneCorrelation,GetGuid,SaveGeneCorrelation,DelGeneCorrelation,ImportGeneCorrelation,GetImportTemplatePath,GetAllSonCodeTable } from "../../api/api";
export default {
data() {
return {
tableData: [],
page:{
pageindex:1,
pagesize:10
},
total:0,
tableheight: window.innerHeight - 220,
row:[],
queryCondition:'',
codeTable:[]
}
},
created(){
window.onresize = () => {
this.tableheight=window.innerHeight - 220
}
},
mounted(){
this.getData()
this.getCodeTable()
},
methods: {
getData(){
this.page.queryCondition=this.queryCondition
let para=this.page
GetGeneCorrelation(para).then(res=>{
if(res.status==='SUCCESS'){
res.data.data.forEach(item => {
item.edit=false
item.edit1=false
});
this.tableData=res.data.data
this.total=res.data.totalCount
}
})
},
getCodeTable(){
let para={CodeTableID:'Code_GeneType'}
GetAllSonCodeTable(para).then(res=>{
this.codeTable=res.data
})
},
handleCurrentChange(val) {
this.page.pageindex = val
this.getData()
},
handleSizeChange(val){
this.pagesize = val
this.getData()
},
// 点击单元格
clickCell(row, column, cell, event){
if(cell.cellIndex===2){
row.edit1 = true
}
if(cell.cellIndex===3){
row.edit= true
}
},
inputBlur(item) {
let tableD = this.tableData;
tableD.forEach(function (item) {
item.edit = false
item.edit1 = false
});
},
// 输入框内容发生变化事件
textChange(index,row){
this.tableData[index].id=0
},
//点击行触发,选中或不选中复选框
rowclick(row) {
// this.$refs.multipleTable.toggleRowSelection(row)
},
//选中列表行
handleSelectionChange(val) {
this.row=val
},
// 添加
addList(){
GetGuid().then(res=>{
let addForm={
geneCorrelationOID:res.data,
geneName: '',
sortNo: '',
edit:true,
edit1:true,
id:0
}
this.tableData.push(addForm)
})
},
// 保存
saveList(){
let para=[]
this.tableData.forEach(item=>{
if(item.id===0){
para.push(item)
}
})
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveGeneCorrelation(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 删除
delList(){
if(this.row.length===0){
this.$message({ type: 'error', message: '请先选择需要删除的内容'})
return
}
let para=[]
this.row.forEach(item=>{
para.push(item.geneCorrelationOID)
})
this.$confirm('确认删除吗?', '提示', { type: 'warning'}).then(()=>{
DelGeneCorrelation(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '删除成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 导入
beforeUpload(file) {
let formData = new FormData();
formData.append("Excel", file);
this.$confirm("确认导入吗?", "提示", { type: "warning" }).then(() => {
ImportGeneCorrelation(formData).then(res => {
if (res.status === "SUCCESS") {
this.$message({ type: "success", message: "导入成功!" });
this.getData();
} else {
this.$message({ type: "error", message: res.msg });
}
});
})
.catch(() => { return;});
},
downModel(data){
let para={FileName:data}
GetImportTemplatePath(para).then(res=>{
if(res.status==='SUCCESS'){
window.open('http://'+res.data)
}else{
this.$message({ type: 'error', message: res.msg});
}
})
}
},
directives: {
focus: {
inserted: function(el) {
el.querySelector('input').focus()
},
},
},
}
</script>
<style scoped>
header {
height: 40px;
padding:5px;
width: 100%;
}
.upload-demo{
display: inline-flex;
}
.upload-demo >>>.el-upload--text{
width: 100%;
height: 100%;
border: none;
margin: 0 5px;
border-radius: 3px;
}
</style>
<style>
.searchClass{
margin: 0 8px;
}
</style>
\ No newline at end of file
<template>
<!-- mis -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="addList">添加</el-button>
<el-button type="success" @click="saveList">保存</el-button>
<el-button type="danger" @click="delList">删除</el-button>
<el-input placeholder="请输入查询条件" prefix-icon="el-icon-search" v-model="queryCondition" @keyup.enter.native="getData()" class="searchClass" clearable @clear="getData()" style="width:20%"></el-input>
</header>
<main>
<el-table ref="multipleTable" :data="tableData" border :height='tableheight' highlight-current-row @row-click="rowclick" @selection-change="handleSelectionChange" @cell-click="clickCell">
<el-table-column type="selection"></el-table-column>
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope"><span>{{scope.$index+(page.pageindex - 1) * page.pagesize + 1}} </span></template>
</el-table-column>
<el-table-column prop="grade" label="范围">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit1" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.grade"></el-input>
<span v-else >{{ scope.row.grade}}</span>
</template>
</el-table-column>
<el-table-column prop="scope" label="等级">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.scope"></el-input>
<span v-else >{{ scope.row.scope}}</span>
</template>
</el-table-column>
<el-table-column prop="remark" label="说明">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit2" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.remark"></el-input>
<span v-else >{{ scope.row.remark}}</span>
</template>
</el-table-column>
</el-table>
</main>
<footer>
<div class="block" style="text-align:center;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 20, 50, 100]" :page-size="page.pagesize" layout="total,sizes, prev, pager, next" :total="total" background :current-page="page.pageindex">
</el-pagination>
</div>
</footer>
</div>
</template>
<script>
import { GetMISReport,GetGuid,SaveMISReport,DelMISReport } from "../../api/api";
export default {
data() {
return {
tableData: [],
page:{
pageindex:1,
pagesize:10
},
total:0,
tableheight: window.innerHeight - 220,
row:[],
queryCondition:''
}
},
created(){
window.onresize = () => {
this.tableheight=window.innerHeight - 220
}
},
mounted(){
this.getData()
},
methods: {
getData(){
this.page.queryCondition=this.queryCondition
let para=this.page
GetMISReport(para).then(res=>{
if(res.status==='SUCCESS'){
res.data.data.forEach(item => {
item.edit=false
item.edit1=false
item.edit2=false
});
this.tableData=res.data.data
this.total=res.data.totalCount
}
})
},
handleCurrentChange(val) {
this.page.pageindex = val
this.getData()
},
handleSizeChange(val){
this.pagesize = val
this.getData()
},
// 点击单元格
clickCell(row, column, cell, event){
if(cell.cellIndex===2){
row.edit1 = true
}
if(cell.cellIndex===3){
row.edit= true
}
if(cell.cellIndex===4){
row.edit2= true
}
},
inputBlur(item) {
let tableD = this.tableData;
tableD.forEach(function (item) {
item.edit = false
item.edit1 = false
item.edit2 = false
});
},
// 输入框内容发生变化事件
textChange(index,row){
this.tableData[index].id=0
},
//点击行触发,选中或不选中复选框
rowclick(row) {
// this.$refs.multipleTable.toggleRowSelection(row)
},
//选中列表行
handleSelectionChange(val) {
this.row=val
},
// 添加
addList(){
GetGuid().then(res=>{
let addForm={
misReportOID:res.data,
grade: '',
scope: '',
remark:'',
edit:true,
edit1:true,
edit2:true,
id:0
}
this.tableData.push(addForm)
})
},
// 保存
saveList(){
let para=[]
this.tableData.forEach(item=>{
if(item.id===0){
para.push(item)
}
})
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveMISReport(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 删除
delList(){
if(this.row.length===0){
this.$message({ type: 'error', message: '请先选择需要删除的内容'})
return
}
let para=[]
this.row.forEach(item=>{
para.push(item.misReportOID)
})
this.$confirm('确认删除吗?', '提示', { type: 'warning'}).then(()=>{
DelMISReport(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '删除成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
}
},
directives: {
focus: {
inserted: function(el) {
el.querySelector('input').focus()
},
},
},
}
</script>
<style scoped>
header {
height: 40px;
padding:5px;
width: 100%;
}
.upload-demo{
display: inline-flex;
}
.upload-demo >>>.el-upload--text{
width: 100%;
height: 100%;
border: none;
margin: 0 5px;
border-radius: 3px;
}
</style>
<template>
<!-- 知情通知书配置 -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="saveInfo" style="margin: 10px;">保存</el-button>
</header>
<main>
<quill-editor v-model="informedConsent" ref="myQuillEditor" class="editer" style="padding:10px">
</quill-editor>
</main>
</div>
</template>
<script>
import { GetInformedConsentTxt,SaveInformedConsentTxt } from "../../api/api";
export default {
data() {
return {
informedConsent:'',
OID:''
}
},
mounted(){
this.getData()
},
methods: {
getData(){
GetInformedConsentTxt().then(res=>{
this.informedConsent=res.data
})
},
saveInfo(){
let para={
informedConsentTxt:this.informedConsent
}
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveInformedConsentTxt(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
}
},
}
</script>
<style scoped>
header {
height: 40px;
/* border:1px solid red; */
width: 100%;
}
</style>
<template>
<!-- 靶药参考文献 -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="saveInfo" style="margin: 10px;">保存</el-button>
</header>
<main>
<quill-editor v-model="informedConsent" ref="myQuillEditor" class="editer" style="padding:10px">
</quill-editor>
</main>
</div>
</template>
<script>
import { GetTargetedMedicineTxt,SaveTargetedMedicineTxt } from "../../api/api";
export default {
data() {
return {
informedConsent:'',
OID:''
}
},
mounted(){
this.getData()
},
methods: {
getData(){
GetTargetedMedicineTxt().then(res=>{
this.informedConsent=res.data
})
},
saveInfo(){
let para={
targetedMedicineReferencesTxt:this.informedConsent
}
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveTargetedMedicineTxt(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
}
},
}
</script>
<style scoped>
header {
height: 40px;
/* border:1px solid red; */
width: 100%;
}
</style>
<template>
<!-- tmb -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="addList">添加</el-button>
<el-button type="success" @click="saveList">保存</el-button>
<el-button type="danger" @click="delList">删除</el-button>
<el-input placeholder="请输入查询条件" prefix-icon="el-icon-search" v-model="queryCondition" @keyup.enter.native="getData()" class="searchClass" clearable @clear="getData()" style="width:20%"></el-input>
</header>
<main>
<el-table ref="multipleTable" :data="tableData" border :height='tableheight' highlight-current-row @row-click="rowclick" @selection-change="handleSelectionChange" @cell-click="clickCell">
<el-table-column type="selection"></el-table-column>
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope"><span>{{scope.$index+(page.pageindex - 1) * page.pagesize + 1}} </span></template>
</el-table-column>
<el-table-column prop="grade" label="范围">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit1" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.grade"></el-input>
<span v-else >{{ scope.row.grade}}</span>
</template>
</el-table-column>
<el-table-column prop="scope" label="等级">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.scope"></el-input>
<span v-else >{{ scope.row.scope}}</span>
</template>
</el-table-column>
<el-table-column prop="remark" label="说明">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit2" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.remark"></el-input>
<span v-else >{{ scope.row.remark}}</span>
</template>
</el-table-column>
</el-table>
</main>
<footer>
<div class="block" style="text-align:center;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 20, 50, 100]" :page-size="page.pagesize" layout="total,sizes, prev, pager, next" :total="total" background :current-page="page.pageindex">
</el-pagination>
</div>
</footer>
</div>
</template>
<script>
import { GetTMBGrade,GetGuid,SaveTMBGrade,DelTMBGrade } from "../../api/api";
export default {
data() {
return {
tableData: [],
page:{
pageindex:1,
pagesize:10
},
total:0,
tableheight: window.innerHeight - 220,
row:[],
queryCondition:''
}
},
created(){
window.onresize = () => {
this.tableheight=window.innerHeight - 220
}
},
mounted(){
this.getData()
},
methods: {
getData(){
this.page.queryCondition=this.queryCondition
let para=this.page
GetTMBGrade(para).then(res=>{
if(res.status==='SUCCESS'){
res.data.data.forEach(item => {
item.edit=false
item.edit1=false
item.edit2=false
});
this.tableData=res.data.data
this.total=res.data.totalCount
}
})
},
handleCurrentChange(val) {
this.page.pageindex = val
this.getData()
},
handleSizeChange(val){
this.pagesize = val
this.getData()
},
// 点击单元格
clickCell(row, column, cell, event){
if(cell.cellIndex===2){
row.edit1 = true
}
if(cell.cellIndex===3){
row.edit= true
}
if(cell.cellIndex===4){
row.edit2= true
}
},
inputBlur(item) {
let tableD = this.tableData;
tableD.forEach(function (item) {
item.edit = false
item.edit1 = false
item.edit2 = false
});
},
// 输入框内容发生变化事件
textChange(index,row){
this.tableData[index].id=0
},
//点击行触发,选中或不选中复选框
rowclick(row) {
// this.$refs.multipleTable.toggleRowSelection(row)
},
//选中列表行
handleSelectionChange(val) {
this.row=val
},
// 添加
addList(){
GetGuid().then(res=>{
let addForm={
tmbGradeOID:res.data,
grade: '',
scope: '',
remark:'',
edit:true,
edit1:true,
edit2:true,
id:0
}
this.tableData.push(addForm)
})
},
// 保存
saveList(){
let para=[]
this.tableData.forEach(item=>{
if(item.id===0){
para.push(item)
}
})
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveTMBGrade(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 删除
delList(){
if(this.row.length===0){
this.$message({ type: 'error', message: '请先选择需要删除的内容'})
return
}
let para=[]
this.row.forEach(item=>{
para.push(item.tmbGradeOID)
})
this.$confirm('确认删除吗?', '提示', { type: 'warning'}).then(()=>{
DelTMBGrade(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '删除成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
}
},
directives: {
focus: {
inserted: function(el) {
el.querySelector('input').focus()
},
},
},
}
</script>
<style scoped>
header {
height: 40px;
padding:5px;
width: 100%;
}
.upload-demo{
display: inline-flex;
}
.upload-demo >>>.el-upload--text{
width: 100%;
height: 100%;
border: none;
margin: 0 5px;
border-radius: 3px;
}
</style>
<template>
<div>
<el-row>
<div style="padding-bottom:15px">
<el-button type="primary" @click="conformChoose" size="small">选择</el-button>
<el-button type="primary" @click="close" size="small">关闭</el-button>
</div>
<el-col :span="11">
<!-- 选人 -->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>选择</span>
</div>
<div class="text item">
<el-input v-model="filterText" placeholder="输入关键字进行过滤" auto-complete="off" size="small"></el-input>
<el-tree :ref="refTree" class="filter-tree" :check-strictly="checkStrict" show-checkbox :node-key="nodeKey" :data="data" default-expand-all :filter-node-method="filterNode" @check="checkNodes" :props="defaultProps">
<span slot-scope="{ node, data }">
<i :class="data.icon" style="color:#1E90FF"></i>
<span style="padding-left: 4px;">{{node.label}}</span>
</span>
</el-tree>
</div>
</el-card>
</el-col>
<!-- 圆形按钮 -->
<el-col :span="2">
<div style="text-align: center;padding-bottom:10px;padding-top:120px">
<el-button icon="el-icon-arrow-right" circle @click="toRight"></el-button>
</div>
<div style="text-align: center;">
<el-button icon="el-icon-arrow-left" circle @click="toLeft"></el-button>
</div>
</el-col>
<el-col :span="11">
<el-card class="box-card" style="height:400px">
<div slot="header" class="clearfix">
<span>已选择</span>
</div>
<div class="text item">
<ul>
<li v-for="(item,index) in chooselist" :key="index" style="list-style: none">
<el-checkbox v-model="item.isChoose" :label="item.chooseData" :key="index" name="type" @change="checkedList(index,item)">{{item.chooseData}}</el-checkbox>
</li>
</ul>
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
props: {
nodeKey: {
type: String,
default: ""
},
data: {
type: Array,
default: function() {
return [];
}
},
checkStrict: {
type: Boolean,
default: false
},
defaultProps: {
type: Object,
default: {
children: "children",
label: "label"
}
},
refTree: {
type: String,
default: "centertree"
},
},
data() {
return {
chooselist: [],
chooseIDlist:[],
indexArr: [],
label:'',
filterText:''
};
},
watch:{
filterText(val) {
this.$refs[this.refTree].filter(val);
},
},
mounted(){
this.label=this.defaultProps.label
},
methods: {
filterNode(value, data) {
if (!value) return true;
return data[this.label].indexOf(value) !== -1;
},
// 节点的选择
checkNodes(data, item) {
if (item.checkedKeys.indexOf(data[this.nodeKey]) <= -1) {
//未选中
this.chooselist.forEach((i, index) => {
if (i.chooseID === data[this.nodeKey]) {
this.chooselist.splice(index, 1);
this.chooseIDlist.splice(index, 1);
}
});
return;
}
if(this.checkStrict === false){
//点击节点
let obj={}
if (data.children === null || data.children.length === 0) {
obj = {
isChoose: false,
chooseData: data[this.label],
chooseID: data[this.nodeKey]
};
this.chooselist.push(this.isHas(obj, data));
this.chooseIDlist.push(data[this.nodeKey]);
}
else {
//选中父节点,子节点全部选到 右边
data.children.forEach(item => {
obj = {
isChoose: false,
chooseData: item[this.label],
chooseID: item[this.nodeKey]
};
this.chooselist.push(this.isHas(obj, item));
this.chooseIDlist.push(item[this.nodeKey]);
});
}
}else {
//点击节点
let obj = {
isChoose: false,
chooseData: data[this.label],
chooseID: data[this.nodeKey]
};
this.chooselist.push(this.isHas(obj, data));
this.chooseIDlist.push(data[this.nodeKey]);
}
},
isHas(obj,data){
let has=0
if(this.chooselist.length>0){
this.chooselist.forEach(list=>{
if(list.chooseID==data[this.nodeKey]){
has=1 //重复
}
})
}
if(has===0){
return obj
}
},
// 选中节点至右边
toRight() {},
// 去除右边的节点
toLeft() {
let _this = this;
_this.indexArr.forEach(item => {
_this.chooselist.forEach((i, index) => {
if (i.chooseID === item) {
_this.chooselist.splice(index, 1);
_this.chooseIDlist.splice(index, 1);
}
});
});
_this.$refs[this.refTree].setCheckedKeys(_this.chooseIDlist);
_this.indexArr = [];
},
// 右边 复选框列表 选中
checkedList(index, item) {
this.indexArr.push(item.chooseID);
},
// 确认选择
conformChoose(){
this.$emit('conformChoose',this.chooselist)
},
close(){
this.$emit('emitClose')
}
}
};
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<!-- 性别列 -->
<div style="display: flex; justify-content: flex-start">
{{row.sex===0?"男":'女'}}
</div>
</template>
<script>
import Vue from 'vue'
export default {
props: ['row'],
data(){
return{
}},
}
</script>
<template>
<!-- 基因库 -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="addList">添加</el-button>
<el-button type="success" @click="saveList">保存</el-button>
<el-button type="primary" @click="downModel('基因模板.xlsx')">导入模板下载</el-button>
<el-upload class="upload-demo" ref="fileExcel" action="/" accept=".xlsx, .xls" :before-upload="beforeUpload">
<el-button type="primary">导入</el-button>
</el-upload>
<el-button type="danger" @click="delList">删除</el-button>
<el-input placeholder="请输入查询条件" prefix-icon="el-icon-search" v-model="queryCondition" @keyup.enter.native="getData()" class="searchClass" clearable @clear="getData()" style="width:20%"></el-input>
</header>
<main>
<el-table ref="multipleTable" :data="tableData" border :height='tableheight' highlight-current-row @row-click="rowclick" @selection-change="handleSelectionChange" @cell-click="clickCell">
<el-table-column type="selection"></el-table-column>
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope"><span>{{scope.$index+(page.pageindex - 1) * page.pagesize + 1}} </span></template>
</el-table-column>
<el-table-column prop="geneCode" label="基因编码">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit1" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.geneCode"></el-input>
<span v-else >{{ scope.row.geneCode}}</span>
</template>
</el-table-column>
<el-table-column prop="geneName" label="基因名称">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.geneName"></el-input>
<span v-else >{{ scope.row.geneName}}</span>
</template>
</el-table-column>
<el-table-column prop="geneRemark" label="基因说明">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit2" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.geneRemark"></el-input>
<span v-else >{{ scope.row.geneRemark}}</span>
</template>
</el-table-column>
<el-table-column prop="pmid" label="PMID">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit3" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.pmid"></el-input>
<span v-else >{{ scope.row.pmid}}</span>
</template>
</el-table-column>
<el-table-column prop="targetedMedicine" label="靶药">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit4" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.targetedMedicine"></el-input>
<span v-else >{{ scope.row.targetedMedicine}}</span>
</template>
</el-table-column>
<el-table-column prop="mutationSites" label="突变位点">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit5" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.mutationSites"></el-input>
<span v-else >{{ scope.row.mutationSites}}</span>
</template>
</el-table-column>
</el-table>
</main>
<footer>
<div class="block" style="text-align:center;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 20, 50, 100]" :page-size="page.pagesize" layout="total,sizes, prev, pager, next" :total="total" background :current-page="page.pageindex">
</el-pagination>
</div>
</footer>
</div>
</template>
<script>
import { GetGene,GetGuid,SaveGene,DelGene,ImportGene,GetImportTemplatePath } from "../../api/api";
export default {
data() {
return {
tableData: [],
page:{
pageindex:1,
pagesize:10
},
total:0,
tableheight: window.innerHeight - 220,
row:[],
queryCondition:''
}
},
created(){
window.onresize = () => {
this.tableheight=window.innerHeight - 220
}
},
mounted(){
this.getData()
},
methods: {
getData(){
this.page.queryCondition=this.queryCondition
let para=this.page
GetGene(para).then(res=>{
if(res.status==='SUCCESS'){
res.data.data.forEach(item => {
item.edit=false
item.edit1=false
item.edit2=false
item.edit3=false
item.edit4=false
item.edit5=false
});
this.tableData=res.data.data
this.total=res.data.totalCount
}
})
},
handleCurrentChange(val) {
this.page.pageindex = val
this.getData()
},
handleSizeChange(val){
this.pagesize = val
this.getData()
},
// 点击单元格
clickCell(row, column, cell, event){
if(cell.cellIndex===2){
row.edit1 = true
}
if(cell.cellIndex===3){
row.edit= true
}
if(cell.cellIndex===4){
row.edit2= true
}if(cell.cellIndex===5){
row.edit3= true
}if(cell.cellIndex===6){
row.edit4= true
}if(cell.cellIndex===7){
row.edit5= true
}
},
inputBlur(item) {
let tableD = this.tableData;
tableD.forEach(function (item) {
item.edit = false
item.edit1 = false
item.edit2 = false
item.edit3 = false
item.edit4 = false
item.edit5 = false
});
},
// 输入框内容发生变化事件
textChange(index,row){
this.tableData[index].id=0
},
//点击行触发,选中或不选中复选框
rowclick(row) {
// this.$refs.multipleTable.toggleRowSelection(row)
},
//选中列表行
handleSelectionChange(val) {
this.row=val
},
// 添加
addList(){
GetGuid().then(res=>{
let addForm={
geneOID:res.data,
geneCode: '',
geneName: '',
geneRemark:'',
pmid:'',
targetedMedicine:'',
mutationSites:'',
edit:true,
edit1:true,
edit2:true,
edit3:true,
edit4:true,
edit5:true,
id:0
}
this.tableData.push(addForm)
})
},
// 保存
saveList(){
let para=[]
this.tableData.forEach(item=>{
if(item.id===0){
para.push(item)
}
})
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveGene(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 删除
delList(){
if(this.row.length===0){
this.$message({ type: 'error', message: '请先选择需要删除的内容'})
return
}
let para=[]
this.row.forEach(item=>{
para.push(item.geneOID)
})
this.$confirm('确认删除吗?', '提示', { type: 'warning'}).then(()=>{
DelGene(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '删除成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 导入
beforeUpload(file) {
let formData = new FormData();
formData.append("Excel", file);
this.$confirm("确认导入吗?", "提示", { type: "warning" }).then(() => {
ImportGene(formData).then(res => {
if (res.status === "SUCCESS") {
this.$message({ type: "success", message: "导入成功!" });
this.getData();
} else {
this.$message({ type: "error", message: res.msg });
}
});
})
.catch(() => { return;});
},
downModel(data){
let para={FileName:data}
GetImportTemplatePath(para).then(res=>{
if(res.status==='SUCCESS'){
window.open('http://'+res.data)
}else{
this.$message({ type: 'error', message: res.msg});
}
})
}
},
directives: {
focus: {
inserted: function(el) {
el.querySelector('input').focus()
},
},
},
}
</script>
<style scoped>
header {
height: 40px;
padding:5px;
width: 100%;
}
.upload-demo{
display: inline-flex;
}
.upload-demo >>>.el-upload--text{
width: 100%;
height: 100%;
border: none;
margin: 0 5px;
border-radius: 3px;
}
</style>
<template>
<!-- PMID -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="addList">添加</el-button>
<el-button type="success" @click="saveList">保存</el-button>
<el-button type="primary" @click="downModel('PMID模板.xlsx')">导入模板下载</el-button>
<el-upload class="upload-demo" ref="fileExcel" action="/" accept=".xlsx, .xls" :before-upload="beforeUpload">
<el-button type="primary">导入</el-button>
</el-upload>
<el-button type="danger" @click="delList">删除</el-button>
<el-input placeholder="请输入查询条件" prefix-icon="el-icon-search" v-model="queryCondition" @keyup.enter.native="getData()" class="searchClass" clearable @clear="getData()" style="width:20%"></el-input>
</header>
<main>
<el-table ref="multipleTable" :data="tableData" border :height='tableheight' highlight-current-row @row-click="rowclick" @selection-change="handleSelectionChange" @cell-click="clickCell">
<el-table-column type="selection"></el-table-column>
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope"><span>{{scope.$index+(page.pageindex - 1) * page.pagesize + 1}} </span></template>
</el-table-column>
<el-table-column prop="code" label="编码">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit1" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.code"></el-input>
<span v-else >{{ scope.row.code}}</span>
</template>
</el-table-column>
<el-table-column prop="gene" label="基因">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.gene"></el-input>
<span v-else >{{ scope.row.gene}}</span>
</template>
</el-table-column>
<el-table-column prop="targetedMedicine" label="靶药">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit2" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.targetedMedicine"></el-input>
<span v-else >{{ scope.row.targetedMedicine}}</span>
</template>
</el-table-column>
</el-table>
</main>
<footer>
<div class="block" style="text-align:center;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 20, 50, 100]" :page-size="page.pagesize" layout="total,sizes, prev, pager, next" :total="total" background :current-page="page.pageindex">
</el-pagination>
</div>
</footer>
</div>
</template>
<script>
import { GetPMID,GetGuid,SavePMID,DelPMID,ImportPMID,GetImportTemplatePath } from "../../api/api";
export default {
data() {
return {
tableData: [],
page:{
pageindex:1,
pagesize:10
},
total:0,
tableheight: window.innerHeight - 220,
row:[],
queryCondition:''
}
},
created(){
window.onresize = () => {
this.tableheight=window.innerHeight - 220
}
},
mounted(){
this.getData()
},
methods: {
getData(){
this.page.queryCondition=this.queryCondition
let para=this.page
GetPMID(para).then(res=>{
if(res.status==='SUCCESS'){
res.data.data.forEach(item => {
item.edit=false
item.edit1=false
item.edit2=false
});
this.tableData=res.data.data
this.total=res.data.totalCount
}
})
},
handleCurrentChange(val) {
this.page.pageindex = val
this.getData()
},
handleSizeChange(val){
this.pagesize = val
this.getData()
},
// 点击单元格
clickCell(row, column, cell, event){
if(cell.cellIndex===2){
row.edit1 = true
}
if(cell.cellIndex===3){
row.edit= true
}
if(cell.cellIndex===4){
row.edit2= true
}
},
inputBlur(item) {
let tableD = this.tableData;
tableD.forEach(function (item) {
item.edit = false
item.edit1 = false
item.edit2 = false
});
},
// 输入框内容发生变化事件
textChange(index,row){
this.tableData[index].id=0
},
//点击行触发,选中或不选中复选框
rowclick(row) {
// this.$refs.multipleTable.toggleRowSelection(row)
},
//选中列表行
handleSelectionChange(val) {
this.row=val
},
// 添加
addList(){
GetGuid().then(res=>{
let addForm={
pmidoid:res.data,
code: '',
gene: '',
targetedMedicine:'',
edit:true,
edit1:true,
edit2:true,
id:0
}
this.tableData.push(addForm)
})
},
// 保存
saveList(){
let para=[]
this.tableData.forEach(item=>{
if(item.id===0){
para.push(item)
}
})
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SavePMID(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 删除
delList(){
if(this.row.length===0){
this.$message({ type: 'error', message: '请先选择需要删除的内容'})
return
}
let para=[]
this.row.forEach(item=>{
para.push(item.pmidoid)
})
this.$confirm('确认删除吗?', '提示', { type: 'warning'}).then(()=>{
DelPMID(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '删除成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 导入
beforeUpload(file) {
let formData = new FormData();
formData.append("Excel", file);
this.$confirm("确认导入吗?", "提示", { type: "warning" }).then(() => {
ImportPMID(formData).then(res => {
if (res.status === "SUCCESS") {
this.$message({ type: "success", message: "导入成功!" });
this.getData();
} else {
this.$message({ type: "error", message: res.msg });
}
});
})
.catch(() => { return;});
},
downModel(data){
let para={FileName:data}
GetImportTemplatePath(para).then(res=>{
if(res.status==='SUCCESS'){
window.open('http://'+res.data)
}else{
this.$message({ type: 'error', message: res.msg});
}
})
}
},
directives: {
focus: {
inserted: function(el) {
el.querySelector('input').focus()
},
},
},
}
</script>
<style scoped>
header {
height: 40px;
padding:5px;
width: 100%;
}
.upload-demo{
display: inline-flex;
}
.upload-demo >>>.el-upload--text{
width: 100%;
height: 100%;
border: none;
margin: 0 5px;
border-radius: 3px;
}
</style>
<template>
<!-- 样本质控情况库 -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="addList">添加</el-button>
<el-button type="success" @click="saveList">保存</el-button>
<!-- <el-button type="primary" @click="downModel('样本质控情况模板.xlsx')">导入模板下载</el-button>
<el-upload class="upload-demo" ref="fileExcel" action="/" accept=".xlsx, .xls" :before-upload="beforeUpload">
<el-button type="primary">导入</el-button>
</el-upload> -->
<el-button type="danger" @click="delList">删除</el-button>
<el-input placeholder="请输入查询条件" prefix-icon="el-icon-search" v-model="queryCondition" @keyup.enter.native="getData()" class="searchClass" clearable @clear="getData()" style="width:20%"></el-input>
</header>
<main>
<el-table ref="multipleTable" :data="tableData" border :height='tableheight' highlight-current-row @row-click="rowclick" @selection-change="handleSelectionChange" @cell-click="clickCell">
<el-table-column type="selection"></el-table-column>
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope"><span>{{scope.$index+(page.pageindex - 1) * page.pagesize + 1}} </span></template>
</el-table-column>
<el-table-column prop="controlStep" label="质控环节">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit1" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.controlStep"></el-input>
<span v-else >{{ scope.row.controlStep}}</span>
</template>
</el-table-column>
<el-table-column prop="controlResult" label="质控结果">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.controlResult"></el-input>
<span v-else >{{ scope.row.controlResult}}</span>
</template>
</el-table-column>
<el-table-column prop="sortNo" label="排序号">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit2" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.sortNo"></el-input>
<span v-else >{{ scope.row.sortNo}}</span>
</template>
</el-table-column>
</el-table>
</main>
<footer>
<div class="block" style="text-align:center;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 20, 50, 100]" :page-size="page.pagesize" layout="total,sizes, prev, pager, next" :total="total" background :current-page="page.pageindex">
</el-pagination>
</div>
</footer>
</div>
</template>
<script>
import { GetSampleControl,GetGuid,SaveSampleControl,DelSampleControl,ImportSampleControl,GetImportTemplatePath } from "../../api/api";
export default {
data() {
return {
tableData: [],
page:{
pageindex:1,
pagesize:10
},
total:0,
tableheight: window.innerHeight - 220,
row:[],
queryCondition:''
}
},
created(){
window.onresize = () => {
this.tableheight=window.innerHeight - 220
}
},
mounted(){
this.getData()
},
methods: {
getData(){
this.page.queryCondition=this.queryCondition
let para=this.page
GetSampleControl(para).then(res=>{
if(res.status==='SUCCESS'){
res.data.data.forEach(item => {
item.edit=false
item.edit1=false
item.edit2=false
});
this.tableData=res.data.data
this.total=res.data.totalCount
}
})
},
handleCurrentChange(val) {
this.page.pageindex = val
this.getData()
},
handleSizeChange(val){
this.pagesize = val
this.getData()
},
// 点击单元格
clickCell(row, column, cell, event){
if(cell.cellIndex===2){
row.edit1 = true
}
if(cell.cellIndex===3){
row.edit= true
}
if(cell.cellIndex===4){
row.edit2= true
}
},
inputBlur(item) {
let tableD = this.tableData;
tableD.forEach(function (item) {
item.edit = false
item.edit1 = false
item.edit2 = false
});
},
// 输入框内容发生变化事件
textChange(index,row){
this.tableData[index].id=0
},
//点击行触发,选中或不选中复选框
rowclick(row) {
// this.$refs.multipleTable.toggleRowSelection(row)
},
//选中列表行
handleSelectionChange(val) {
this.row=val
},
// 添加
addList(){
GetGuid().then(res=>{
let addForm={
sampleControlOID:res.data,
controlStep: '',
controlResult: '',
sortNo:'',
indication:'',
edit:true,
edit1:true,
edit2:true,
id:0
}
this.tableData.push(addForm)
})
},
// 保存
saveList(){
let para=[]
this.tableData.forEach(item=>{
if(item.id===0){
para.push(item)
}
})
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveSampleControl(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 删除
delList(){
if(this.row.length===0){
this.$message({ type: 'error', message: '请先选择需要删除的内容'})
return
}
let para=[]
this.row.forEach(item=>{
para.push(item.sampleControlOID)
})
this.$confirm('确认删除吗?', '提示', { type: 'warning'}).then(()=>{
DelSampleControl(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '删除成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 导入
beforeUpload(file) {
let formData = new FormData();
formData.append("Excel", file);
this.$confirm("确认导入吗?", "提示", { type: "warning" }).then(() => {
ImportSampleControl(formData).then(res => {
if (res.status === "SUCCESS") {
this.$message({ type: "success", message: "导入成功!" });
this.getData();
} else {
this.$message({ type: "error", message: res.msg });
}
});
})
.catch(() => { return;});
},
downModel(data){
let para={FileName:data}
GetImportTemplatePath(para).then(res=>{
if(res.status==='SUCCESS'){
window.open('http://'+res.data)
}else{
this.$message({ type: 'error', message: res.msg});
}
})
}
},
directives: {
focus: {
inserted: function(el) {
el.querySelector('input').focus()
},
},
},
}
</script>
<style scoped>
header {
height: 40px;
padding:5px;
width: 100%;
}
.upload-demo{
display: inline-flex;
}
.upload-demo >>>.el-upload--text{
width: 100%;
height: 100%;
border: none;
margin: 0 5px;
border-radius: 3px;
}
</style>
<template>
<!-- 样本类型库 -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="addList">添加</el-button>
<el-button type="success" @click="saveList">保存</el-button>
<el-button type="primary" @click="downModel('样本类型模板.xlsx')">导入模板下载</el-button>
<el-upload class="upload-demo" ref="fileExcel" action="/" accept=".xlsx, .xls" :before-upload="beforeUpload">
<el-button type="primary">导入</el-button>
</el-upload>
<el-button type="danger" @click="delList">删除</el-button>
<el-input placeholder="请输入查询条件" prefix-icon="el-icon-search" v-model="queryCondition" @keyup.enter.native="getData()" class="searchClass" clearable @clear="getData()" style="width:20%"></el-input>
</header>
<main>
<el-table ref="multipleTable" :data="tableData" border :height='tableheight' highlight-current-row @row-click="rowclick" @selection-change="handleSelectionChange" @cell-click="clickCell">
<el-table-column type="selection"></el-table-column>
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope"><span>{{scope.$index+(page.pageindex - 1) * page.pagesize + 1}} </span></template>
</el-table-column>
<el-table-column prop="sampleCode" label="样本编号">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit1" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.sampleCode"></el-input>
<span v-else >{{ scope.row.sampleCode}}</span>
</template>
</el-table-column>
<el-table-column prop="sampleName" label="样本名称">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.sampleName"></el-input>
<span v-else >{{ scope.row.sampleName}}</span>
</template>
</el-table-column>
</el-table>
</main>
<footer>
<div class="block" style="text-align:center;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 20, 50, 100]" :page-size="page.pagesize" layout="total,sizes, prev, pager, next" :total="total" background :current-page="page.pageindex">
</el-pagination>
</div>
</footer>
</div>
</template>
<script>
import { GetSampleType,GetGuid,SaveSampleType,DelSampleType,ImportSampleType,GetImportTemplatePath } from "../../api/api";
export default {
data() {
return {
tableData: [],
page:{
pageindex:1,
pagesize:10
},
total:0,
tableheight: window.innerHeight - 220,
row:[],
queryCondition:''
}
},
created(){
window.onresize = () => {
this.tableheight=window.innerHeight - 220
}
},
mounted(){
this.getData()
},
methods: {
getData(){
this.page.queryCondition=this.queryCondition
let para=this.page
GetSampleType(para).then(res=>{
if(res.status==='SUCCESS'){
res.data.data.forEach(item => {
item.edit=false
item.edit1=false
});
this.tableData=res.data.data
this.total=res.data.totalCount
}
})
},
handleCurrentChange(val) {
this.page.pageindex = val
this.getData()
},
handleSizeChange(val){
this.pagesize = val
this.getData()
},
// 点击单元格
clickCell(row, column, cell, event){
if(cell.cellIndex===2){
row.edit1 = true
}
if(cell.cellIndex===3){
row.edit= true
}
},
inputBlur(item) {
let tableD = this.tableData;
tableD.forEach(function (item) {
item.edit = false
item.edit1 = false
});
},
// 输入框内容发生变化事件
textChange(index,row){
this.tableData[index].id=0
},
//点击行触发,选中或不选中复选框
rowclick(row) {
// this.$refs.multipleTable.toggleRowSelection(row)
},
//选中列表行
handleSelectionChange(val) {
this.row=val
},
// 添加
addList(){
GetGuid().then(res=>{
let addForm={
sampleTypeOID:res.data,
sampleCode: '',
sampleName: '',
edit:true,
edit1:true,
id:0
}
this.tableData.push(addForm)
})
},
// 保存
saveList(){
let para=[]
this.tableData.forEach(item=>{
if(item.id===0){
para.push(item)
}
})
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveSampleType(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 删除
delList(){
if(this.row.length===0){
this.$message({ type: 'error', message: '请先选择需要删除的内容'})
return
}
let para=[]
this.row.forEach(item=>{
para.push(item.sampleTypeOID)
})
this.$confirm('确认删除吗?', '提示', { type: 'warning'}).then(()=>{
DelSampleType(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '删除成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 导入
beforeUpload(file) {
let formData = new FormData();
formData.append("Excel", file);
this.$confirm("确认导入吗?", "提示", { type: "warning" }).then(() => {
ImportSampleType(formData).then(res => {
if (res.status === "SUCCESS") {
this.$message({ type: "success", message: "导入成功!" });
this.getData();
} else {
this.$message({ type: "error", message: res.msg });
}
});
})
.catch(() => { return;});
},
downModel(data){
let para={FileName:data}
GetImportTemplatePath(para).then(res=>{
if(res.status==='SUCCESS'){
window.open('http://'+res.data)
}else{
this.$message({ type: 'error', message: res.msg});
}
})
}
},
directives: {
focus: {
inserted: function(el) {
el.querySelector('input').focus()
},
},
},
}
</script>
<style scoped>
header {
height: 40px;
padding:5px;
width: 100%;
}
.upload-demo{
display: inline-flex;
}
.upload-demo >>>.el-upload--text{
width: 100%;
height: 100%;
border: none;
margin: 0 5px;
border-radius: 3px;
}
</style>
<style>
.searchClass{
margin: 0 8px;
}
</style>
\ No newline at end of file
<template>
<!-- 靶药库 -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="addList">添加</el-button>
<el-button type="success" @click="saveList">保存</el-button>
<el-button type="primary" @click="downModel('靶药模板.xlsx')">导入模板下载</el-button>
<el-upload class="upload-demo" ref="fileExcel" action="/" accept=".xlsx, .xls" :before-upload="beforeUpload">
<el-button type="primary">导入</el-button>
</el-upload>
<el-button type="danger" @click="delList">删除</el-button>
<el-input placeholder="请输入查询条件" prefix-icon="el-icon-search" v-model="queryCondition" @keyup.enter.native="getData()" class="searchClass" clearable @clear="getData()" style="width:20%"></el-input>
</header>
<main>
<el-table ref="multipleTable" :data="tableData" border :height='tableheight' highlight-current-row @row-click="rowclick" @selection-change="handleSelectionChange" @cell-click="clickCell">
<el-table-column type="selection"></el-table-column>
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope"><span>{{scope.$index+(page.pageindex - 1) * page.pagesize + 1}} </span></template>
</el-table-column>
<el-table-column prop="code" label="编码">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit1" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.code"></el-input>
<span v-else >{{ scope.row.code}}</span>
</template>
</el-table-column>
<el-table-column prop="medicineName" label="药品名称">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.medicineName"></el-input>
<span v-else >{{ scope.row.medicineName}}</span>
</template>
</el-table-column>
<el-table-column prop="diseaseType" label="疾病类型">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit2" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.diseaseType"></el-input>
<span v-else >{{ scope.row.diseaseType}}</span>
</template>
</el-table-column>
<el-table-column prop="indication" label="适应症">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit3" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.indication"></el-input>
<span v-else >{{ scope.row.indication}}</span>
</template>
</el-table-column>
</el-table>
</main>
<footer>
<div class="block" style="text-align:center;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 20, 50, 100]" :page-size="page.pagesize" layout="total,sizes, prev, pager, next" :total="total" background :current-page="page.pageindex">
</el-pagination>
</div>
</footer>
</div>
</template>
<script>
import { GetTargetedMedicine,GetGuid,SaveTargetedMedicine,DelTargetedMedicine,ImportTargetedMedicine,GetImportTemplatePath } from "../../api/api";
export default {
data() {
return {
tableData: [],
page:{
pageindex:1,
pagesize:10
},
total:0,
tableheight: window.innerHeight - 220,
row:[],
queryCondition:''
}
},
created(){
window.onresize = () => {
this.tableheight=window.innerHeight - 220
}
},
mounted(){
this.getData()
},
methods: {
getData(){
this.page.queryCondition=this.queryCondition
let para=this.page
GetTargetedMedicine(para).then(res=>{
if(res.status==='SUCCESS'){
res.data.data.forEach(item => {
item.edit=false
item.edit1=false
item.edit2=false
item.edit3=false
});
this.tableData=res.data.data
this.total=res.data.totalCount
}
})
},
handleCurrentChange(val) {
this.page.pageindex = val
this.getData()
},
handleSizeChange(val){
this.pagesize = val
this.getData()
},
// 点击单元格
clickCell(row, column, cell, event){
if(cell.cellIndex===2){
row.edit1 = true
}
if(cell.cellIndex===3){
row.edit= true
}
if(cell.cellIndex===4){
row.edit2= true
}if(cell.cellIndex===5){
row.edit3= true
}
},
inputBlur(item) {
let tableD = this.tableData;
tableD.forEach(function (item) {
item.edit = false
item.edit1 = false
item.edit2 = false
item.edit3 = false
});
},
// 输入框内容发生变化事件
textChange(index,row){
this.tableData[index].id=0
},
//点击行触发,选中或不选中复选框
rowclick(row) {
// this.$refs.multipleTable.toggleRowSelection(row)
},
//选中列表行
handleSelectionChange(val) {
this.row=val
},
// 添加
addList(){
GetGuid().then(res=>{
let addForm={
targetedMedicineOID:res.data,
code: '',
medicineName: '',
diseaseType:'',
indication:'',
edit:true,
edit1:true,
edit2:true,
edit3:true,
id:0
}
this.tableData.push(addForm)
})
},
// 保存
saveList(){
let para=[]
this.tableData.forEach(item=>{
if(item.id===0){
para.push(item)
}
})
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveTargetedMedicine(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 删除
delList(){
if(this.row.length===0){
this.$message({ type: 'error', message: '请先选择需要删除的内容'})
return
}
let para=[]
this.row.forEach(item=>{
para.push(item.targetedMedicineOID)
})
this.$confirm('确认删除吗?', '提示', { type: 'warning'}).then(()=>{
DelTargetedMedicine(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '删除成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 导入
beforeUpload(file) {
let formData = new FormData();
formData.append("Excel", file);
this.$confirm("确认导入吗?", "提示", { type: "warning" }).then(() => {
ImportTargetedMedicine(formData).then(res => {
if (res.status === "SUCCESS") {
this.$message({ type: "success", message: "导入成功!" });
this.getData();
} else {
this.$message({ type: "error", message: res.msg });
}
});
})
.catch(() => { return;});
},
downModel(data){
let para={FileName:data}
GetImportTemplatePath(para).then(res=>{
if(res.status==='SUCCESS'){
window.open('http://'+res.data)
}else{
this.$message({ type: 'error', message: res.msg});
}
})
}
},
directives: {
focus: {
inserted: function(el) {
el.querySelector('input').focus()
},
},
},
}
</script>
<style scoped>
header {
height: 40px;
padding:5px;
width: 100%;
}
.upload-demo{
display: inline-flex;
}
.upload-demo >>>.el-upload--text{
width: 100%;
height: 100%;
border: none;
margin: 0 5px;
border-radius: 3px;
}
</style>
<template>
<!-- 肿瘤类型库 -->
<div style="background:#fff;border-radius:6px;box-shadow: 1px 1px 3px rgba(0,0,0,.2);">
<header>
<el-button type="success" @click="addList">添加</el-button>
<el-button type="success" @click="saveList">保存</el-button>
<el-button type="primary" @click="downModel('肿瘤类型模板.xlsx')">导入模板下载</el-button>
<el-upload class="upload-demo" ref="fileExcel" action="/" accept=".xlsx, .xls" :before-upload="beforeUpload">
<el-button type="primary">导入</el-button>
</el-upload>
<el-button type="danger" @click="delList">删除</el-button>
<el-input placeholder="请输入查询条件" prefix-icon="el-icon-search" v-model="queryCondition" @keyup.enter.native="getData()" class="searchClass" clearable @clear="getData()" style="width:20%" ></el-input>
</header>
<main>
<el-table ref="multipleTable" :data="tableData" border :height='tableheight' highlight-current-row @row-click="rowclick" @selection-change="handleSelectionChange" @cell-click="clickCell">
<el-table-column type="selection"></el-table-column>
<el-table-column type="index" label="序号" align="center">
<template slot-scope="scope"><span>{{scope.$index+(page.pageindex - 1) * page.pagesize + 1}} </span></template>
</el-table-column>
<el-table-column prop="tumorsCode" label="编码">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit1" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.tumorsCode"></el-input>
<span v-else >{{ scope.row.tumorsCode}}</span>
</template>
</el-table-column>
<el-table-column prop="tumorsName" label="名称">
<template slot-scope="scope">
<el-input v-focus v-if="scope.row.edit" @blur="inputBlur" @change="textChange(scope.$index,scope.row)" v-model="scope.row.tumorsName"></el-input>
<span v-else >{{ scope.row.tumorsName}}</span>
</template>
</el-table-column>
</el-table>
</main>
<footer>
<div class="block" style="text-align:center;">
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :page-sizes="[10, 20, 50, 100]" :page-size="page.pagesize" layout="total,sizes, prev, pager, next" :total="total" background :current-page="page.pageindex">
</el-pagination>
</div>
</footer>
</div>
</template>
<script>
import { GetTumorsType,GetGuid,SaveTumorsType,DelTumorsType,ImportTumorsType,GetImportTemplatePath } from "../../api/api";
export default {
data() {
return {
tableData: [],
page:{
pageindex:1,
pagesize:10
},
total:0,
tableheight: window.innerHeight - 220,
row:[],
queryCondition:''
}
},
created(){
window.onresize = () => {
this.tableheight=window.innerHeight - 220
}
},
mounted(){
this.getData()
},
methods: {
getData(){
this.page.queryCondition=this.queryCondition
let para=this.page
GetTumorsType(para).then(res=>{
if(res.status==='SUCCESS'){
res.data.data.forEach(item => {
item.edit=false
item.edit1=false
});
this.tableData=res.data.data
this.total=res.data.totalCount
}
})
},
handleCurrentChange(val) {
this.page.pageindex = val
this.getData()
},
handleSizeChange(val){
this.pagesize = val
this.getData()
},
// 点击单元格
clickCell(row, column, cell, event){
if(cell.cellIndex===2){
row.edit1 = true
}
if(cell.cellIndex===3){
row.edit= true
}
},
inputBlur(item) {
let tableD = this.tableData;
tableD.forEach(function (item) {
item.edit = false
item.edit1 = false
});
},
// 输入框内容发生变化事件
textChange(index,row){
this.tableData[index].id=0
},
//点击行触发,选中或不选中复选框
rowclick(row) {
// this.$refs.multipleTable.toggleRowSelection(row)
},
//选中列表行
handleSelectionChange(val) {
this.row=val
},
// 添加
addList(){
GetGuid().then(res=>{
let addForm={
tumorsTypeOID:res.data,
tumorsCode: '',
tumorsName: '',
edit:true,
edit1:true,
id:0
}
this.tableData.push(addForm)
})
},
// 保存
saveList(){
let para=[]
this.tableData.forEach(item=>{
if(item.id===0){
para.push(item)
}
})
this.$confirm('确认保存吗?', '提示', { type: 'warning'}).then(()=>{
SaveTumorsType(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '保存成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 删除
delList(){
if(this.row.length===0){
this.$message({ type: 'error', message: '请先选择需要删除的内容'})
return
}
let para=[]
this.row.forEach(item=>{
para.push(item.tumorsTypeOID)
})
this.$confirm('确认删除吗?', '提示', { type: 'warning'}).then(()=>{
DelTumorsType(para).then(res=>{
if(res.status=='SUCCESS'){
this.$message({ type: 'success', message: '删除成功!'});
this.getData();
}
else{
this.$message({ type: 'error', message: res.msg});
}
})
}).catch(()=>{ return})
},
// 导入
beforeUpload(file) {
let formData = new FormData();
formData.append("Excel", file);
this.$confirm("确认导入吗?", "提示", { type: "warning" }).then(() => {
ImportTumorsType(formData).then(res => {
if (res.status === "SUCCESS") {
this.$message({ type: "success", message: "导入成功!" });
this.getData();
} else {
this.$message({ type: "error", message: res.msg });
}
});
})
.catch(() => { return;});
},
downModel(data){
let para={FileName:data}
GetImportTemplatePath(para).then(res=>{
if(res.status==='SUCCESS'){
window.open('http://'+res.data)
}else{
this.$message({ type: 'error', message: res.msg});
}
})
}
},
directives: {
focus: {
inserted: function(el) {
el.querySelector('input').focus()
},
},
},
}
</script>
<style scoped>
header {
height: 40px;
padding:5px;
width: 100%;
}
.upload-demo{
display: inline-flex;
}
.upload-demo >>>.el-upload--text{
width: 100%;
height: 100%;
border: none;
margin: 0 5px;
border-radius: 3px;
}
</style>
<template>
<div class="wrapper">
<v-head></v-head>
<v-sidebar></v-sidebar>
<div class="content-box" :class="{'content-collapse':collapse}">
<v-tags></v-tags>
<div class="content">
<transition name="move" mode="out-in">
<keep-alive :include="tagsList">
<router-view style="height:100%"></router-view>
</keep-alive>
</transition>
</div>
</div>
</div>
</template>
<script>
import vHead from './Header.vue';
import vSidebar from './Sidebar.vue';
import vTags from './Tags.vue';
import bus from './bus';
export default {
data(){
return {
tagsList: [],
collapse: false
}
},
components:{
vHead, vSidebar, vTags
},
created(){
bus.$on('collapse', msg => {
this.collapse = msg;
})
// 只有在标签页列表里的页面才使用keep-alive,即关闭标签之后就不保存到内存中了。
bus.$on('tags', msg => {
let arr = [];
for(let i = 0, len = msg.length; i < len; i ++){
msg[i].name && arr.push(msg[i].name);
}
this.tagsList = arr;
})
}
}
</script>
p{
font-size: 12px;
}
</style>
<template>
<div class="sidebar">
<el-menu class="sidebar-el-menu" :default-active="onRoutes" :collapse="collapse" background-color="white" text-color="black" active-text-color="#20a0ff" router>
<template v-for="(item,index) in items">
<template v-if="item.children">
<el-submenu :index="index+''" :key="item.sys_BusiPortalMenuOID">
<template slot="title">
<i :class="item.iconCls"></i>
<span slot="name">{{ item.name }}</span>
</template>
<template v-for="subItem in item.children">
<el-submenu v-if="subItem.children" :index="subItem.route" :key="subItem.sys_BusiPortalMenuOID">
<template slot="title">{{ subItem.name }}</template>
<el-menu-item v-for="(threeItem,i) in subItem.children" :key="i" :index="threeItem.route">{{ threeItem.name }}</el-menu-item>
</el-submenu>
<el-menu-item v-else :index="subItem.route" :key="subItem.sys_BusiPortalMenuOID">{{ subItem.name }}</el-menu-item>
</template>
</el-submenu>
</template>
<template v-else>
<el-menu-item :index="item.route" :key="item.sys_BusiPortalMenuOID">
<i :class="item.iconCls"></i>
<span slot="name">{{ item.name }}</span>
</el-menu-item>
</template>
</template>
</el-menu>
</div>
</template>
<script>
import bus from '../common/bus'
import { GetMenu } from '../../api/api'
export default {
data() {
return {
collapse: false,
items: [],
}
},
computed: {
onRoutes() {
// return this.$route.path.replace('/', '')
return this.$route.path
},
},
created() {
// 通过 Event Bus 进行组件间通信,来折叠侧边栏
bus.$on('collapse', msg => {
this.collapse = msg
})
this.getMenu()
},
methods: {
getMenu() {
GetMenu().then(res => {
if(res.status==='SUCCESS'){
this.items=res.data
this.delChildren(this.items)
}else{
this.$message.error(res.msg)
}
})
},
// 去除children=[]
delChildren(arr){
arr.forEach(item => {
if(item.children.length===0){
delete item.children
}else{
this.delChildren(item.children)
}
});
}
},
}
</script>
<style scoped>
.sidebar {
display: block;
position: absolute;
left: 0;
top: 70px;
bottom: 0;
overflow-y: scroll;
}
.sidebar::-webkit-scrollbar {
width: 0;
}
.sidebar-el-menu:not(.el-menu--collapse) {
width: 250px;
}
.sidebar > ul {
height: 100%;
}
.sidebar > ul:hover {
background-color: mediumspringgreen;
}
</style>
<template>
<div class="tags" v-if="showTags">
<ul>
<li class="tags-li" v-for="(item,index) in tagsList" :class="{'active': isActive(item.path)}" :key="index">
<router-link :to="item.path" class="tags-li-title">
{{item.title}}
</router-link>
<span class="tags-li-icon" @click="closeTags(index)"><i class="el-icon-close"></i></span>
</li>
</ul>
<div class="tags-close-box">
<el-dropdown @command="handleTags">
<el-button size="mini" type="primary">
标签选项<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu size="small" slot="dropdown">
<el-dropdown-item command="other">关闭其他</el-dropdown-item>
<el-dropdown-item command="all">关闭所有</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
</template>
<script>
import bus from './bus';
export default {
data() {
return {
tagsList: []
}
},
methods: {
isActive(path) {
return path === this.$route.fullPath;
},
// 关闭单个标签
closeTags(index) {
const delItem = this.tagsList.splice(index, 1)[0];
const item = this.tagsList[index] ? this.tagsList[index] : this.tagsList[index - 1];
if (item) {
delItem.path === this.$route.fullPath && this.$router.push(item.path);
}else{
// this.$router.push('/');
}
// console.log(this.tagsList)
// console.log(item)
bus.$emit('tags', this.tagsList);
},
// 关闭全部标签
closeAll(){
this.tagsList = [];
// this.$router.push('/');
},
// 关闭其他标签
closeOther(){
const curItem = this.tagsList.filter(item => {
return item.path === this.$route.fullPath;
})
this.tagsList = curItem;
},
// 设置标签
setTags(route){
const isExist = this.tagsList.some(item => {
return item.path === route.fullPath;
})
if(!isExist){
if(this.tagsList.length >= 8){
this.tagsList.shift();
}
this.tagsList.push({
title: route.meta.title,
path: route.fullPath,
name: route.matched[1].components.default.name
})
}
bus.$emit('tags', this.tagsList);
},
handleTags(command){
command === 'other' ? this.closeOther() : this.closeAll();
}
},
computed: {
showTags() {
return this.tagsList.length > 0;
}
},
watch:{
$route(newValue, oldValue){
this.setTags(newValue);
}
},
created(){
this.setTags(this.$route);
// 监听关闭当前页面的标签页
bus.$on('close_current_tags', () => {
for (let i = 0, len = this.tagsList.length; i < len; i++) {
const item = this.tagsList[i];
if(item.path === this.$route.fullPath){
if(i < len - 1){
this.$router.push(this.tagsList[i+1].path);
}else if(i > 0){
this.$router.push(this.tagsList[i-1].path);
}else{
this.$router.push('/');
}
this.tagsList.splice(i, 1);
break;
}
}
})
}
}
</script>
<style>
.tags {
position: relative;
height: 30px;
overflow: hidden;
background: #fff;
padding-right: 120px;
box-shadow: 0 5px 10px #ddd;
}
.tags ul {
box-sizing: border-box;
width: 100%;
height: 100%;
}
.tags-li {
float: left;
margin: 3px 5px 2px 3px;
border-radius: 3px;
font-size: 12px;
overflow: hidden;
cursor: pointer;
height: 23px;
line-height: 23px;
border: 1px solid #e9eaec;
background: #fff;
padding: 0 5px 0 12px;
vertical-align: middle;
color: #666;
-webkit-transition: all .3s ease-in;
-moz-transition: all .3s ease-in;
transition: all .3s ease-in;
}
.tags-li:not(.active):hover {
background: #f8f8f8;
}
.tags-li.active {
color: #fff;
}
.tags-li-title {
float: left;
max-width: 80px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-right: 5px;
color: #666;
}
.tags-li.active .tags-li-title {
color: #fff;
}
.tags-close-box {
position: absolute;
right: 0;
top: 0;
box-sizing: border-box;
padding-top: 1px;
text-align: center;
width: 110px;
height: 30px;
background: #fff;
box-shadow: -3px 0 15px 3px rgba(0, 0, 0, .1);
z-index: 10;
}
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论