├── src ├── components │ ├── searchBtn.json │ ├── subBtn.json │ ├── detectBtn.json │ ├── configUnitBtn.json │ ├── icons │ │ ├── IconSupport.vue │ │ ├── IconTooling.vue │ │ ├── IconCommunity.vue │ │ ├── IconDocumentation.vue │ │ └── IconEcosystem.vue │ ├── expression.json │ ├── tabs.json │ ├── nav.json │ ├── addUnitBtn.json │ ├── createBtn.json │ ├── contractBtn.json │ ├── editBtn.json │ ├── unitBtn.json │ └── page.json ├── views │ ├── HomeView.vue │ └── AboutView.vue ├── action.js ├── assets │ ├── logo.svg │ └── base.css ├── router │ └── index.ts ├── main.ts └── App.vue ├── env.d.ts ├── public ├── favicon.ico └── data.json ├── tsconfig.vite-config.json ├── tsconfig.json ├── .gitignore ├── vite.config.ts ├── package.json ├── index.html ├── README.md └── server.js /src/components/searchBtn.json: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /src/components/subBtn.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "配置检测项" 3 | } -------------------------------------------------------------------------------- /src/components/detectBtn.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "配置检测项" 3 | } -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/naji0329/vite_cs/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/components/configUnitBtn.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "button", 3 | "label": "Configuration Unit", 4 | "level": "primary", 5 | "onUpdate": "this.onclick = event => { alert('aaa'); " 6 | } -------------------------------------------------------------------------------- /src/views/HomeView.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /tsconfig.vite-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.node.json", 3 | "include": ["vite.config.*"], 4 | "compilerOptions": { 5 | "composite": true, 6 | "types": ["node"] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/action.js: -------------------------------------------------------------------------------- 1 | const detect_com = document.querySelector(".detect_com"); 2 | alert(detect_com) 3 | const detect_dia = document.querySelector(".detect_dia") 4 | detect_com.addEventListener('click', function() { 5 | alert('ss'), 6 | detect_dia.innerHTML = "ssss"; 7 | }); -------------------------------------------------------------------------------- /src/views/AboutView.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/icons/IconSupport.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /src/components/expression.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "breadcrumb", 3 | "className": "m-3.5", 4 | "items": [ 5 | { 6 | "label": "主页", 7 | "href": "#", 8 | "icon": "fa fa-home" 9 | }, 10 | { 11 | "label": "" 12 | }, 13 | { 14 | "label": "" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.web.json", 3 | "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], 4 | "compilerOptions": { 5 | "baseUrl": ".", 6 | "paths": { 7 | "@/*": ["./src/*"] 8 | } 9 | }, 10 | 11 | "references": [ 12 | { 13 | "path": "./tsconfig.vite-config.json" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'url' 2 | 3 | import { defineConfig } from 'vite' 4 | import vue from '@vitejs/plugin-vue' 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | plugins: [vue()], 9 | resolve: { 10 | alias: { 11 | '@': fileURLToPath(new URL('./src', import.meta.url)) 12 | } 13 | }, 14 | server: { 15 | proxy: { 16 | '/api': { 17 | target: 'http://localhost:5000/', 18 | // changeOrigin: true 19 | }, 20 | } 21 | } 22 | }) 23 | -------------------------------------------------------------------------------- /src/components/tabs.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "tabs", 3 | "mode": "chrome", 4 | "tabs": [ 5 | { 6 | "title": "全部", 7 | "hash": "all", 8 | "body": "" 9 | }, 10 | { 11 | "title": "待审批", 12 | "hash": "pend_sub", 13 | "body": "" 14 | }, 15 | { 16 | "title": "审批中", 17 | "hash": "pend_appro", 18 | "body": "" 19 | }, 20 | { 21 | "title": "已通过", 22 | "hash": "pass", 23 | "body": "" 24 | }, 25 | { 26 | "title": "已驳回", 27 | "hash": "reject", 28 | "body": "" 29 | } 30 | ] 31 | } -------------------------------------------------------------------------------- /src/components/nav.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "nav", 3 | "stacked": true, 4 | "size": "xl", 5 | "links": [ 6 | { 7 | "label": "FILES", 8 | "className": "text-3xl font-bold bg-red", 9 | "icon": "fa fa-desktop", 10 | "disabled": true 11 | }, 12 | { 13 | "label": "检测协议", 14 | "to": "?id=1", 15 | "icon": "fa fa-list-alt" 16 | }, 17 | { 18 | "label": "我的审批", 19 | "to": "?id=2", 20 | "icon": "fa fa-list-alt" 21 | }, 22 | { 23 | "label": "全部审批", 24 | "to": "?id=3", 25 | "icon": "fa fa-list-alt" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cpmtcontract", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vue-tsc --noEmit && vite build", 7 | "preview": "vite preview --port 5050", 8 | "typecheck": "vue-tsc --noEmit" 9 | }, 10 | "dependencies": { 11 | "amis": "^1.9.0-beta.14", 12 | "cors": "^2.8.5", 13 | "vue": "^3.2.33", 14 | "vue-router": "^4.0.14" 15 | }, 16 | "devDependencies": { 17 | "@types/node": "^16.11.27", 18 | "@vitejs/plugin-vue": "^2.3.1", 19 | "@vue/tsconfig": "^0.1.3", 20 | "typescript": "~4.6.3", 21 | "vite": "^2.9.5", 22 | "vue-tsc": "^0.34.7" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/router/index.ts: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory } from 'vue-router' 2 | import HomeView from '../views/HomeView.vue' 3 | 4 | const router = createRouter({ 5 | history: createWebHistory(import.meta.env.BASE_URL), 6 | routes: [ 7 | { 8 | path: '/', 9 | name: 'home', 10 | component: HomeView 11 | }, 12 | { 13 | path: '/about', 14 | name: 'about', 15 | // route level code-splitting 16 | // this generates a separate chunk (About.[hash].js) for this route 17 | // which is lazy-loaded when the route is visited. 18 | component: () => import('../views/AboutView.vue') 19 | } 20 | ] 21 | }) 22 | 23 | export default router 24 | -------------------------------------------------------------------------------- /src/components/icons/IconTooling.vue: -------------------------------------------------------------------------------- 1 | 2 | 20 | -------------------------------------------------------------------------------- /src/components/icons/IconCommunity.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /src/components/icons/IconDocumentation.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | amis demo 6 | 7 | 11 | 12 | 13 | 14 | 15 | 26 | 27 | 28 |
29 | 30 | 31 | 32 | 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cpmtcontract 2 | 3 | This template should help get you started developing with Vue 3 in Vite. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.vscode-typescript-vue-plugin). 8 | 9 | ## Type Support for `.vue` Imports in TS 10 | 11 | TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. 12 | 13 | If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: 14 | 15 | 1. Disable the built-in TypeScript Extension 16 | 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette 17 | 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` 18 | 2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. 19 | 20 | ## Customize configuration 21 | 22 | See [Vite Configuration Reference](https://vitejs.dev/config/). 23 | 24 | ## Project Setup 25 | 26 | ```sh 27 | npm install 28 | ``` 29 | 30 | ### Compile and Hot-Reload for Development 31 | 32 | ```sh 33 | npm run dev 34 | ``` 35 | 36 | ### Type-Check, Compile and Minify for Production 37 | 38 | ```sh 39 | npm run build 40 | ``` 41 | -------------------------------------------------------------------------------- /src/components/addUnitBtn.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "button", 3 | "label": "Add Unit", 4 | "level": "primary", 5 | "align": "right", 6 | "actionType": "dialog", 7 | "dialog": { 8 | "size": "lg", 9 | "title": "Add Unit", 10 | "body":{ 11 | "type": "crud", 12 | "width": 500, 13 | "draggable": true, 14 | "api": "/api/ddd/sample?waitSeconds=1", 15 | "keepItemSelectionOnPageChange": true, 16 | "maxKeepItemSelectionLength": 11, 17 | "labelTpl": "${id} ${engine}", 18 | "orderBy": "id", 19 | "orderDir": "asc", 20 | "quickSaveApi": "/api/sample/bulkUpdate", 21 | "quickSaveItemApi": "/api/sample/$id", 22 | "filterTogglable": true, 23 | "headerToolbar": [ 24 | { 25 | "type": "button", 26 | "label": "New Built", 27 | "level": "primary", 28 | "align": "left", 29 | "actionType": "dialog", 30 | "dialog": { 31 | "size": "lg", 32 | "title": "Add Unit", 33 | "body": "" 34 | } 35 | } 36 | ], 37 | "footerToolbar": ["statistics", "switch-per-page", "pagination"], 38 | "columns": [ 39 | { 40 | "name": "id", 41 | "label": "协议编号", 42 | "width": 20, 43 | "sortable": true, 44 | "type": "text", 45 | "toggled": true, 46 | "remark": "Bla bla Bla", 47 | "fixed": "left" 48 | }, 49 | { 50 | "name": "unit", 51 | "label": "委托单位名称", 52 | "sortable": true, 53 | "width": 50, 54 | "type": "text", 55 | "toggled": true, 56 | "fixed": "center" 57 | }, 58 | { 59 | "toggled": true 60 | } 61 | ] 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /src/components/icons/IconEcosystem.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /src/components/createBtn.json: -------------------------------------------------------------------------------- 1 | { 2 | "type" : "button", 3 | "label": "创建协议", 4 | "level": "primary", 5 | "actionType": "dialog", 6 | "dialog": { 7 | "size": "full", 8 | "title" : "创建协议", 9 | "body": { 10 | "type": "form", 11 | "api": "", 12 | "body": [ 13 | { 14 | "type": "input-text", 15 | "name" : "name", 16 | "required": true, 17 | "placeholder": "Please enter your Contract Title", 18 | "className": "text-7xl", 19 | "label" : "样品名称" 20 | }, 21 | { 22 | "type" : "group", 23 | "body" : [ 24 | { 25 | "type": "input-text", 26 | "name" : "detect_type", 27 | "required": true, 28 | "placeholder": "Please enter your contract type", 29 | "label" : "检测类型" 30 | }, 31 | { 32 | "type": "input-text", 33 | "name" : "id", 34 | "required": true, 35 | "placeholder": "Please enter your contract num", 36 | "label" : "协议编号" 37 | } 38 | ] 39 | }, 40 | { 41 | "type" : "group", 42 | "body" : [ 43 | { 44 | "type": "input-text", 45 | "name" : "name_unit", 46 | "required": true, 47 | "placeholder": "Please enter your entrust unit", 48 | "label" : "委托单位名称" 49 | }, 50 | { 51 | "type": "input-date", 52 | "name" : "date", 53 | "required": true, 54 | "placeholder": "Please select date", 55 | "label" : "创建日期" 56 | } 57 | ] 58 | }, 59 | { 60 | "type": "textarea", 61 | "name" : "issue_date", 62 | "label" : "Joint Content" 63 | }, 64 | { 65 | "type": "input-image", 66 | "name" : "annex", 67 | "label" : "Annex" 68 | } 69 | ] 70 | } 71 | } 72 | } -------------------------------------------------------------------------------- /src/components/contractBtn.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "button", 3 | "label": "Bottom Popup - Oversized", 4 | "level": "danger", 5 | "actionType": "drawer", 6 | "drawer": { 7 | "position": "bottom", 8 | "size": "xl", 9 | "title" : "Create Contract", 10 | "body": { 11 | "type": "form", 12 | "api": "", 13 | "title": "Create Contract", 14 | "mode": "inline", 15 | "body": [ 16 | { 17 | "type": "input-text", 18 | "name" : "contract_title", 19 | "required": true, 20 | "placeholder": "Please enter your Contract Title", 21 | "label" : "Contract Title", 22 | }, 23 | { 24 | "type" : "group", 25 | "body" : [ 26 | { 27 | "type": "input-text", 28 | "name" : "contract_type", 29 | "required": true, 30 | "placeholder": "Please enter your contract type", 31 | "label" : "Contract Type", 32 | }, 33 | { 34 | "type": "input-text", 35 | "name" : "contract_num", 36 | "required": true, 37 | "placeholder": "Please enter your contract num", 38 | "label" : "Contract Number", 39 | }, 40 | ] 41 | }, 42 | { 43 | "type" : "group", 44 | "body" : [ 45 | { 46 | "type": "input-text", 47 | "name" : "entrust_unit", 48 | "required": true, 49 | "placeholder": "Please enter your entrust unit", 50 | "label" : "Entrust Unit", 51 | }, 52 | { 53 | "type": "input-date", 54 | "name" : "issue_date", 55 | "required": true, 56 | "placeholder": "Please select date", 57 | "label" : "Issue Date", 58 | }, 59 | ] 60 | }, 61 | { 62 | "type": "textarea", 63 | "name" : "issue_date", 64 | "label" : "Joint Content", 65 | }, 66 | { 67 | "type": "input-image", 68 | "name" : "annex", 69 | "label" : "Annex", 70 | } 71 | ] 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /src/components/editBtn.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "label": "修改协议", 4 | "actionType": "dialog", 5 | "level" : "primary", 6 | "dialog": { 7 | "size": "full", 8 | "title" : "修改协议", 9 | "body": { 10 | "type": "form", 11 | "body": [ 12 | { 13 | "type": "input-text", 14 | "name" : "name", 15 | "required": true, 16 | "placeholder": "Please enter your Contract Title", 17 | "className": "text-7xl", 18 | "label" : "样品名称" 19 | }, 20 | { 21 | "type" : "group", 22 | "body" : [ 23 | { 24 | "type": "input-text", 25 | "name" : "detect_type", 26 | "required": true, 27 | "placeholder": "Please enter your contract type", 28 | "label" : "检测类型" 29 | }, 30 | { 31 | "type": "input-text", 32 | "name" : "id", 33 | "required": true, 34 | "placeholder": "Please enter your contract num", 35 | "label" : "协议编号" 36 | } 37 | ] 38 | }, 39 | { 40 | "type" : "group", 41 | "body" : [ 42 | { 43 | "type": "input-text", 44 | "name" : "name_unit", 45 | "required": true, 46 | "placeholder": "Please enter your entrust unit", 47 | "label" : "委托单位名称" 48 | }, 49 | { 50 | "type": "input-date", 51 | "name" : "date", 52 | "required": true, 53 | "placeholder": "Please select date", 54 | "label" : "创建日期" 55 | } 56 | ] 57 | }, 58 | { 59 | "type": "textarea", 60 | "name" : "issue_date", 61 | "label" : "Joint Content" 62 | }, 63 | { 64 | "type": "input-image", 65 | "name" : "annex", 66 | "label" : "Annex" 67 | } 68 | ] 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import navs from './components/nav.json' 2 | import page from './components/page.json' 3 | import tabs from './components/tabs.json' 4 | import expression from './components/expression.json' 5 | import createBtn from './components/createBtn.json' 6 | import editBtn from './components/editBtn.json' 7 | import unitBtn from './components/unitBtn.json' 8 | import detectBtn from './components/detectBtn.json' 9 | import subBtn from './components/subBtn.json' 10 | import addUnitBtn from './components/addUnitBtn.json' 11 | import configUnitBtn from './components/configUnitBtn.json' 12 | 13 | unitBtn.dialog.body.bulkActions.splice(1, 0, configUnitBtn); 14 | unitBtn.dialog.body.headerToolbar.unshift(configUnitBtn); 15 | 16 | (function () { 17 | let amis = amisRequire('amis/embed') 18 | 19 | // 通过替换下面这个配置来生成不同页面 20 | let amisJSON = { 21 | "title": '带边栏联动', 22 | "initApi": "", 23 | "aside": navs, 24 | "toolbar": [ 25 | { 26 | type: 'button', 27 | actionType: 'reload', 28 | label: 'Reload Nav', 29 | primary: true, 30 | target: 'nav', 31 | }, 32 | ], 33 | "body": "" 34 | }; 35 | var url_string = window.location.href; 36 | var url = new URL(url_string); 37 | var paramValue = url.searchParams.get("id"); 38 | if(paramValue == 1 ) { 39 | page.headerToolbar.splice(1,0,createBtn); 40 | page.bulkActions.unshift(editBtn, unitBtn, detectBtn, subBtn); 41 | expression.items[1].label="检测协议" 42 | tabs.tabs.map((data) => { 43 | data.body = page 44 | }); 45 | amisJSON.body = [expression, tabs] 46 | } else if (paramValue == 2) { 47 | expression.items[1].label="我的审批" 48 | const tab1 = tabs; 49 | tab1.tabs.splice(1, 0, tabs.tabs[3], tabs.tabs[4]); 50 | tab1.tabs = tab1.tabs.slice(0,3); 51 | tab1.tabs.map((data) => { 52 | data.body = page 53 | }); 54 | amisJSON.body = [expression, tab1] 55 | } else { 56 | const tab2 = tabs; 57 | tab2.tabs = tabs.tabs.slice(2,5); 58 | tab2.tabs.map((data) => { 59 | data.body = page 60 | }); 61 | expression.items[1].label="全部审批" 62 | amisJSON.body = [expression, tab2] 63 | } 64 | amis.embed('#root', amisJSON, {}, { theme: 'antd' }) 65 | })(); 66 | 67 | -------------------------------------------------------------------------------- /src/assets/base.css: -------------------------------------------------------------------------------- 1 | /* color palette from */ 2 | :root { 3 | --vt-c-white: #ffffff; 4 | --vt-c-white-soft: #f8f8f8; 5 | --vt-c-white-mute: #f2f2f2; 6 | 7 | --vt-c-black: #181818; 8 | --vt-c-black-soft: #222222; 9 | --vt-c-black-mute: #282828; 10 | 11 | --vt-c-indigo: #2c3e50; 12 | 13 | --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); 14 | --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); 15 | --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); 16 | --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); 17 | 18 | --vt-c-text-light-1: var(--vt-c-indigo); 19 | --vt-c-text-light-2: rgba(60, 60, 60, 0.66); 20 | --vt-c-text-dark-1: var(--vt-c-white); 21 | --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); 22 | } 23 | 24 | /* semantic color variables for this project */ 25 | :root { 26 | --color-background: var(--vt-c-white); 27 | --color-background-soft: var(--vt-c-white-soft); 28 | --color-background-mute: var(--vt-c-white-mute); 29 | 30 | --color-border: var(--vt-c-divider-light-2); 31 | --color-border-hover: var(--vt-c-divider-light-1); 32 | 33 | --color-heading: var(--vt-c-text-light-1); 34 | --color-text: var(--vt-c-text-light-1); 35 | 36 | --section-gap: 160px; 37 | } 38 | 39 | @media (prefers-color-scheme: dark) { 40 | :root { 41 | --color-background: var(--vt-c-black); 42 | --color-background-soft: var(--vt-c-black-soft); 43 | --color-background-mute: var(--vt-c-black-mute); 44 | 45 | --color-border: var(--vt-c-divider-dark-2); 46 | --color-border-hover: var(--vt-c-divider-dark-1); 47 | 48 | --color-heading: var(--vt-c-text-dark-1); 49 | --color-text: var(--vt-c-text-dark-2); 50 | } 51 | } 52 | 53 | *, 54 | *::before, 55 | *::after { 56 | box-sizing: border-box; 57 | margin: 0; 58 | position: relative; 59 | font-weight: normal; 60 | } 61 | 62 | body { 63 | min-height: 100vh; 64 | color: var(--color-text); 65 | background: var(--color-background); 66 | transition: color 0.5s, background-color 0.5s; 67 | line-height: 1.6; 68 | font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, 69 | Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; 70 | font-size: 15px; 71 | text-rendering: optimizeLegibility; 72 | -webkit-font-smoothing: antialiased; 73 | -moz-osx-font-smoothing: grayscale; 74 | } 75 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 22 | 23 | 120 | -------------------------------------------------------------------------------- /src/components/unitBtn.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "样品上传", 3 | "actionType": "dialog", 4 | "dialog": { 5 | "title": "样品上传", 6 | "size": "full", 7 | "className": "dtect_dia", 8 | "body": { 9 | "type": "crud", 10 | "width": 500, 11 | "draggable": true, 12 | "api": "/api/sss/sample?waitSeconds=1", 13 | "perPage": 15, 14 | "keepItemSelectionOnPageChange": true, 15 | "maxKeepItemSelectionLength": 11, 16 | "labelTpl": "${id} ${engine}", 17 | "orderBy": "id", 18 | "orderDir": "asc", 19 | "bulkActions": [ 20 | { 21 | "type": "button", 22 | "level": "danger", 23 | "label": "批量删除", 24 | "actionType": "ajax", 25 | "api": "delete:/api/sample/${ids|raw}", 26 | "confirmText": "确定要批量删除?" 27 | 28 | } 29 | ], 30 | "quickSaveApi": "/api/sample/bulkUpdate", 31 | "quickSaveItemApi": "/api/sample/$id", 32 | "filterTogglable": true, 33 | "headerToolbar": [ 34 | "bulkActions" 35 | ], 36 | "footerToolbar": ["statistics", "switch-per-page", "pagination"], 37 | "columns": [ 38 | { 39 | "name": "id", 40 | "label": "协议编号", 41 | "width": 20, 42 | "sortable": true, 43 | "type": "text", 44 | "toggled": true, 45 | "remark": "Bla bla Bla", 46 | "fixed": "left" 47 | }, 48 | { 49 | "name": "unit", 50 | "label": "委托单位名称", 51 | "sortable": true, 52 | "width": 50, 53 | "type": "text", 54 | "toggled": true, 55 | "fixed": "center" 56 | }, 57 | { 58 | "type": "operate", 59 | "label": "操作", 60 | "width": 10, 61 | "fixed": "right", 62 | "buttons": [ 63 | { 64 | "type": "button", 65 | "icon": "fa fa-times text-danger", 66 | "actionType": "ajax", 67 | "tooltip": "删除", 68 | "confirmText": "您确认要删除?", 69 | "api": "delete:/api/sample/$id" 70 | }, 71 | { 72 | "type": "button", 73 | "icon": "fa fa-times text-danger", 74 | "actionType": "ajax", 75 | "tooltip": "删除", 76 | "confirmText": "您确认要删除?", 77 | "api": "delete:/api/sample/$id" 78 | } 79 | ], 80 | "toggled": true 81 | } 82 | ] 83 | } 84 | } 85 | } -------------------------------------------------------------------------------- /public/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "status": 0, 3 | "msg": "this is Data Requipment", 4 | "data": { 5 | "items": [ 6 | { 7 | "id" : "1", 8 | "detect_type": "sssssssssssssssssssssssssssssss", 9 | "name_unit": "dddddddddddddddddddddddddddddd", 10 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 11 | "name": "ffffffffffffffffffffffffff", 12 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 13 | "date": "2016-06-07T23:59:59", 14 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 15 | }, 16 | { 17 | "id" : "2", 18 | "detect_type": "sssssssssssssssssssssssssssssss", 19 | "name_unit": "dddddddddddddddddddddddddddddd", 20 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 21 | "name": "ffffffffffffffffffffffffff", 22 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 23 | "date": "2016-06-07T23:59:59", 24 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 25 | }, 26 | { 27 | "id" : "3", 28 | "detect_type": "sssssssssssssssssssssssssssssss", 29 | "name_unit": "dddddddddddddddddddddddddddddd", 30 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 31 | "name": "ffffffffffffffffffffffffff", 32 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 33 | "date": "2016-06-07T23:59:59", 34 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 35 | }, 36 | { 37 | "id" : "5", 38 | "detect_type": "sssssssssssssssssssssssssssssss", 39 | "name_unit": "dddddddddddddddddddddddddddddd", 40 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 41 | "name": "ffffffffffffffffffffffffff", 42 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 43 | "date": "2016-06-07T23:59:59", 44 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 45 | }, 46 | { 47 | "id" : "6", 48 | "detect_type": "sssssssssssssssssssssssssssssss", 49 | "name_unit": "dddddddddddddddddddddddddddddd", 50 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 51 | "name": "ffffffffffffffffffffffffff", 52 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 53 | "date": "2016-06-07T23:59:59", 54 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 55 | }, 56 | { 57 | "id" : "7", 58 | "detect_type": "sssssssssssssssssssssssssssssss", 59 | "name_unit": "dddddddddddddddddddddddddddddd", 60 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 61 | "name": "ffffffffffffffffffffffffff", 62 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 63 | "date": "2016-06-07T23:59:59", 64 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 65 | }, 66 | { 67 | "id" : "8", 68 | "detect_type": "sssssssssssssssssssssssssssssss", 69 | "name_unit": "dddddddddddddddddddddddddddddd", 70 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 71 | "name": "ffffffffffffffffffffffffff", 72 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 73 | "date": "2016-06-07T23:59:59", 74 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 75 | }, 76 | { 77 | "id" : "9", 78 | "detect_type": "sssssssssssssssssssssssssssssss", 79 | "name_unit": "dddddddddddddddddddddddddddddd", 80 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 81 | "name": "ffffffffffffffffffffffffff", 82 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 83 | "date": "2016-06-07T23:59:59", 84 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 85 | }, 86 | { 87 | "id" : "10", 88 | "detect_type": "sssssssssssssssssssssssssssssss", 89 | "name_unit": "dddddddddddddddddddddddddddddd", 90 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 91 | "name": "ffffffffffffffffffffffffff", 92 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 93 | "date": "2016-06-07T23:59:59", 94 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 95 | }, 96 | { 97 | "id" : "11", 98 | "detect_type": "sssssssssssssssssssssssssssssss", 99 | "name_unit": "dddddddddddddddddddddddddddddd", 100 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 101 | "name": "ffffffffffffffffffffffffff", 102 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 103 | "date": "2016-06-07T23:59:59", 104 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 105 | }, 106 | { 107 | "id" : "12", 108 | "detect_type": "sssssssssssssssssssssssssssssss", 109 | "name_unit": "dddddddddddddddddddddddddddddd", 110 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 111 | "name": "ffffffffffffffffffffffffff", 112 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 113 | "date": "2016-06-07T23:59:59", 114 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 115 | }, 116 | { 117 | "id" : "13", 118 | "detect_type": "sssssssssssssssssssssssssssssss", 119 | "name_unit": "dddddddddddddddddddddddddddddd", 120 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 121 | "name": "ffffffffffffffffffffffffff", 122 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 123 | "date": "2016-06-07T23:59:59", 124 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 125 | }, 126 | { 127 | "id" : "14", 128 | "detect_type": "sssssssssssssssssssssssssssssss", 129 | "name_unit": "dddddddddddddddddddddddddddddd", 130 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 131 | "name": "ffffffffffffffffffffffffff", 132 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 133 | "date": "2016-06-07T23:59:59", 134 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 135 | }, 136 | { 137 | "id" : "15", 138 | "detect_type": "sssssssssssssssssssssssssssssss", 139 | "name_unit": "dddddddddddddddddddddddddddddd", 140 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 141 | "name": "ffffffffffffffffffffffffff", 142 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 143 | "date": "2016-06-07T23:59:59", 144 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 145 | }, 146 | { 147 | "id" : "16", 148 | "detect_type": "sssssssssssssssssssssssssssssss", 149 | "name_unit": "dddddddddddddddddddddddddddddd", 150 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 151 | "name": "ffffffffffffffffffffffffff", 152 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 153 | "date": "2016-06-07T23:59:59", 154 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 155 | }, 156 | { 157 | "id" : "17", 158 | "detect_type": "sssssssssssssssssssssssssssssss", 159 | "name_unit": "dddddddddddddddddddddddddddddd", 160 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 161 | "name": "ffffffffffffffffffffffffff", 162 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 163 | "date": "2016-06-07T23:59:59", 164 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 165 | }, 166 | { 167 | "id" : "18", 168 | "detect_type": "sssssssssssssssssssssssssssssss", 169 | "name_unit": "dddddddddddddddddddddddddddddd", 170 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 171 | "name": "ffffffffffffffffffffffffff", 172 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 173 | "date": "2016-06-07T23:59:59", 174 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 175 | }, 176 | { 177 | "id" : "19", 178 | "detect_type": "sssssssssssssssssssssssssssssss", 179 | "name_unit": "dddddddddddddddddddddddddddddd", 180 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 181 | "name": "ffffffffffffffffffffffffff", 182 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 183 | "date": "2016-06-07T23:59:59", 184 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 185 | }, 186 | { 187 | "id" : "20", 188 | "detect_type": "sssssssssssssssssssssssssssssss", 189 | "name_unit": "dddddddddddddddddddddddddddddd", 190 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 191 | "name": "ffffffffffffffffffffffffff", 192 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 193 | "date": "2016-06-07T23:59:59", 194 | "status": "eeeeeeeeeeeeeeeeeeeeeeeeeeee" 195 | } 196 | ] 197 | } 198 | } -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const path = require('path'); 3 | const cors = require('cors'); 4 | 5 | const app = express(); 6 | app.use(cors()) 7 | 8 | app.use(express.json()); 9 | 10 | app.get('/api/sample', (req, res) => { 11 | res.status(200).json({ 12 | "status": 0, 13 | "msg": "this is Data Requipment", 14 | "data": { 15 | "items": [ 16 | { 17 | "id" : "1", 18 | "detect_type": "sssssssssssssssssssssssssssssss", 19 | "name_unit": "dddddddddddddddddddddddddddddd", 20 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 21 | "name": "ffffffffffffffffffffffffff", 22 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 23 | "date": "2016-06-07T23:59:59", 24 | "status": "reject" 25 | }, 26 | { 27 | "id" : "2", 28 | "detect_type": "sssssssssssssssssssssssssssssss", 29 | "name_unit": "dddddddddddddddddddddddddddddd", 30 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 31 | "name": "ffffffffffffffffffffffffff", 32 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 33 | "date": "2016-06-07T23:59:59", 34 | "status": "reject" 35 | }, 36 | { 37 | "id" : "3", 38 | "detect_type": "sssssssssssssssssssssssssssssss", 39 | "name_unit": "dddddddddddddddddddddddddddddd", 40 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 41 | "name": "ffffffffffffffffffffffffff", 42 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 43 | "date": "2016-06-07T23:59:59", 44 | "status": "reject" 45 | }, 46 | { 47 | "id" : "5", 48 | "detect_type": "sssssssssssssssssssssssssssssss", 49 | "name_unit": "dddddddddddddddddddddddddddddd", 50 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 51 | "name": "ffffffffffffffffffffffffff", 52 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 53 | "date": "2016-06-07T23:59:59", 54 | "status": "reject" 55 | }, 56 | { 57 | "id" : "6", 58 | "detect_type": "sssssssssssssssssssssssssssssss", 59 | "name_unit": "dddddddddddddddddddddddddddddd", 60 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 61 | "name": "ffffffffffffffffffffffffff", 62 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 63 | "date": "2016-06-07T23:59:59", 64 | "status": "reject" 65 | }, 66 | { 67 | "id" : "7", 68 | "detect_type": "sssssssssssssssssssssssssssssss", 69 | "name_unit": "dddddddddddddddddddddddddddddd", 70 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 71 | "name": "ffffffffffffffffffffffffff", 72 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 73 | "date": "2016-06-07T23:59:59", 74 | "status": "reject" 75 | }, 76 | { 77 | "id" : "8", 78 | "detect_type": "sssssssssssssssssssssssssssssss", 79 | "name_unit": "dddddddddddddddddddddddddddddd", 80 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 81 | "name": "ffffffffffffffffffffffffff", 82 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 83 | "date": "2016-06-07T23:59:59", 84 | "status": "reject" 85 | }, 86 | { 87 | "id" : "9", 88 | "detect_type": "sssssssssssssssssssssssssssssss", 89 | "name_unit": "dddddddddddddddddddddddddddddd", 90 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 91 | "name": "ffffffffffffffffffffffffff", 92 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 93 | "date": "2016-06-07T23:59:59", 94 | "status": "reject" 95 | }, 96 | { 97 | "id" : "10", 98 | "detect_type": "sssssssssssssssssssssssssssssss", 99 | "name_unit": "dddddddddddddddddddddddddddddd", 100 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 101 | "name": "ffffffffffffffffffffffffff", 102 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 103 | "date": "2016-06-07T23:59:59", 104 | "status": "reject" 105 | }, 106 | { 107 | "id" : "11", 108 | "detect_type": "sssssssssssssssssssssssssssssss", 109 | "name_unit": "dddddddddddddddddddddddddddddd", 110 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 111 | "name": "ffffffffffffffffffffffffff", 112 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 113 | "date": "2016-06-07T23:59:59", 114 | "status": "reject" 115 | }, 116 | { 117 | "id" : "12", 118 | "detect_type": "sssssssssssssssssssssssssssssss", 119 | "name_unit": "dddddddddddddddddddddddddddddd", 120 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 121 | "name": "ffffffffffffffffffffffffff", 122 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 123 | "date": "2016-06-07T23:59:59", 124 | "status": "reject" 125 | }, 126 | { 127 | "id" : "13", 128 | "detect_type": "sssssssssssssssssssssssssssssss", 129 | "name_unit": "dddddddddddddddddddddddddddddd", 130 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 131 | "name": "ffffffffffffffffffffffffff", 132 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 133 | "date": "2016-06-07T23:59:59", 134 | "status": "passed" 135 | }, 136 | { 137 | "id" : "14", 138 | "detect_type": "sssssssssssssssssssssssssssssss", 139 | "name_unit": "dddddddddddddddddddddddddddddd", 140 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 141 | "name": "ffffffffffffffffffffffffff", 142 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 143 | "date": "2016-06-07T23:59:59", 144 | "status": "passed" 145 | }, 146 | { 147 | "id" : "15", 148 | "detect_type": "sssssssssssssssssssssssssssssss", 149 | "name_unit": "dddddddddddddddddddddddddddddd", 150 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 151 | "name": "ffffffffffffffffffffffffff", 152 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 153 | "date": "2016-06-07T23:59:59", 154 | "status": "passed" 155 | }, 156 | { 157 | "id" : "16", 158 | "detect_type": "sssssssssssssssssssssssssssssss", 159 | "name_unit": "dddddddddddddddddddddddddddddd", 160 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 161 | "name": "ffffffffffffffffffffffffff", 162 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 163 | "date": "2016-06-07T23:59:59", 164 | "status": "passed" 165 | }, 166 | { 167 | "id" : "17", 168 | "detect_type": "sssssssssssssssssssssssssssssss", 169 | "name_unit": "dddddddddddddddddddddddddddddd", 170 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 171 | "name": "ffffffffffffffffffffffffff", 172 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 173 | "date": "2016-06-07T23:59:59", 174 | "status": "passed" 175 | }, 176 | { 177 | "id" : "18", 178 | "detect_type": "sssssssssssssssssssssssssssssss", 179 | "name_unit": "dddddddddddddddddddddddddddddd", 180 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 181 | "name": "ffffffffffffffffffffffffff", 182 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 183 | "date": "2016-06-07T23:59:59", 184 | "status": "passed" 185 | }, 186 | { 187 | "id" : "19", 188 | "detect_type": "sssssssssssssssssssssssssssssss", 189 | "name_unit": "dddddddddddddddddddddddddddddd", 190 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 191 | "name": "ffffffffffffffffffffffffff", 192 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 193 | "date": "2016-06-07T23:59:59", 194 | "status": "passed" 195 | }, 196 | { 197 | "id" : "20", 198 | "detect_type": "sssssssssssssssssssssssssssssss", 199 | "name_unit": "dddddddddddddddddddddddddddddd", 200 | "contract": "aaaaaaaaaaaaaaaaaaaaaaaaaa", 201 | "name": "ffffffffffffffffffffffffff", 202 | "funder": "qqqqqqqqqqqqqqqqqqqqqqqqqqq", 203 | "date": "2016-06-07T23:59:59", 204 | "status": "passed" 205 | } 206 | ] 207 | } 208 | }); 209 | }); 210 | 211 | app.listen(5000, () => console.log('start')); -------------------------------------------------------------------------------- /src/components/page.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "crud", 3 | "draggable": true, 4 | "api": "/api/sample?waitSeconds=1", 5 | "perPage": 15, 6 | "keepItemSelectionOnPageChange": true, 7 | "maxKeepItemSelectionLength": 11, 8 | "labelTpl": "${id} ${engine}", 9 | "orderBy": "id", 10 | "orderDir": "asc", 11 | "filter": { 12 | "title": "条件搜索", 13 | "body": { 14 | "type": "group", 15 | "mode": "horizontal", 16 | "autoFocus": false, 17 | "body":[ 18 | { 19 | "type": "input-text", 20 | "name": "email3", 21 | "placeholder": "请输入邮箱地", 22 | "label": "邮箱", 23 | "size": "full" 24 | }, 25 | { 26 | "type": "input-text", 27 | "name": "password3", 28 | "label": "密码", 29 | "placeholder": "请输入密码", 30 | "size": "full" 31 | }, 32 | { 33 | "type": "input-text", 34 | "name": "password3", 35 | "label": "密码", 36 | "placeholder": "请输入密码", 37 | "size": "full" 38 | } 39 | ] 40 | } 41 | }, 42 | "bulkActions": [], 43 | "quickSaveApi": "/api/sample/bulkUpdate", 44 | "quickSaveItemApi": "/api/sample/$id", 45 | "filterTogglable": true, 46 | "headerToolbar": [ 47 | "filter-toggler", 48 | "bulkActions", 49 | { 50 | "type": "tpl", 51 | "tpl": "定制内容示例:当前有 ${count} 条数据。", 52 | "className": "v-middle" 53 | }, 54 | { 55 | "type": "link", 56 | "href": "https://www.baidu.com", 57 | "body": "百度一下", 58 | "htmlTarget": "_parent", 59 | "className": "v-middle" 60 | }, 61 | { 62 | "type": "columns-toggler", 63 | "align": "right" 64 | }, 65 | { 66 | "type": "drag-toggler", 67 | "align": "right" 68 | }, 69 | { 70 | "type": "pagination", 71 | "align": "right" 72 | } 73 | ], 74 | "footerToolbar": ["statistics", "switch-per-page", "pagination"], 75 | "columns": [ 76 | { 77 | "name": "id", 78 | "label": "协议编号", 79 | "width": 20, 80 | "sortable": true, 81 | "type": "text", 82 | "toggled": true, 83 | "remark": "Bla bla Bla", 84 | "fixed": "left" 85 | }, 86 | { 87 | "name": "detect_type", 88 | "label": "检测类型", 89 | "sortable": true, 90 | "searchable": true, 91 | "popOver": { 92 | "body": "Popover 内容:${platform}", 93 | "trigger": "hover" 94 | }, 95 | "popOverEnableOn": "this.id === 1", 96 | "type": "text", 97 | "toggled": true 98 | }, 99 | { 100 | "name": "name_unit", 101 | "label": "委托单位名称", 102 | "sortable": true, 103 | "type": "text", 104 | "toggled": false 105 | }, 106 | { 107 | "name": "contract", 108 | "label": "联系人", 109 | "popOver": { 110 | "body": "Popover 内容:${contract}" 111 | }, 112 | "type": "text", 113 | "sortable": true, 114 | "toggled": true 115 | }, 116 | { 117 | "name": "name", 118 | "label": "样品名称", 119 | "type": "text", 120 | "toggled": true 121 | }, 122 | { 123 | "type": "text", 124 | "name": "founder", 125 | "toggled": true, 126 | "label": "创建人" 127 | }, 128 | { 129 | "type": "text", 130 | "name": "date", 131 | "toggled": true, 132 | "label": "创建日期" 133 | }, 134 | { 135 | "type": "text", 136 | "name": "status", 137 | "toggled": true, 138 | "label": "协议状态" 139 | }, 140 | { 141 | "type": "operation", 142 | "label": "操作", 143 | "width": 100, 144 | "fixed": "right", 145 | "buttons": [ 146 | { 147 | "type": "button", 148 | "icon": "fa fa-eye", 149 | "actionType": "dialog", 150 | "tooltip": "查看", 151 | "dialog": { 152 | "title": "查看", 153 | "body": { 154 | "type": "form", 155 | "body": [ 156 | { 157 | "type": "static", 158 | "name": "detect_type", 159 | "label": "检测类型" 160 | }, 161 | { 162 | "type": "divider" 163 | }, 164 | { 165 | "type": "static", 166 | "name": "name_unit", 167 | "label": "委托单位名称" 168 | }, 169 | { 170 | "type": "divider" 171 | }, 172 | { 173 | "type": "static", 174 | "name": "contract", 175 | "label": "联系人" 176 | }, 177 | { 178 | "type": "divider" 179 | }, 180 | { 181 | "type": "static", 182 | "name": "name", 183 | "label": "样品名称" 184 | }, 185 | { 186 | "type": "divider" 187 | }, 188 | { 189 | "type": "static", 190 | "name": "funder", 191 | "label": "创建人" 192 | }, 193 | { 194 | "type": "divider" 195 | }, 196 | { 197 | "type": "static", 198 | "name": "date", 199 | "label": "创建日期" 200 | }, 201 | { 202 | "type": "divider" 203 | }, 204 | { 205 | "type": "static", 206 | "name": "status", 207 | "label": "协议状态" 208 | }, 209 | { 210 | "type": "divider" 211 | }, 212 | { 213 | "type": "html", 214 | "html": "

