├── 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 |
6 |
7 |
8 |
9 |
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 |
2 |
3 |
This is an about page
4 |
5 |
6 |
7 |
16 |
--------------------------------------------------------------------------------
/src/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/icons/IconSupport.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
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 |
3 |
19 |
20 |
--------------------------------------------------------------------------------
/src/components/icons/IconCommunity.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/src/components/icons/IconDocumentation.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
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 |
2 |
7 |
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 |
7 |
19 |
20 |
21 |
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 | }
--------------------------------------------------------------------------------