mirror of
				https://github.com/pure-admin/pure-admin-thin.git
				synced 2025-11-04 17:44:48 +08:00 
			
		
		
		
	feat: 整合路由页面
This commit is contained in:
		
							parent
							
								
									caba16e30f
								
							
						
					
					
						commit
						b0c2c47607
					
				
							
								
								
									
										155
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										155
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@ -28,6 +28,7 @@ specifiers:
 | 
				
			|||||||
  autoprefixer: ^10.4.14
 | 
					  autoprefixer: ^10.4.14
 | 
				
			||||||
  axios: ^1.4.0
 | 
					  axios: ^1.4.0
 | 
				
			||||||
  cloc: ^2.11.0
 | 
					  cloc: ^2.11.0
 | 
				
			||||||
 | 
					  crypto-js: ^4.1.1
 | 
				
			||||||
  cssnano: ^6.0.1
 | 
					  cssnano: ^6.0.1
 | 
				
			||||||
  dayjs: ^1.11.8
 | 
					  dayjs: ^1.11.8
 | 
				
			||||||
  echarts: ^5.4.2
 | 
					  echarts: ^5.4.2
 | 
				
			||||||
@ -37,6 +38,7 @@ specifiers:
 | 
				
			|||||||
  eslint-plugin-vue: ^9.15.1
 | 
					  eslint-plugin-vue: ^9.15.1
 | 
				
			||||||
  husky: ^8.0.3
 | 
					  husky: ^8.0.3
 | 
				
			||||||
  js-cookie: ^3.0.5
 | 
					  js-cookie: ^3.0.5
 | 
				
			||||||
 | 
					  jsencrypt: ^3.3.2
 | 
				
			||||||
  lint-staged: ^13.2.2
 | 
					  lint-staged: ^13.2.2
 | 
				
			||||||
  mitt: ^3.0.0
 | 
					  mitt: ^3.0.0
 | 
				
			||||||
  mockjs: ^1.1.0
 | 
					  mockjs: ^1.1.0
 | 
				
			||||||
@ -51,6 +53,7 @@ specifiers:
 | 
				
			|||||||
  postcss-scss: ^4.0.6
 | 
					  postcss-scss: ^4.0.6
 | 
				
			||||||
  prettier: ^2.8.8
 | 
					  prettier: ^2.8.8
 | 
				
			||||||
  pretty-quick: ^3.1.3
 | 
					  pretty-quick: ^3.1.3
 | 
				
			||||||
 | 
					  qrcode: ^1.5.3
 | 
				
			||||||
  qs: ^6.11.2
 | 
					  qs: ^6.11.2
 | 
				
			||||||
  responsive-storage: ^2.2.0
 | 
					  responsive-storage: ^2.2.0
 | 
				
			||||||
  rimraf: ^5.0.1
 | 
					  rimraf: ^5.0.1
 | 
				
			||||||
@ -72,6 +75,7 @@ specifiers:
 | 
				
			|||||||
  svgo: ^3.0.2
 | 
					  svgo: ^3.0.2
 | 
				
			||||||
  tailwindcss: ^3.3.2
 | 
					  tailwindcss: ^3.3.2
 | 
				
			||||||
  terser: ^5.18.1
 | 
					  terser: ^5.18.1
 | 
				
			||||||
 | 
					  typeit: ^8.7.1
 | 
				
			||||||
  typescript: 5.0.4
 | 
					  typescript: 5.0.4
 | 
				
			||||||
  vite: ^4.3.9
 | 
					  vite: ^4.3.9
 | 
				
			||||||
  vite-plugin-cdn-import: ^0.3.5
 | 
					  vite-plugin-cdn-import: ^0.3.5
 | 
				
			||||||
@ -93,19 +97,23 @@ dependencies:
 | 
				
			|||||||
  "@vueuse/motion": 2.0.0_vue@3.3.4
 | 
					  "@vueuse/motion": 2.0.0_vue@3.3.4
 | 
				
			||||||
  animate.css: 4.1.1
 | 
					  animate.css: 4.1.1
 | 
				
			||||||
  axios: 1.4.0
 | 
					  axios: 1.4.0
 | 
				
			||||||
 | 
					  crypto-js: 4.1.1
 | 
				
			||||||
  dayjs: 1.11.8
 | 
					  dayjs: 1.11.8
 | 
				
			||||||
  echarts: 5.4.2
 | 
					  echarts: 5.4.2
 | 
				
			||||||
  element-plus: 2.3.6_vue@3.3.4
 | 
					  element-plus: 2.3.6_vue@3.3.4
 | 
				
			||||||
  js-cookie: 3.0.5
 | 
					  js-cookie: 3.0.5
 | 
				
			||||||
 | 
					  jsencrypt: 3.3.2
 | 
				
			||||||
  mitt: 3.0.0
 | 
					  mitt: 3.0.0
 | 
				
			||||||
  mockjs: 1.1.0
 | 
					  mockjs: 1.1.0
 | 
				
			||||||
  nprogress: 0.2.0
 | 
					  nprogress: 0.2.0
 | 
				
			||||||
  path: 0.12.7
 | 
					  path: 0.12.7
 | 
				
			||||||
  pinia: 2.1.4_typescript@5.0.4+vue@3.3.4
 | 
					  pinia: 2.1.4_typescript@5.0.4+vue@3.3.4
 | 
				
			||||||
  pinyin-pro: 3.15.2
 | 
					  pinyin-pro: 3.15.2
 | 
				
			||||||
 | 
					  qrcode: 1.5.3
 | 
				
			||||||
  qs: 6.11.2
 | 
					  qs: 6.11.2
 | 
				
			||||||
  responsive-storage: 2.2.0
 | 
					  responsive-storage: 2.2.0
 | 
				
			||||||
  sortablejs: 1.15.0
 | 
					  sortablejs: 1.15.0
 | 
				
			||||||
 | 
					  typeit: 8.7.1
 | 
				
			||||||
  vue: 3.3.4
 | 
					  vue: 3.3.4
 | 
				
			||||||
  vue-router: 4.2.2_vue@3.3.4
 | 
					  vue-router: 4.2.2_vue@3.3.4
 | 
				
			||||||
  vue-types: 5.1.0_vue@3.3.4
 | 
					  vue-types: 5.1.0_vue@3.3.4
 | 
				
			||||||