添加其他 Html 片段 需要支持变量替换(todo).

" 215 | } 216 | ] 217 | } 218 | } 219 | }, 220 | { 221 | "type": "button", 222 | "icon": "fa fa-pencil", 223 | "tooltip": "编辑", 224 | "actionType": "drawer", 225 | "drawer": { 226 | "position": "left", 227 | "size": "lg", 228 | "title": "编辑", 229 | "body": { 230 | "type": "form", 231 | "name": "sample-edit-form", 232 | "api": "/api/sample/$id", 233 | "body": [ 234 | { 235 | "type": "input-text", 236 | "name": "detect_type", 237 | "label": "检测类型", 238 | "required": true 239 | }, 240 | { 241 | "type": "divider" 242 | }, 243 | { 244 | "type": "input-text", 245 | "name": "name_unit", 246 | "label": "委托单位名称", 247 | "required": true 248 | }, 249 | { 250 | "type": "divider" 251 | }, 252 | { 253 | "type": "input-text", 254 | "name": "contract", 255 | "label": "联系人", 256 | "required": true 257 | }, 258 | { 259 | "type": "divider" 260 | }, 261 | { 262 | "type": "input-text", 263 | "name": "name", 264 | "label": "样品名称" 265 | }, 266 | { 267 | "type": "divider" 268 | }, 269 | { 270 | "type": "input-text", 271 | "name": "funder", 272 | "label": "创建人" 273 | }, 274 | { 275 | "type": "divider" 276 | }, 277 | { 278 | "type": "input-text", 279 | "name": "date", 280 | "label": "创建日期" 281 | }, 282 | { 283 | "type": "divider" 284 | }, 285 | { 286 | "type": "input-text", 287 | "name": "status", 288 | "label": "协议状态" 289 | }, 290 | { 291 | "type": "divider" 292 | } 293 | ] 294 | } 295 | } 296 | }, 297 | { 298 | "type": "button", 299 | "icon": "fa fa-times text-danger", 300 | "actionType": "ajax", 301 | "tooltip": "删除", 302 | "confirmText": "您确认要删除?", 303 | "api": "delete:/api/sample/$id" 304 | } 305 | ], 306 | "toggled": true 307 | } 308 | ] 309 | } --------------------------------------------------------------------------------