@ -2373,7 +2381,6 @@ packages:
 | 
				
			|||||||
        integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
 | 
					        integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    engines: { node: ">=8" }
 | 
					    engines: { node: ">=8" }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /ansi-regex/6.0.1:
 | 
					  /ansi-regex/6.0.1:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -2400,7 +2407,6 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=8" }
 | 
					    engines: { node: ">=8" }
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      color-convert: 2.0.1
 | 
					      color-convert: 2.0.1
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /ansi-styles/6.2.1:
 | 
					  /ansi-styles/6.2.1:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -2699,7 +2705,6 @@ packages:
 | 
				
			|||||||
        integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
 | 
					        integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    engines: { node: ">=6" }
 | 
					    engines: { node: ">=6" }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /camelcase/6.3.0:
 | 
					  /camelcase/6.3.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -2834,6 +2839,17 @@ packages:
 | 
				
			|||||||
      string-width: 5.1.2
 | 
					      string-width: 5.1.2
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /cliui/6.0.0:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      string-width: 4.2.3
 | 
				
			||||||
 | 
					      strip-ansi: 6.0.1
 | 
				
			||||||
 | 
					      wrap-ansi: 6.2.0
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /cliui/8.0.1:
 | 
					  /cliui/8.0.1:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -2870,7 +2886,6 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=7.0.0" }
 | 
					    engines: { node: ">=7.0.0" }
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      color-name: 1.1.4
 | 
					      color-name: 1.1.4
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /color-name/1.1.3:
 | 
					  /color-name/1.1.3:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -2883,7 +2898,6 @@ packages:
 | 
				
			|||||||
      {
 | 
					      {
 | 
				
			||||||
        integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
 | 
					        integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /color-string/1.9.1:
 | 
					  /color-string/1.9.1:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -3110,6 +3124,13 @@ packages:
 | 
				
			|||||||
      which: 2.0.2
 | 
					      which: 2.0.2
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /crypto-js/4.1.1:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /css-declaration-sorter/6.4.0_postcss@8.4.24:
 | 
					  /css-declaration-sorter/6.4.0_postcss@8.4.24:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -3450,7 +3471,6 @@ packages:
 | 
				
			|||||||
        integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
 | 
					        integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    engines: { node: ">=0.10.0" }
 | 
					    engines: { node: ">=0.10.0" }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /deep-is/0.1.4:
 | 
					  /deep-is/0.1.4:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -3514,6 +3534,13 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=0.3.1" }
 | 
					    engines: { node: ">=0.3.1" }
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /dijkstrajs/1.0.3:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /dir-glob/3.0.1:
 | 
					  /dir-glob/3.0.1:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -3693,7 +3720,6 @@ packages:
 | 
				
			|||||||
      {
 | 
					      {
 | 
				
			||||||
        integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
 | 
					        integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /emoji-regex/9.2.2:
 | 
					  /emoji-regex/9.2.2:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -3702,6 +3728,13 @@ packages:
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /encode-utf8/1.0.3:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /encodeurl/1.0.2:
 | 
					  /encodeurl/1.0.2:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -4235,7 +4268,6 @@ packages:
 | 
				
			|||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      locate-path: 5.0.0
 | 
					      locate-path: 5.0.0
 | 
				
			||||||
      path-exists: 4.0.0
 | 
					      path-exists: 4.0.0
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /find-up/5.0.0:
 | 
					  /find-up/5.0.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -4398,7 +4430,6 @@ packages:
 | 
				
			|||||||
        integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
 | 
					        integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    engines: { node: 6.* || 8.* || >= 10.* }
 | 
					    engines: { node: 6.* || 8.* || >= 10.* }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /get-intrinsic/1.2.1:
 | 
					  /get-intrinsic/1.2.1:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -4938,7 +4969,6 @@ packages:
 | 
				
			|||||||
        integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
 | 
					        integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    engines: { node: ">=8" }
 | 
					    engines: { node: ">=8" }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /is-fullwidth-code-point/4.0.0:
 | 
					  /is-fullwidth-code-point/4.0.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -5112,6 +5142,13 @@ packages:
 | 
				
			|||||||
      argparse: 2.0.1
 | 
					      argparse: 2.0.1
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /jsencrypt/3.3.2:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /jsesc/2.5.2:
 | 
					  /jsesc/2.5.2:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -5297,7 +5334,6 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=8" }
 | 
					    engines: { node: ">=8" }
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      p-locate: 4.1.0
 | 
					      p-locate: 4.1.0
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /locate-path/6.0.0:
 | 
					  /locate-path/6.0.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -6061,7 +6097,6 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=6" }
 | 
					    engines: { node: ">=6" }
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      p-try: 2.2.0
 | 
					      p-try: 2.2.0
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /p-limit/3.1.0:
 | 
					  /p-limit/3.1.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -6081,7 +6116,6 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=8" }
 | 
					    engines: { node: ">=8" }
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      p-limit: 2.3.0
 | 
					      p-limit: 2.3.0
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /p-locate/5.0.0:
 | 
					  /p-locate/5.0.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -6109,7 +6143,6 @@ packages:
 | 
				
			|||||||
        integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
 | 
					        integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    engines: { node: ">=6" }
 | 
					    engines: { node: ">=6" }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /parent-module/1.0.1:
 | 
					  /parent-module/1.0.1:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -6148,7 +6181,6 @@ packages:
 | 
				
			|||||||
        integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
 | 
					        integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    engines: { node: ">=8" }
 | 
					    engines: { node: ">=8" }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /path-is-absolute/1.0.1:
 | 
					  /path-is-absolute/1.0.1:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -6310,6 +6342,14 @@ packages:
 | 
				
			|||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
    optional: true
 | 
					    optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /pngjs/5.0.0:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    engines: { node: ">=10.13.0" }
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /popmotion/11.0.5:
 | 
					  /popmotion/11.0.5:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -7313,6 +7353,20 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=0.6.0", teleport: ">=0.2.0" }
 | 
					    engines: { node: ">=0.6.0", teleport: ">=0.2.0" }
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /qrcode/1.5.3:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    engines: { node: ">=10.13.0" }
 | 
				
			||||||
 | 
					    hasBin: true
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      dijkstrajs: 1.0.3
 | 
				
			||||||
 | 
					      encode-utf8: 1.0.3
 | 
				
			||||||
 | 
					      pngjs: 5.0.0
 | 
				
			||||||
 | 
					      yargs: 15.4.1
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /qs/6.11.2:
 | 
					  /qs/6.11.2:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -7437,7 +7491,6 @@ packages:
 | 
				
			|||||||
        integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
 | 
					        integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    engines: { node: ">=0.10.0" }
 | 
					    engines: { node: ">=0.10.0" }
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /require-from-string/2.0.2:
 | 
					  /require-from-string/2.0.2:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -7447,6 +7500,13 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=0.10.0" }
 | 
					    engines: { node: ">=0.10.0" }
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /require-main-filename/2.0.0:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /resolve-from/4.0.0:
 | 
					  /resolve-from/4.0.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -7702,6 +7762,13 @@ packages:
 | 
				
			|||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      lru-cache: 6.0.0
 | 
					      lru-cache: 6.0.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /set-blocking/2.0.0:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /shebang-command/2.0.0:
 | 
					  /shebang-command/2.0.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -7947,7 +8014,6 @@ packages:
 | 
				
			|||||||
      emoji-regex: 8.0.0
 | 
					      emoji-regex: 8.0.0
 | 
				
			||||||
      is-fullwidth-code-point: 3.0.0
 | 
					      is-fullwidth-code-point: 3.0.0
 | 
				
			||||||
      strip-ansi: 6.0.1
 | 
					      strip-ansi: 6.0.1
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /string-width/5.1.2:
 | 
					  /string-width/5.1.2:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -7988,7 +8054,6 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=8" }
 | 
					    engines: { node: ">=8" }
 | 
				
			||||||
    dependencies:
 | 
					    dependencies:
 | 
				
			||||||
      ansi-regex: 5.0.1
 | 
					      ansi-regex: 5.0.1
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /strip-ansi/7.1.0:
 | 
					  /strip-ansi/7.1.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -8711,6 +8776,14 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=8" }
 | 
					    engines: { node: ">=8" }
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /typeit/8.7.1:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-Bx/O4NMz10NWh9FWYtVwV4XwGHF9UDJfpCZPJRtw2/oUcahFAStU8J0t19aroPfTV6s1UlS5ICoqilOqmEnh2Q==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    requiresBuild: true
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /typescript/5.0.4:
 | 
					  /typescript/5.0.4:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -9109,6 +9182,13 @@ packages:
 | 
				
			|||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
    optional: true
 | 
					    optional: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /which-module/2.0.1:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /which/1.3.1:
 | 
					  /which/1.3.1:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -9148,7 +9228,6 @@ packages:
 | 
				
			|||||||
      ansi-styles: 4.3.0
 | 
					      ansi-styles: 4.3.0
 | 
				
			||||||
      string-width: 4.2.3
 | 
					      string-width: 4.2.3
 | 
				
			||||||
      strip-ansi: 6.0.1
 | 
					      strip-ansi: 6.0.1
 | 
				
			||||||
    dev: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /wrap-ansi/7.0.0:
 | 
					  /wrap-ansi/7.0.0:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
@ -9200,6 +9279,13 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=12" }
 | 
					    engines: { node: ">=12" }
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /y18n/4.0.3:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /y18n/5.0.8:
 | 
					  /y18n/5.0.8:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -9236,6 +9322,17 @@ packages:
 | 
				
			|||||||
    engines: { node: ">= 14" }
 | 
					    engines: { node: ">= 14" }
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /yargs-parser/18.1.3:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    engines: { node: ">=6" }
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      camelcase: 5.3.1
 | 
				
			||||||
 | 
					      decamelize: 1.2.0
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /yargs-parser/20.2.9:
 | 
					  /yargs-parser/20.2.9:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
@ -9252,6 +9349,26 @@ packages:
 | 
				
			|||||||
    engines: { node: ">=12" }
 | 
					    engines: { node: ">=12" }
 | 
				
			||||||
    dev: true
 | 
					    dev: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /yargs/15.4.1:
 | 
				
			||||||
 | 
					    resolution:
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    engines: { node: ">=8" }
 | 
				
			||||||
 | 
					    dependencies:
 | 
				
			||||||
 | 
					      cliui: 6.0.0
 | 
				
			||||||
 | 
					      decamelize: 1.2.0
 | 
				
			||||||
 | 
					      find-up: 4.1.0
 | 
				
			||||||
 | 
					      get-caller-file: 2.0.5
 | 
				
			||||||
 | 
					      require-directory: 2.1.1
 | 
				
			||||||
 | 
					      require-main-filename: 2.0.0
 | 
				
			||||||
 | 
					      set-blocking: 2.0.0
 | 
				
			||||||
 | 
					      string-width: 4.2.3
 | 
				
			||||||
 | 
					      which-module: 2.0.1
 | 
				
			||||||
 | 
					      y18n: 4.0.3
 | 
				
			||||||
 | 
					      yargs-parser: 18.1.3
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /yargs/17.7.2:
 | 
					  /yargs/17.7.2:
 | 
				
			||||||
    resolution:
 | 
					    resolution:
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										35
									
								
								src/api/system.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/api/system.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					import { http } from "@/utils/http";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Result = {
 | 
				
			||||||
 | 
					  success: boolean;
 | 
				
			||||||
 | 
					  data?: {
 | 
				
			||||||
 | 
					    /** 列表数据 */
 | 
				
			||||||
 | 
					    list: Array<any>;
 | 
				
			||||||
 | 
					    /** 总条目数 */
 | 
				
			||||||
 | 
					    total?: number;
 | 
				
			||||||
 | 
					    /** 每页显示条目个数 */
 | 
				
			||||||
 | 
					    pageSize?: number;
 | 
				
			||||||
 | 
					    /** 当前页数 */
 | 
				
			||||||
 | 
					    currentPage?: number;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ResultDept = {
 | 
				
			||||||
 | 
					  success: boolean;
 | 
				
			||||||
 | 
					  data?: Array<any>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 获取用户管理列表 */
 | 
				
			||||||
 | 
					export const getUserList = (data?: object) => {
 | 
				
			||||||
 | 
					  return http.request<Result>("post", "/user", { data });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 获取角色管理列表 */
 | 
				
			||||||
 | 
					export const getRoleList = (data?: object) => {
 | 
				
			||||||
 | 
					  return http.request<Result>("post", "/role", { data });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 获取部门管理列表 */
 | 
				
			||||||
 | 
					export const getDeptList = (data?: object) => {
 | 
				
			||||||
 | 
					  return http.request<ResultDept>("post", "/dept", { data });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										1961
									
								
								src/components/ReIcon/data.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1961
									
								
								src/components/ReIcon/data.ts
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										237
									
								
								src/components/ReIcon/src/Select.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										237
									
								
								src/components/ReIcon/src/Select.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,237 @@
 | 
				
			|||||||
 | 
					<script setup lang="ts">
 | 
				
			||||||
 | 
					import { cloneDeep } from "@pureadmin/utils";
 | 
				
			||||||
 | 
					import { IconJson } from "@/components/ReIcon/data";
 | 
				
			||||||
 | 
					import { ref, computed, CSSProperties, toRef, watch } from "vue";
 | 
				
			||||||
 | 
					type ParameterCSSProperties = (item?: string) => CSSProperties | undefined;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					defineOptions({
 | 
				
			||||||
 | 
					  name: "IconSelect"
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const props = defineProps({
 | 
				
			||||||
 | 
					  modelValue: {
 | 
				
			||||||
 | 
					    require: false,
 | 
				
			||||||
 | 
					    type: String
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					const emit = defineEmits<{ (e: "update:modelValue", v: string) }>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const visible = ref(false);
 | 
				
			||||||
 | 
					const inputValue = toRef(props, "modelValue");
 | 
				
			||||||
 | 
					const iconList = ref(IconJson);
 | 
				
			||||||
 | 
					const icon = ref("add-location");
 | 
				
			||||||
 | 
					const currentActiveType = ref("ep:");
 | 
				
			||||||
 | 
					// 深拷贝图标数据,前端做搜索
 | 
				
			||||||
 | 
					const copyIconList = cloneDeep(iconList.value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const pageSize = ref(96);
 | 
				
			||||||
 | 
					const currentPage = ref(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 搜索条件
 | 
				
			||||||
 | 
					const filterValue = ref("");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const tabsList = [
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "Element Plus",
 | 
				
			||||||
 | 
					    name: "ep:"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "Font Awesome 4",
 | 
				
			||||||
 | 
					    name: "fa:"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    label: "Font Awesome 5 Solid",
 | 
				
			||||||
 | 
					    name: "fa-solid:"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const pageList = computed(() => {
 | 
				
			||||||
 | 
					  if (currentPage.value === 1) {
 | 
				
			||||||
 | 
					    return copyIconList[currentActiveType.value]
 | 
				
			||||||
 | 
					      .filter(v => v.includes(filterValue.value))
 | 
				
			||||||
 | 
					      .slice(currentPage.value - 1, pageSize.value);
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    return copyIconList[currentActiveType.value]
 | 
				
			||||||
 | 
					      .filter(v => v.includes(filterValue.value))
 | 
				
			||||||
 | 
					      .slice(
 | 
				
			||||||
 | 
					        pageSize.value * (currentPage.value - 1),
 | 
				
			||||||
 | 
					        pageSize.value * (currentPage.value - 1) + pageSize.value
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const iconItemStyle = computed((): ParameterCSSProperties => {
 | 
				
			||||||
 | 
					  return item => {
 | 
				
			||||||
 | 
					    if (inputValue.value === currentActiveType.value + item) {
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        borderColor: "var(--el-color-primary)",
 | 
				
			||||||
 | 
					        color: "var(--el-color-primary)"
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function handleClick({ props }) {
 | 
				
			||||||
 | 
					  currentPage.value = 1;
 | 
				
			||||||
 | 
					  currentActiveType.value = props.name;
 | 
				
			||||||
 | 
					  emit(
 | 
				
			||||||
 | 
					    "update:modelValue",
 | 
				
			||||||
 | 
					    currentActiveType.value + iconList.value[currentActiveType.value][0]
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					  icon.value = iconList.value[currentActiveType.value][0];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function onChangeIcon(item) {
 | 
				
			||||||
 | 
					  icon.value = item;
 | 
				
			||||||
 | 
					  emit("update:modelValue", currentActiveType.value + item);
 | 
				
			||||||
 | 
					  visible.value = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function onCurrentChange(page) {
 | 
				
			||||||
 | 
					  currentPage.value = page;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					watch(
 | 
				
			||||||
 | 
					  () => {
 | 
				
			||||||
 | 
					    return props.modelValue;
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  () => {
 | 
				
			||||||
 | 
					    if (props.modelValue) {
 | 
				
			||||||
 | 
					      currentActiveType.value = props.modelValue.substring(
 | 
				
			||||||
 | 
					        0,
 | 
				
			||||||
 | 
					        props.modelValue.indexOf(":") + 1
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      icon.value = props.modelValue.substring(
 | 
				
			||||||
 | 
					        props.modelValue.indexOf(":") + 1
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  { immediate: true }
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					watch(
 | 
				
			||||||
 | 
					  () => {
 | 
				
			||||||
 | 
					    return filterValue.value;
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  () => {
 | 
				
			||||||
 | 
					    currentPage.value = 1;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="selector w-[350px]">
 | 
				
			||||||
 | 
					    <el-input v-model="inputValue" disabled>
 | 
				
			||||||
 | 
					      <template #append>
 | 
				
			||||||
 | 
					        <el-popover
 | 
				
			||||||
 | 
					          :width="350"
 | 
				
			||||||
 | 
					          trigger="click"
 | 
				
			||||||
 | 
					          popper-class="pure-popper"
 | 
				
			||||||
 | 
					          :popper-options="{
 | 
				
			||||||
 | 
					            placement: 'auto'
 | 
				
			||||||
 | 
					          }"
 | 
				
			||||||
 | 
					          :visible="visible"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <template #reference>
 | 
				
			||||||
 | 
					            <div
 | 
				
			||||||
 | 
					              class="w-[40px] h-[32px] cursor-pointer flex justify-center items-center"
 | 
				
			||||||
 | 
					              @click="visible = !visible"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <IconifyIconOnline :icon="currentActiveType + icon" />
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <el-input
 | 
				
			||||||
 | 
					            class="px-2 pt-2"
 | 
				
			||||||
 | 
					            v-model="filterValue"
 | 
				
			||||||
 | 
					            placeholder="搜索图标"
 | 
				
			||||||
 | 
					            clearable
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <el-tabs v-model="currentActiveType" @tab-click="handleClick">
 | 
				
			||||||
 | 
					            <el-tab-pane
 | 
				
			||||||
 | 
					              v-for="(pane, index) in tabsList"
 | 
				
			||||||
 | 
					              :key="index"
 | 
				
			||||||
 | 
					              :label="pane.label"
 | 
				
			||||||
 | 
					              :name="pane.name"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <el-scrollbar height="220px">
 | 
				
			||||||
 | 
					                <ul class="flex flex-wrap px-2 ml-2">
 | 
				
			||||||
 | 
					                  <li
 | 
				
			||||||
 | 
					                    v-for="(item, key) in pageList"
 | 
				
			||||||
 | 
					                    :key="key"
 | 
				
			||||||
 | 
					                    :title="item"
 | 
				
			||||||
 | 
					                    class="icon-item p-2 cursor-pointer mr-2 mt-1 flex justify-center items-center border border-solid"
 | 
				
			||||||
 | 
					                    :style="iconItemStyle(item)"
 | 
				
			||||||
 | 
					                    @click="onChangeIcon(item)"
 | 
				
			||||||
 | 
					                  >
 | 
				
			||||||
 | 
					                    <IconifyIconOnline
 | 
				
			||||||
 | 
					                      :icon="currentActiveType + item"
 | 
				
			||||||
 | 
					                      width="20px"
 | 
				
			||||||
 | 
					                      height="20px"
 | 
				
			||||||
 | 
					                    />
 | 
				
			||||||
 | 
					                  </li>
 | 
				
			||||||
 | 
					                </ul>
 | 
				
			||||||
 | 
					              </el-scrollbar>
 | 
				
			||||||
 | 
					            </el-tab-pane>
 | 
				
			||||||
 | 
					          </el-tabs>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <el-pagination
 | 
				
			||||||
 | 
					            small
 | 
				
			||||||
 | 
					            :total="copyIconList[currentActiveType].length"
 | 
				
			||||||
 | 
					            :page-size="pageSize"
 | 
				
			||||||
 | 
					            :current-page="currentPage"
 | 
				
			||||||
 | 
					            background
 | 
				
			||||||
 | 
					            layout="prev, pager, next"
 | 
				
			||||||
 | 
					            class="flex items-center justify-center h-10"
 | 
				
			||||||
 | 
					            @current-change="onCurrentChange"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					        </el-popover>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </el-input>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.icon-item {
 | 
				
			||||||
 | 
					  &:hover {
 | 
				
			||||||
 | 
					    color: var(--el-color-primary);
 | 
				
			||||||
 | 
					    border-color: var(--el-color-primary);
 | 
				
			||||||
 | 
					    transition: all 0.4s;
 | 
				
			||||||
 | 
					    transform: scaleX(1.05);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:deep(.el-tabs__nav-next) {
 | 
				
			||||||
 | 
					  font-size: 15px;
 | 
				
			||||||
 | 
					  line-height: 32px;
 | 
				
			||||||
 | 
					  box-shadow: -5px 0 5px -6px #ccc;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:deep(.el-tabs__nav-prev) {
 | 
				
			||||||
 | 
					  font-size: 15px;
 | 
				
			||||||
 | 
					  line-height: 32px;
 | 
				
			||||||
 | 
					  box-shadow: 5px 0 5px -6px #ccc;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:deep(.el-input-group__append) {
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:deep(.el-tabs__item) {
 | 
				
			||||||
 | 
					  height: 30px;
 | 
				
			||||||
 | 
					  font-size: 12px;
 | 
				
			||||||
 | 
					  font-weight: normal;
 | 
				
			||||||
 | 
					  line-height: 30px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:deep(.el-tabs__header),
 | 
				
			||||||
 | 
					:deep(.el-tabs__nav-wrap) {
 | 
				
			||||||
 | 
					  position: static;
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  box-shadow: 0 2px 5px rgb(0 0 0 / 6%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:deep(.el-tabs__content) {
 | 
				
			||||||
 | 
					  margin-top: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@ -5,10 +5,41 @@ import { addIcon } from "@iconify/vue/dist/offline";
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 本地菜单图标,后端在路由的icon中返回对应的图标字符串并且前端在此处使用addIcon添加即可渲染菜单图标
 | 
					// 本地菜单图标,后端在路由的icon中返回对应的图标字符串并且前端在此处使用addIcon添加即可渲染菜单图标
 | 
				
			||||||
import HomeFilled from "@iconify-icons/ep/home-filled";
 | 
					import UbuntuFill from "@iconify-icons/ri/ubuntu-fill";
 | 
				
			||||||
 | 
					import Menu from "@iconify-icons/ep/menu";
 | 
				
			||||||
 | 
					import Edit from "@iconify-icons/ep/edit";
 | 
				
			||||||
import InformationLine from "@iconify-icons/ri/information-line";
 | 
					import InformationLine from "@iconify-icons/ri/information-line";
 | 
				
			||||||
 | 
					import SetUp from "@iconify-icons/ep/set-up";
 | 
				
			||||||
 | 
					import TerminalWindowLine from "@iconify-icons/ri/terminal-window-line";
 | 
				
			||||||
 | 
					import Guide from "@iconify-icons/ep/guide";
 | 
				
			||||||
 | 
					import HomeFilled from "@iconify-icons/ep/home-filled";
 | 
				
			||||||
 | 
					import Card from "@iconify-icons/ri/bank-card-line";
 | 
				
			||||||
 | 
					import ListCheck from "@iconify-icons/ri/list-check";
 | 
				
			||||||
 | 
					import Histogram from "@iconify-icons/ep/histogram";
 | 
				
			||||||
 | 
					import Ppt from "@iconify-icons/ri/file-ppt-2-line";
 | 
				
			||||||
 | 
					import CheckboxCircleLine from "@iconify-icons/ri/checkbox-circle-line";
 | 
				
			||||||
 | 
					import FlUser from "@iconify-icons/ri/admin-line";
 | 
				
			||||||
 | 
					import Role from "@iconify-icons/ri/admin-fill";
 | 
				
			||||||
 | 
					import Setting from "@iconify-icons/ri/settings-3-line";
 | 
				
			||||||
 | 
					import Dept from "@iconify-icons/ri/git-branch-line";
 | 
				
			||||||
import Lollipop from "@iconify-icons/ep/lollipop";
 | 
					import Lollipop from "@iconify-icons/ep/lollipop";
 | 
				
			||||||
 | 
					import Monitor from "@iconify-icons/ep/monitor";
 | 
				
			||||||
addIcon("homeFilled", HomeFilled);
 | 
					addIcon("ubuntuFill", UbuntuFill);
 | 
				
			||||||
 | 
					addIcon("menu", Menu);
 | 
				
			||||||
 | 
					addIcon("edit", Edit);
 | 
				
			||||||
addIcon("informationLine", InformationLine);
 | 
					addIcon("informationLine", InformationLine);
 | 
				
			||||||
 | 
					addIcon("setUp", SetUp);
 | 
				
			||||||
 | 
					addIcon("terminalWindowLine", TerminalWindowLine);
 | 
				
			||||||
 | 
					addIcon("guide", Guide);
 | 
				
			||||||
 | 
					addIcon("homeFilled", HomeFilled);
 | 
				
			||||||
 | 
					addIcon("card", Card);
 | 
				
			||||||
 | 
					addIcon("listCheck", ListCheck);
 | 
				
			||||||
 | 
					addIcon("histogram", Histogram);
 | 
				
			||||||
 | 
					addIcon("ppt", Ppt);
 | 
				
			||||||
 | 
					addIcon("checkboxCircleLine", CheckboxCircleLine);
 | 
				
			||||||
 | 
					addIcon("flUser", FlUser);
 | 
				
			||||||
 | 
					addIcon("role", Role);
 | 
				
			||||||
 | 
					addIcon("setting", Setting);
 | 
				
			||||||
 | 
					addIcon("dept", Dept);
 | 
				
			||||||
addIcon("lollipop", Lollipop);
 | 
					addIcon("lollipop", Lollipop);
 | 
				
			||||||
 | 
					addIcon("monitor", Monitor);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,12 +1,6 @@
 | 
				
			|||||||
import { useEpThemeStoreHook } from "@/store/modules/epTheme";
 | 
					import { useEpThemeStoreHook } from "@/store/modules/epTheme";
 | 
				
			||||||
 | 
					import { delay, getKeyList, cloneDeep } from "@pureadmin/utils";
 | 
				
			||||||
import { defineComponent, ref, computed, type PropType, nextTick } from "vue";
 | 
					import { defineComponent, ref, computed, type PropType, nextTick } from "vue";
 | 
				
			||||||
import {
 | 
					 | 
				
			||||||
  delay,
 | 
					 | 
				
			||||||
  cloneDeep,
 | 
					 | 
				
			||||||
  isBoolean,
 | 
					 | 
				
			||||||
  isFunction,
 | 
					 | 
				
			||||||
  getKeyList
 | 
					 | 
				
			||||||
} from "@pureadmin/utils";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Sortable from "sortablejs";
 | 
					import Sortable from "sortablejs";
 | 
				
			||||||
import DragIcon from "./svg/drag.svg?component";
 | 
					import DragIcon from "./svg/drag.svg?component";
 | 
				
			||||||
@ -43,13 +37,8 @@ export default defineComponent({
 | 
				
			|||||||
    const loading = ref(false);
 | 
					    const loading = ref(false);
 | 
				
			||||||
    const checkAll = ref(true);
 | 
					    const checkAll = ref(true);
 | 
				
			||||||
    const isIndeterminate = ref(false);
 | 
					    const isIndeterminate = ref(false);
 | 
				
			||||||
    const filterColumns = cloneDeep(props?.columns).filter(column =>
 | 
					 | 
				
			||||||
      isBoolean(column?.hide)
 | 
					 | 
				
			||||||
        ? !column.hide
 | 
					 | 
				
			||||||
        : !(isFunction(column?.hide) && column?.hide())
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    let checkColumnList = getKeyList(cloneDeep(props?.columns), "label");
 | 
					    let checkColumnList = getKeyList(cloneDeep(props?.columns), "label");
 | 
				
			||||||
    const checkedColumns = ref(getKeyList(cloneDeep(filterColumns), "label"));
 | 
					    const checkedColumns = ref(checkColumnList);
 | 
				
			||||||
    const dynamicColumns = ref(cloneDeep(props?.columns));
 | 
					    const dynamicColumns = ref(cloneDeep(props?.columns));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const getDropdownItemStyle = computed(() => {
 | 
					    const getDropdownItemStyle = computed(() => {
 | 
				
			||||||
@ -131,7 +120,7 @@ export default defineComponent({
 | 
				
			|||||||
      dynamicColumns.value = cloneDeep(props?.columns);
 | 
					      dynamicColumns.value = cloneDeep(props?.columns);
 | 
				
			||||||
      checkColumnList = [];
 | 
					      checkColumnList = [];
 | 
				
			||||||
      checkColumnList = await getKeyList(cloneDeep(props?.columns), "label");
 | 
					      checkColumnList = await getKeyList(cloneDeep(props?.columns), "label");
 | 
				
			||||||
      checkedColumns.value = getKeyList(cloneDeep(filterColumns), "label");
 | 
					      checkedColumns.value = checkColumnList;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const dropdown = {
 | 
					    const dropdown = {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ export default {
 | 
				
			|||||||
  meta: {
 | 
					  meta: {
 | 
				
			||||||
    icon: "informationLine",
 | 
					    icon: "informationLine",
 | 
				
			||||||
    title: "异常页面",
 | 
					    title: "异常页面",
 | 
				
			||||||
    // showLink: false,
 | 
					    showLink: false,
 | 
				
			||||||
    rank: 9
 | 
					    rank: 9
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  children: [
 | 
					  children: [
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										39
									
								
								src/views/system/hooks.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/views/system/hooks.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					// 抽离可公用的工具函数等用于系统管理页面逻辑
 | 
				
			||||||
 | 
					import { computed } from "vue";
 | 
				
			||||||
 | 
					import { useDark } from "@pureadmin/utils";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function usePublicHooks() {
 | 
				
			||||||
 | 
					  const { isDark } = useDark();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const switchStyle = computed(() => {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      "--el-switch-on-color": "#6abe39",
 | 
				
			||||||
 | 
					      "--el-switch-off-color": "#e84749"
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const tagStyle = computed(() => {
 | 
				
			||||||
 | 
					    return (status: number) => {
 | 
				
			||||||
 | 
					      return status === 1
 | 
				
			||||||
 | 
					        ? {
 | 
				
			||||||
 | 
					            "--el-tag-text-color": isDark.value ? "#6abe39" : "#389e0d",
 | 
				
			||||||
 | 
					            "--el-tag-bg-color": isDark.value ? "#172412" : "#f6ffed",
 | 
				
			||||||
 | 
					            "--el-tag-border-color": isDark.value ? "#274a17" : "#b7eb8f"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        : {
 | 
				
			||||||
 | 
					            "--el-tag-text-color": isDark.value ? "#e84749" : "#cf1322",
 | 
				
			||||||
 | 
					            "--el-tag-bg-color": isDark.value ? "#2b1316" : "#fff1f0",
 | 
				
			||||||
 | 
					            "--el-tag-border-color": isDark.value ? "#58191c" : "#ffa39e"
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    /** 当前网页是否为`dark`模式 */
 | 
				
			||||||
 | 
					    isDark,
 | 
				
			||||||
 | 
					    /** 表现更鲜明的`el-switch`组件  */
 | 
				
			||||||
 | 
					    switchStyle,
 | 
				
			||||||
 | 
					    /** 表现更鲜明的`el-tag`组件  */
 | 
				
			||||||
 | 
					    tagStyle
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										55
									
								
								src/views/system/notice/form.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/views/system/notice/form.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					<script setup lang="ts">
 | 
				
			||||||
 | 
					import { ref } from "vue";
 | 
				
			||||||
 | 
					import { formRules } from "./utils/rule";
 | 
				
			||||||
 | 
					import { FormProps } from "./utils/types";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const props = withDefaults(defineProps<FormProps>(), {
 | 
				
			||||||
 | 
					  formInline: () => ({
 | 
				
			||||||
 | 
					    name: "",
 | 
				
			||||||
 | 
					    code: "",
 | 
				
			||||||
 | 
					    remark: ""
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const ruleFormRef = ref();
 | 
				
			||||||
 | 
					const newFormInline = ref(props.formInline);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function getRef() {
 | 
				
			||||||
 | 
					  return ruleFormRef.value;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					defineExpose({ getRef });
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <el-form
 | 
				
			||||||
 | 
					    ref="ruleFormRef"
 | 
				
			||||||
 | 
					    :model="newFormInline"
 | 
				
			||||||
 | 
					    :rules="formRules"
 | 
				
			||||||
 | 
					    label-width="82px"
 | 
				
			||||||
 | 
					  >
 | 
				
			||||||
 | 
					    <el-form-item label="角色名称" prop="name">
 | 
				
			||||||
 | 
					      <el-input
 | 
				
			||||||
 | 
					        v-model="newFormInline.name"
 | 
				
			||||||
 | 
					        clearable
 | 
				
			||||||
 | 
					        placeholder="请输入角色名称"
 | 
				
			||||||
 | 
					      />
 | 
				
			||||||
 | 
					    </el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <el-form-item label="角色标识" prop="code">
 | 
				
			||||||
 | 
					      <el-input
 | 
				
			||||||
 | 
					        v-model="newFormInline.code"
 | 
				
			||||||
 | 
					        clearable
 | 
				
			||||||
 | 
					        placeholder="请输入角色标识"
 | 
				
			||||||
 | 
					      />
 | 
				
			||||||
 | 
					    </el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <el-form-item label="备注">
 | 
				
			||||||
 | 
					      <el-input
 | 
				
			||||||
 | 
					        v-model="newFormInline.remark"
 | 
				
			||||||
 | 
					        placeholder="请输入备注信息"
 | 
				
			||||||
 | 
					        type="textarea"
 | 
				
			||||||
 | 
					      />
 | 
				
			||||||
 | 
					    </el-form-item>
 | 
				
			||||||
 | 
					  </el-form>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
							
								
								
									
										216
									
								
								src/views/system/notice/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										216
									
								
								src/views/system/notice/index.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,216 @@
 | 
				
			|||||||
 | 
					<script setup lang="ts">
 | 
				
			||||||
 | 
					import { ref } from "vue";
 | 
				
			||||||
 | 
					import { useRole } from "./utils/hook";
 | 
				
			||||||
 | 
					import { PureTableBar } from "@/components/RePureTableBar";
 | 
				
			||||||
 | 
					import { useRenderIcon } from "@/components/ReIcon/src/hooks";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// import Database from "@iconify-icons/ri/database-2-line";
 | 
				
			||||||
 | 
					// import More from "@iconify-icons/ep/more-filled";
 | 
				
			||||||
 | 
					import Delete from "@iconify-icons/ep/delete";
 | 
				
			||||||
 | 
					import EditPen from "@iconify-icons/ep/edit-pen";
 | 
				
			||||||
 | 
					import Search from "@iconify-icons/ep/search";
 | 
				
			||||||
 | 
					import Refresh from "@iconify-icons/ep/refresh";
 | 
				
			||||||
 | 
					import Menu from "@iconify-icons/ep/menu";
 | 
				
			||||||
 | 
					import AddFill from "@iconify-icons/ri/add-circle-line";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					defineOptions({
 | 
				
			||||||
 | 
					  name: "Role"
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const formRef = ref();
 | 
				
			||||||
 | 
					const {
 | 
				
			||||||
 | 
					  form,
 | 
				
			||||||
 | 
					  loading,
 | 
				
			||||||
 | 
					  columns,
 | 
				
			||||||
 | 
					  dataList,
 | 
				
			||||||
 | 
					  pagination,
 | 
				
			||||||
 | 
					  // buttonClass,
 | 
				
			||||||
 | 
					  onSearch,
 | 
				
			||||||
 | 
					  resetForm,
 | 
				
			||||||
 | 
					  openDialog,
 | 
				
			||||||
 | 
					  handleMenu,
 | 
				
			||||||
 | 
					  handleDelete,
 | 
				
			||||||
 | 
					  // handleDatabase,
 | 
				
			||||||
 | 
					  handleSizeChange,
 | 
				
			||||||
 | 
					  handleCurrentChange,
 | 
				
			||||||
 | 
					  handleSelectionChange
 | 
				
			||||||
 | 
					} = useRole();
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="main">
 | 
				
			||||||
 | 
					    <el-form
 | 
				
			||||||
 | 
					      ref="formRef"
 | 
				
			||||||
 | 
					      :inline="true"
 | 
				
			||||||
 | 
					      :model="form"
 | 
				
			||||||
 | 
					      class="search-form bg-bg_color w-[99/100] pl-8 pt-[12px]"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <el-form-item label="角色名称:" prop="name">
 | 
				
			||||||
 | 
					        <el-input
 | 
				
			||||||
 | 
					          v-model="form.name"
 | 
				
			||||||
 | 
					          placeholder="请输入角色名称"
 | 
				
			||||||
 | 
					          clearable
 | 
				
			||||||
 | 
					          class="!w-[200px]"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					      </el-form-item>
 | 
				
			||||||
 | 
					      <el-form-item label="角色标识:" prop="code">
 | 
				
			||||||
 | 
					        <el-input
 | 
				
			||||||
 | 
					          v-model="form.code"
 | 
				
			||||||
 | 
					          placeholder="请输入角色标识"
 | 
				
			||||||
 | 
					          clearable
 | 
				
			||||||
 | 
					          class="!w-[180px]"
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					      </el-form-item>
 | 
				
			||||||
 | 
					      <el-form-item label="状态:" prop="status">
 | 
				
			||||||
 | 
					        <el-select
 | 
				
			||||||
 | 
					          v-model="form.status"
 | 
				
			||||||
 | 
					          placeholder="请选择状态"
 | 
				
			||||||
 | 
					          clearable
 | 
				
			||||||
 | 
					          class="!w-[180px]"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <el-option label="已启用" value="1" />
 | 
				
			||||||
 | 
					          <el-option label="已停用" value="0" />
 | 
				
			||||||
 | 
					        </el-select>
 | 
				
			||||||
 | 
					      </el-form-item>
 | 
				
			||||||
 | 
					      <el-form-item>
 | 
				
			||||||
 | 
					        <el-button
 | 
				
			||||||
 | 
					          type="primary"
 | 
				
			||||||
 | 
					          :icon="useRenderIcon(Search)"
 | 
				
			||||||
 | 
					          :loading="loading"
 | 
				
			||||||
 | 
					          @click="onSearch"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          搜索
 | 
				
			||||||
 | 
					        </el-button>
 | 
				
			||||||
 | 
					        <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">
 | 
				
			||||||
 | 
					          重置
 | 
				
			||||||
 | 
					        </el-button>
 | 
				
			||||||
 | 
					      </el-form-item>
 | 
				
			||||||
 | 
					    </el-form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <PureTableBar
 | 
				
			||||||
 | 
					      title="角色列表(仅演示,操作后不生效)"
 | 
				
			||||||
 | 
					      :columns="columns"
 | 
				
			||||||
 | 
					      @refresh="onSearch"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <template #buttons>
 | 
				
			||||||
 | 
					        <el-button
 | 
				
			||||||
 | 
					          type="primary"
 | 
				
			||||||
 | 
					          :icon="useRenderIcon(AddFill)"
 | 
				
			||||||
 | 
					          @click="openDialog()"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          新增角色
 | 
				
			||||||
 | 
					        </el-button>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template v-slot="{ size, dynamicColumns }">
 | 
				
			||||||
 | 
					        <pure-table
 | 
				
			||||||
 | 
					          border
 | 
				
			||||||
 | 
					          align-whole="center"
 | 
				
			||||||
 | 
					          showOverflowTooltip
 | 
				
			||||||
 | 
					          table-layout="auto"
 | 
				
			||||||
 | 
					          :loading="loading"
 | 
				
			||||||
 | 
					          :size="size"
 | 
				
			||||||
 | 
					          adaptive
 | 
				
			||||||
 | 
					          :data="dataList"
 | 
				
			||||||
 | 
					          :columns="dynamicColumns"
 | 
				
			||||||
 | 
					          :pagination="pagination"
 | 
				
			||||||
 | 
					          :paginationSmall="size === 'small' ? true : false"
 | 
				
			||||||
 | 
					          :header-cell-style="{
 | 
				
			||||||
 | 
					            background: 'var(--el-table-row-hover-bg-color)',
 | 
				
			||||||
 | 
					            color: 'var(--el-text-color-primary)'
 | 
				
			||||||
 | 
					          }"
 | 
				
			||||||
 | 
					          @selection-change="handleSelectionChange"
 | 
				
			||||||
 | 
					          @page-size-change="handleSizeChange"
 | 
				
			||||||
 | 
					          @page-current-change="handleCurrentChange"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <template #operation="{ row }">
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              class="reset-margin"
 | 
				
			||||||
 | 
					              link
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              :size="size"
 | 
				
			||||||
 | 
					              :icon="useRenderIcon(EditPen)"
 | 
				
			||||||
 | 
					              @click="openDialog('编辑', row)"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              修改
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              class="reset-margin"
 | 
				
			||||||
 | 
					              link
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              :size="size"
 | 
				
			||||||
 | 
					              :icon="useRenderIcon(Menu)"
 | 
				
			||||||
 | 
					              @click="handleMenu"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              菜单权限
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					            <el-popconfirm
 | 
				
			||||||
 | 
					              :title="`是否确认删除角色名称为${row.name}的这条数据`"
 | 
				
			||||||
 | 
					              @confirm="handleDelete(row)"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <template #reference>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  class="reset-margin"
 | 
				
			||||||
 | 
					                  link
 | 
				
			||||||
 | 
					                  type="primary"
 | 
				
			||||||
 | 
					                  :size="size"
 | 
				
			||||||
 | 
					                  :icon="useRenderIcon(Delete)"
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                  删除
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-popconfirm>
 | 
				
			||||||
 | 
					            <!-- <el-dropdown>
 | 
				
			||||||
 | 
					              <el-button
 | 
				
			||||||
 | 
					                class="ml-3 mt-[2px]"
 | 
				
			||||||
 | 
					                link
 | 
				
			||||||
 | 
					                type="primary"
 | 
				
			||||||
 | 
					                :size="size"
 | 
				
			||||||
 | 
					                :icon="useRenderIcon(More)"
 | 
				
			||||||
 | 
					              />
 | 
				
			||||||
 | 
					              <template #dropdown>
 | 
				
			||||||
 | 
					                <el-dropdown-menu>
 | 
				
			||||||
 | 
					                  <el-dropdown-item>
 | 
				
			||||||
 | 
					                    <el-button
 | 
				
			||||||
 | 
					                      :class="buttonClass"
 | 
				
			||||||
 | 
					                      link
 | 
				
			||||||
 | 
					                      type="primary"
 | 
				
			||||||
 | 
					                      :size="size"
 | 
				
			||||||
 | 
					                      :icon="useRenderIcon(Menu)"
 | 
				
			||||||
 | 
					                      @click="handleMenu"
 | 
				
			||||||
 | 
					                    >
 | 
				
			||||||
 | 
					                      菜单权限
 | 
				
			||||||
 | 
					                    </el-button>
 | 
				
			||||||
 | 
					                  </el-dropdown-item>
 | 
				
			||||||
 | 
					                  <el-dropdown-item>
 | 
				
			||||||
 | 
					                    <el-button
 | 
				
			||||||
 | 
					                      :class="buttonClass"
 | 
				
			||||||
 | 
					                      link
 | 
				
			||||||
 | 
					                      type="primary"
 | 
				
			||||||
 | 
					                      :size="size"
 | 
				
			||||||
 | 
					                      :icon="useRenderIcon(Database)"
 | 
				
			||||||
 | 
					                      @click="handleDatabase"
 | 
				
			||||||
 | 
					                    >
 | 
				
			||||||
 | 
					                      数据权限
 | 
				
			||||||
 | 
					                    </el-button>
 | 
				
			||||||
 | 
					                  </el-dropdown-item>
 | 
				
			||||||
 | 
					                </el-dropdown-menu>
 | 
				
			||||||
 | 
					              </template>
 | 
				
			||||||
 | 
					            </el-dropdown> -->
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </pure-table>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </PureTableBar>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style scoped lang="scss">
 | 
				
			||||||
 | 
					:deep(.el-dropdown-menu__item i) {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.search-form {
 | 
				
			||||||
 | 
					  :deep(.el-form-item) {
 | 
				
			||||||
 | 
					    margin-bottom: 12px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										241
									
								
								src/views/system/notice/utils/hook.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										241
									
								
								src/views/system/notice/utils/hook.tsx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,241 @@
 | 
				
			|||||||
 | 
					import dayjs from "dayjs";
 | 
				
			||||||
 | 
					import editForm from "../form.vue";
 | 
				
			||||||
 | 
					import { message } from "@/utils/message";
 | 
				
			||||||
 | 
					import { getRoleList } from "@/api/system";
 | 
				
			||||||
 | 
					import { ElMessageBox } from "element-plus";
 | 
				
			||||||
 | 
					import { usePublicHooks } from "../../hooks";
 | 
				
			||||||
 | 
					import { addDialog } from "@/components/ReDialog";
 | 
				
			||||||
 | 
					import { type FormItemProps } from "../utils/types";
 | 
				
			||||||
 | 
					import { type PaginationProps } from "@pureadmin/table";
 | 
				
			||||||
 | 
					import { reactive, ref, onMounted, h, toRaw } from "vue";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function useRole() {
 | 
				
			||||||
 | 
					  const form = reactive({
 | 
				
			||||||
 | 
					    name: "",
 | 
				
			||||||
 | 
					    code: "",
 | 
				
			||||||
 | 
					    status: ""
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  const formRef = ref();
 | 
				
			||||||
 | 
					  const dataList = ref([]);
 | 
				
			||||||
 | 
					  const loading = ref(true);
 | 
				
			||||||
 | 
					  const switchLoadMap = ref({});
 | 
				
			||||||
 | 
					  const { switchStyle } = usePublicHooks();
 | 
				
			||||||
 | 
					  const pagination = reactive<PaginationProps>({
 | 
				
			||||||
 | 
					    total: 0,
 | 
				
			||||||
 | 
					    pageSize: 10,
 | 
				
			||||||
 | 
					    currentPage: 1,
 | 
				
			||||||
 | 
					    background: true
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  const columns: TableColumnList = [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "角色编号",
 | 
				
			||||||
 | 
					      prop: "id",
 | 
				
			||||||
 | 
					      minWidth: 100
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "角色名称",
 | 
				
			||||||
 | 
					      prop: "name",
 | 
				
			||||||
 | 
					      minWidth: 120
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "角色标识",
 | 
				
			||||||
 | 
					      prop: "code",
 | 
				
			||||||
 | 
					      minWidth: 150
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "状态",
 | 
				
			||||||
 | 
					      minWidth: 130,
 | 
				
			||||||
 | 
					      cellRenderer: scope => (
 | 
				
			||||||
 | 
					        <el-switch
 | 
				
			||||||
 | 
					          size={scope.props.size === "small" ? "small" : "default"}
 | 
				
			||||||
 | 
					          loading={switchLoadMap.value[scope.index]?.loading}
 | 
				
			||||||
 | 
					          v-model={scope.row.status}
 | 
				
			||||||
 | 
					          active-value={1}
 | 
				
			||||||
 | 
					          inactive-value={0}
 | 
				
			||||||
 | 
					          active-text="已启用"
 | 
				
			||||||
 | 
					          inactive-text="已停用"
 | 
				
			||||||
 | 
					          inline-prompt
 | 
				
			||||||
 | 
					          style={switchStyle.value}
 | 
				
			||||||
 | 
					          onChange={() => onChange(scope as any)}
 | 
				
			||||||
 | 
					        />
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "备注",
 | 
				
			||||||
 | 
					      prop: "remark",
 | 
				
			||||||
 | 
					      minWidth: 150
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "创建时间",
 | 
				
			||||||
 | 
					      minWidth: 180,
 | 
				
			||||||
 | 
					      prop: "createTime",
 | 
				
			||||||
 | 
					      formatter: ({ createTime }) =>
 | 
				
			||||||
 | 
					        dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      label: "操作",
 | 
				
			||||||
 | 
					      fixed: "right",
 | 
				
			||||||
 | 
					      width: 240,
 | 
				
			||||||
 | 
					      slot: "operation"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					  // const buttonClass = computed(() => {
 | 
				
			||||||
 | 
					  //   return [
 | 
				
			||||||
 | 
					  //     "!h-[20px]",
 | 
				
			||||||
 | 
					  //     "reset-margin",
 | 
				
			||||||
 | 
					  //     "!text-gray-500",
 | 
				
			||||||
 | 
					  //     "dark:!text-white",
 | 
				
			||||||
 | 
					  //     "dark:hover:!text-primary"
 | 
				
			||||||
 | 
					  //   ];
 | 
				
			||||||
 | 
					  // });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function onChange({ row, index }) {
 | 
				
			||||||
 | 
					    ElMessageBox.confirm(
 | 
				
			||||||
 | 
					      `确认要<strong>${
 | 
				
			||||||
 | 
					        row.status === 0 ? "停用" : "启用"
 | 
				
			||||||
 | 
					      }</strong><strong style='color:var(--el-color-primary)'>${
 | 
				
			||||||
 | 
					        row.name
 | 
				
			||||||
 | 
					      }</strong>吗?`,
 | 
				
			||||||
 | 
					      "系统提示",
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        confirmButtonText: "确定",
 | 
				
			||||||
 | 
					        cancelButtonText: "取消",
 | 
				
			||||||
 | 
					        type: "warning",
 | 
				
			||||||
 | 
					        dangerouslyUseHTMLString: true,
 | 
				
			||||||
 | 
					        draggable: true
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					      .then(() => {
 | 
				
			||||||
 | 
					        switchLoadMap.value[index] = Object.assign(
 | 
				
			||||||
 | 
					          {},
 | 
				
			||||||
 | 
					          switchLoadMap.value[index],
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            loading: true
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        setTimeout(() => {
 | 
				
			||||||
 | 
					          switchLoadMap.value[index] = Object.assign(
 | 
				
			||||||
 | 
					            {},
 | 
				
			||||||
 | 
					            switchLoadMap.value[index],
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					              loading: false
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					          message(`已${row.status === 0 ? "停用" : "启用"}${row.name}`, {
 | 
				
			||||||
 | 
					            type: "success"
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        }, 300);
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .catch(() => {
 | 
				
			||||||
 | 
					        row.status === 0 ? (row.status = 1) : (row.status = 0);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function handleDelete(row) {
 | 
				
			||||||
 | 
					    message(`您删除了角色名称为${row.name}的这条数据`, { type: "success" });
 | 
				
			||||||
 | 
					    onSearch();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function handleSizeChange(val: number) {
 | 
				
			||||||
 | 
					    console.log(`${val} items per page`);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function handleCurrentChange(val: number) {
 | 
				
			||||||
 | 
					    console.log(`current page: ${val}`);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function handleSelectionChange(val) {
 | 
				
			||||||
 | 
					    console.log("handleSelectionChange", val);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async function onSearch() {
 | 
				
			||||||
 | 
					    loading.value = true;
 | 
				
			||||||
 | 
					    const { data } = await getRoleList(toRaw(form));
 | 
				
			||||||
 | 
					    dataList.value = data.list;
 | 
				
			||||||
 | 
					    pagination.total = data.total;
 | 
				
			||||||
 | 
					    pagination.pageSize = data.pageSize;
 | 
				
			||||||
 | 
					    pagination.currentPage = data.currentPage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    setTimeout(() => {
 | 
				
			||||||
 | 
					      loading.value = false;
 | 
				
			||||||
 | 
					    }, 500);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const resetForm = formEl => {
 | 
				
			||||||
 | 
					    if (!formEl) return;
 | 
				
			||||||
 | 
					    formEl.resetFields();
 | 
				
			||||||
 | 
					    onSearch();
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function openDialog(title = "新增", row?: FormItemProps) {
 | 
				
			||||||
 | 
					    addDialog({
 | 
				
			||||||
 | 
					      title: `${title}角色`,
 | 
				
			||||||
 | 
					      props: {
 | 
				
			||||||
 | 
					        formInline: {
 | 
				
			||||||
 | 
					          name: row?.name ?? "",
 | 
				
			||||||
 | 
					          code: row?.code ?? "",
 | 
				
			||||||
 | 
					          remark: row?.remark ?? ""
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      width: "40%",
 | 
				
			||||||
 | 
					      draggable: true,
 | 
				
			||||||
 | 
					      fullscreenIcon: true,
 | 
				
			||||||
 | 
					      closeOnClickModal: false,
 | 
				
			||||||
 | 
					      contentRenderer: () => h(editForm, { ref: formRef }),
 | 
				
			||||||
 | 
					      beforeSure: (done, { options }) => {
 | 
				
			||||||
 | 
					        const FormRef = formRef.value.getRef();
 | 
				
			||||||
 | 
					        const curData = options.props.formInline as FormItemProps;
 | 
				
			||||||
 | 
					        function chores() {
 | 
				
			||||||
 | 
					          message(`您${title}了角色名称为${curData.name}的这条数据`, {
 | 
				
			||||||
 | 
					            type: "success"
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					          done(); // 关闭弹框
 | 
				
			||||||
 | 
					          onSearch(); // 刷新表格数据
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        FormRef.validate(valid => {
 | 
				
			||||||
 | 
					          if (valid) {
 | 
				
			||||||
 | 
					            console.log("curData", curData);
 | 
				
			||||||
 | 
					            // 表单规则校验通过
 | 
				
			||||||
 | 
					            if (title === "新增") {
 | 
				
			||||||
 | 
					              // 实际开发先调用新增接口,再进行下面操作
 | 
				
			||||||
 | 
					              chores();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					              // 实际开发先调用编辑接口,再进行下面操作
 | 
				
			||||||
 | 
					              chores();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 菜单权限 */
 | 
				
			||||||
 | 
					  function handleMenu() {
 | 
				
			||||||
 | 
					    message("等菜单管理页面开发后完善");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /** 数据权限 可自行开发 */
 | 
				
			||||||
 | 
					  // function handleDatabase() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  onMounted(() => {
 | 
				
			||||||
 | 
					    onSearch();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    form,
 | 
				
			||||||
 | 
					    loading,
 | 
				
			||||||
 | 
					    columns,
 | 
				
			||||||
 | 
					    dataList,
 | 
				
			||||||
 | 
					    pagination,
 | 
				
			||||||
 | 
					    // buttonClass,
 | 
				
			||||||
 | 
					    onSearch,
 | 
				
			||||||
 | 
					    resetForm,
 | 
				
			||||||
 | 
					    openDialog,
 | 
				
			||||||
 | 
					    handleMenu,
 | 
				
			||||||
 | 
					    handleDelete,
 | 
				
			||||||
 | 
					    // handleDatabase,
 | 
				
			||||||
 | 
					    handleSizeChange,
 | 
				
			||||||
 | 
					    handleCurrentChange,
 | 
				
			||||||
 | 
					    handleSelectionChange
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										8
									
								
								src/views/system/notice/utils/rule.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/views/system/notice/utils/rule.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					import { reactive } from "vue";
 | 
				
			||||||
 | 
					import type { FormRules } from "element-plus";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** 自定义表单规则校验 */
 | 
				
			||||||
 | 
					export const formRules = reactive(<FormRules>{
 | 
				
			||||||
 | 
					  name: [{ required: true, message: "角色名称为必填项", trigger: "blur" }],
 | 
				
			||||||
 | 
					  code: [{ required: true, message: "角色标识为必填项", trigger: "blur" }]
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										15
									
								
								src/views/system/notice/utils/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/views/system/notice/utils/types.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					// 虽然字段很少 但是抽离出来 后续有扩展字段需求就很方便了
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface FormItemProps {
 | 
				
			||||||
 | 
					  /** 角色名称 */
 | 
				
			||||||
 | 
					  name: string;
 | 
				
			||||||
 | 
					  /** 角色编号 */
 | 
				
			||||||
 | 
					  code: string;
 | 
				
			||||||
 | 
					  /** 备注 */
 | 
				
			||||||
 | 
					  remark: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					interface FormProps {
 | 
				
			||||||
 | 
					  formInline: FormItemProps;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export type { FormItemProps, FormProps };
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user