qaz 3 napja
szülő
commit
f5da35b3dc

+ 1 - 1
.env.development

@@ -6,7 +6,7 @@ ENV = 'development'
 # 本地环境接口地址 121.36.251.245
 
 
-VITE_API_URL = 'http://192.168.100.187:9084'
+VITE_API_URL = 'http://192.168.100.187:8084'
 # VITE_API_URL = 'https://backend.qicai321.com'
 VITE_API_WX_URL='https://api.weixin.qq.com/'
 VITE_API_URL_MINLONG='http://117.185.80.170:7861'

+ 19 - 39
package-lock.json

@@ -25,6 +25,7 @@
 				"bootstrap": "^5.3.5",
 				"bootstrap-vue-3": "^0.5.1",
 				"china-area-data": "^5.0.1",
+				"core-js": "^3.43.0",
 				"countup.js": "^2.8.0",
 				"cropperjs": "^1.6.2",
 				"e-icon-picker": "2.1.1",
@@ -1360,6 +1361,14 @@
 				"node": ">=6.9.0"
 			}
 		},
+		"node_modules/@babel/runtime-corejs2/node_modules/core-js": {
+			"version": "2.6.12",
+			"resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
+			"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
+			"deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
+			"hasInstallScript": true,
+			"license": "MIT"
+		},
 		"node_modules/@babel/standalone": {
 			"version": "7.27.0",
 			"resolved": "https://registry.npmmirror.com/@babel/standalone/-/standalone-7.27.0.tgz",
@@ -3142,16 +3151,6 @@
 				"nanopop": "^2.1.0"
 			}
 		},
-		"node_modules/@simonwep/pickr/node_modules/core-js": {
-			"version": "3.41.0",
-			"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.41.0.tgz",
-			"integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==",
-			"hasInstallScript": true,
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/core-js"
-			}
-		},
 		"node_modules/@smithy/abort-controller": {
 			"version": "4.0.1",
 			"resolved": "https://registry.npmmirror.com/@smithy/abort-controller/-/abort-controller-4.0.1.tgz",
@@ -4664,6 +4663,7 @@
 			"version": "4.2.6",
 			"resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-4.2.6.tgz",
 			"integrity": "sha512-t7eX13Yj3i9+i5g9lqFyYneoIb3OzTvQjq9Tts1i+eiOd3Eva/6GagxBSXM1fOCjqemIu0FYVE1ByZ/38epR3Q==",
+			"license": "MIT",
 			"dependencies": {
 				"@ant-design/colors": "^6.0.0",
 				"@ant-design/icons-vue": "^7.0.0",
@@ -5231,18 +5231,6 @@
 				"node": ">=10.0.0"
 			}
 		},
-		"node_modules/canvg/node_modules/core-js": {
-			"version": "3.42.0",
-			"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.42.0.tgz",
-			"integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==",
-			"hasInstallScript": true,
-			"license": "MIT",
-			"optional": true,
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/core-js"
-			}
-		},
 		"node_modules/canvg/node_modules/regenerator-runtime": {
 			"version": "0.13.11",
 			"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
@@ -5463,11 +5451,15 @@
 			"integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w=="
 		},
 		"node_modules/core-js": {
-			"version": "2.6.12",
-			"resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
-			"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
-			"deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
-			"hasInstallScript": true
+			"version": "3.43.0",
+			"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.43.0.tgz",
+			"integrity": "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==",
+			"hasInstallScript": true,
+			"license": "MIT",
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/core-js"
+			}
 		},
 		"node_modules/core-util-is": {
 			"version": "1.0.3",
@@ -7487,18 +7479,6 @@
 				"html2canvas": "^1.0.0-rc.5"
 			}
 		},
-		"node_modules/jspdf/node_modules/core-js": {
-			"version": "3.42.0",
-			"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.42.0.tgz",
-			"integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==",
-			"hasInstallScript": true,
-			"license": "MIT",
-			"optional": true,
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/core-js"
-			}
-		},
 		"node_modules/jsplumb": {
 			"version": "2.15.6",
 			"resolved": "https://registry.npmmirror.com/jsplumb/-/jsplumb-2.15.6.tgz",

+ 1 - 0
package.json

@@ -26,6 +26,7 @@
 		"bootstrap": "^5.3.5",
 		"bootstrap-vue-3": "^0.5.1",
 		"china-area-data": "^5.0.1",
+		"core-js": "^3.43.0",
 		"countup.js": "^2.8.0",
 		"cropperjs": "^1.6.2",
 		"e-icon-picker": "2.1.1",

+ 2 - 2
src/layout/logo/index.vue

@@ -1,10 +1,10 @@
 <template>
 	<div class="layout-logo" v-if="setShowLogo" @click="onThemeConfigChange">
-		<img src="../../assets/logo1.png" class="layout-logo-medium-img"/>
+		<img :src="logoMini" class="layout-logo-medium-img"/>
 		<!-- <span style="font-size: x-large">{{ getSystemConfig['login.site_title'] || themeConfig.globalTitle }}</span> -->
 	</div>
 	<div class="layout-logo-size" v-else @click="onThemeConfigChange">
-		<img src="../../assets/logo1.png" class="layout-logo-size-img" />
+		<img :src="logoMini" class="layout-logo-size-img" />
 	</div>
 </template>
 

+ 3 - 0
src/main.ts

@@ -25,6 +25,8 @@ import fontAwesome470 from 'e-icon-picker/icon/fontawesome/font-awesome.v4.7.0.j
 import eIconList from 'e-icon-picker/icon/default-icon/eIconList.js';
 import iconfont from '/@/assets/iconfont/iconfont.json'; //引入json文件
 import '/@/assets/iconfont/iconfont.css'; //引入css
+import Antd from "ant-design-vue";
+// import "./style/common.less";
 // 自动注册插件
 import { scanAndInstallPlugins } from '/@/views/plugins/index';
 import VXETable from 'vxe-table'
@@ -58,6 +60,7 @@ other.elSvg(app);
 
 
 app.use(VXETable)
+app.use(Antd);
 app.use(pinia)
 	.use(router)
 	.use(ElementPlus, { i18n: i18n.global.t })

+ 1 - 1
src/utils/loading.ts

@@ -19,7 +19,7 @@ export const NextLoading = {
 		const htmls = `
 			<div class="loading-next-box">
 				<div class="loading-next-box-warp">
-					<img src="https://data.qicai321.com/minlong/tenant_1/general_uploads/08bc9a4820724aa682eea20af7d1343f.gif" alt="loading" class="loading-gif" />
+					
 				</div>
 			</div>
 		`;

+ 49 - 0
src/views/demo/demo/api.ts

@@ -0,0 +1,49 @@
+import { request } from '/@/utils/service';
+import { PageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
+
+export const apiPrefix = '/api/system/device/';
+
+export function GetPermission() {
+	return request({
+		url: apiPrefix + 'field_permission/',
+		method: 'get',
+	});
+}
+
+export function GetList(query: PageQuery) {
+	return request({
+		url: apiPrefix,
+		method: 'get',
+		params: query,
+	});
+}
+export function GetObj(id: InfoReq) {
+	return request({
+		url: apiPrefix + id,
+		method: 'get',
+	});
+}
+
+export function AddObj(obj: AddReq) {
+	return request({
+		url: apiPrefix,
+		method: 'post',
+		data: obj,
+	});
+}
+
+export function UpdateObj(obj: EditReq) {
+	return request({
+		url: apiPrefix + obj.id + '/',
+		method: 'put',
+		data: obj,
+	});
+}
+
+export function DelObj(id: DelReq) {
+	return request({
+		url: apiPrefix + id + '/',
+		method: 'delete',
+		data: { id },
+	});
+}

+ 225 - 0
src/views/demo/demo/crud.tsx

@@ -0,0 +1,225 @@
+import { CreateCrudOptionsProps, CreateCrudOptionsRet, AddReq, DelReq, EditReq, dict, compute } from '@fast-crud/fast-crud';
+import * as api from './api';
+import { dictionary } from '/@/utils/dictionary';
+import { successMessage } from '../../../utils/message';
+import { auth } from '/@/utils/authFunction';
+
+/**
+ *
+ * @param crudExpose:index传递过来的示例
+ * @param context:index传递过来的自定义参数
+ * @returns
+ */
+export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet {
+	const pageRequest = async (query: any) => {
+		return await api.GetList(query);
+	};
+	const editRequest = async ({ form, row }: EditReq) => {
+		form.id = row.id;
+		return await api.UpdateObj(form);
+	};
+	const delRequest = async ({ row }: DelReq) => {
+		return await api.DelObj(row.id);
+	};
+	const addRequest = async ({ form }: AddReq) => {
+		return await api.AddObj(form);
+	};
+
+	return {
+		crudOptions: {
+			toolbar:{
+                buttons:{
+                    search:{show:true},
+                    // 刷新按钮
+                    refresh:{
+                        show:true},
+                    // 紧凑模式
+                    compact:{show:false},
+                    // 导出按钮
+                   /*  export:{
+                        text: '导出',
+                        type: 'primary',
+                        size: 'small',
+                        icon: 'upload',
+                        circle: false,
+                        display: true
+                    }, */
+                    // 列设置按钮
+                    columns:{
+                        show:false
+                    },
+                }
+            },
+			request: {
+				pageRequest,
+				addRequest,
+				editRequest,
+				delRequest,
+			},
+			pagination: {
+				show: true,
+			},
+			actionbar: {
+				buttons: {
+					add: {
+						show: auth('role:Create'),
+					},
+				},
+			},
+			rowHandle: {
+				//固定右侧
+				fixed: 'right',
+				width: 320,
+				buttons: {
+					view: {
+						show: true,
+					},
+					edit: {
+						show: auth('role:Update'),
+					},
+					remove: {
+						show: auth('role:Delete'),
+					},
+					permission: {
+						type: 'primary',
+						text: '权限配置',
+						show: auth('role:Permission'),
+						click: (clickContext: any): void => {
+							const { row } = clickContext;
+							/* context.RoleDrawer.handleDrawerOpen(row);
+							context.RoleMenuBtn.setState([]);
+							context.RoleMenuField.setState([]); */
+						},
+					},
+				},
+			},
+			form: {
+				col: { span: 24 },
+				labelWidth: '100px',
+				wrapper: {
+					is: 'el-dialog',
+					width: '600px',
+				},
+			},
+			columns: {
+				_index: {
+					title: '序号',
+					form: { show: false },
+					column: {
+						type: 'index',
+						align: 'center',
+						width: '70px',
+						columnSetDisabled: true, //禁止在列设置中选择
+					},
+				},
+				id: {
+					title: 'ID',
+					column: { show: false },
+					search: { show: false },
+					form: { show: false },
+				},
+				name: {
+					title: '角色名称',
+					search: { show: true },
+					column: {
+						minWidth: 120,
+						sortable: 'custom',
+					},
+					form: {
+						rules: [{ required: false, message: '名称必填' }],
+						component: {
+							placeholder: '请输入名称',
+						},
+					},
+				},
+				category_name: {
+					title: '分类名称',
+					search: { show: false },
+					column: {
+						minWidth: 120,
+						sortable: 'custom',
+						columnSetDisabled: true,
+					},
+					form: {
+						rules: [{ required: true, message: '权限标识必填' }],
+						component: {
+							placeholder: '输入权限标识',
+						},
+					},
+					valueBuilder(context) {
+						const { row, key } = context;
+						return row[key];
+					},
+				},
+				supplier:{
+					title: '来源',
+					search: { show: true },
+					column: {
+						minWidth: 120,
+						sortable: 'custom',
+						columnSetDisabled: true,
+					},
+					form: {
+						rules: [{ required: true, message: '权限标识必填' }],
+						component: {
+							placeholder: '输入权限标识',
+						},
+					},
+					valueBuilder(context) {
+						const { row, key } = context;
+						return row[key];
+					},
+				},
+				sort: {
+					title: '排序',
+					search: { show: false },
+					type: 'number',
+					column: {
+						minWidth: 90,
+						sortable: 'custom',
+					},
+					form: {
+						rules: [{ required: true, message: '排序必填' }],
+						value: 1,
+					},
+				},
+				status: {
+					title: '状态',
+					search: { show: true },
+					type: 'dict-radio',
+					column: {
+						width: 100,
+						component: {
+							name: 'fs-dict-switch',
+							activeText: '',
+							inactiveText: '',
+							style: '--el-switch-on-color: var(--el-color-primary); --el-switch-off-color: #dcdfe6',
+							/* onChange: compute((context) => {
+								return () => {
+									api.UpdateObj(context.row).then((res: APIResponseData) => {
+										successMessage(res.msg as string);
+									});
+								};
+							}), */
+						},
+					},
+					dict: dict({
+						value: dictionary('button_status_bool'),
+					}),
+				},
+				remark:{
+					title:'备注',
+					search: { show: false },
+					column: {
+						minWidth: 90,
+						sortable: 'custom',
+					},
+					form: {
+						rules: [{ required: true, message: '排序必填' }],
+						value: 1,
+					},
+				}
+			},
+		},
+	};
+};

+ 36 - 0
src/views/demo/demo/index.vue

@@ -0,0 +1,36 @@
+<template>
+	<fs-page>
+		<fs-crud ref="crudRef" v-bind="crudBinding"> </fs-crud>
+		<PermissionDrawerCom />
+	</fs-page>
+</template>
+
+<script lang="ts" setup name="role">
+import { defineAsyncComponent, onMounted } from 'vue';
+import { useFs } from '@fast-crud/fast-crud';
+import { createCrudOptions } from './crud';
+/* import { RoleDrawerStores } from './stores/RoleDrawerStores';
+import { RoleMenuBtnStores } from './stores/RoleMenuBtnStores';
+import { RoleMenuFieldStores } from './stores/RoleMenuFieldStores';
+import { RoleUsersStores } from './stores/RoleUsersStores'; */
+
+/* const PermissionDrawerCom = defineAsyncComponent(() => import('./components/RoleDrawer.vue')); */
+
+/* const RoleDrawer = RoleDrawerStores(); // 角色-抽屉
+const RoleMenuBtn = RoleMenuBtnStores(); // 角色-菜单
+const RoleMenuField = RoleMenuFieldStores();// 角色-菜单-字段
+const RoleUsers = RoleUsersStores();// 角色-用户 */
+const { crudBinding, crudRef, crudExpose } = useFs({
+	createCrudOptions,
+/* 	context: { RoleDrawer, RoleMenuBtn, RoleMenuField }, */
+});
+
+// 页面打开后获取列表数据
+onMounted(async () => {
+	// 刷新
+	crudExpose.doRefresh();
+/* 	// 获取全部用户
+	RoleUsers.get_all_users(); */
+
+});
+</script>

+ 1 - 1
src/views/system/home/index.vue

@@ -5,7 +5,7 @@
 			<el-col :span="18">
 				<el-row :gutter="12" class="home-card-one mb15">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<div class="home-card-one-title">上午好,刘老师。这是今日的人才情况动态。</div>
+						<div class="home-card-one-title"></div>
 					</el-col>
 				</el-row>
 				<el-row :gutter="10" class="home-card-two mb15">

+ 6 - 8
src/views/system/login/index.vue

@@ -2,12 +2,10 @@
 	<div class="login-container flex z-10">
 		<div class="login-left">
 			<div class="login-left-logo">
-				<!-- <img :src="siteLogo" /> -->
+				<img :src="siteLogo" />
 				<div class="login-left-logo-text">
-					<span>{{ "奇才, 只选对的!" }}</span><!-- getSystemConfig['login.site_title'] || getThemeConfig.globalViceTitle -->
-					<span class="login-left-logo-text-msg" style="margin-top: 5px">{{
-						"您的人才战略顾问与首席执行官"
-					}}</span><!-- getSystemConfig['login.site_name'] || getThemeConfig.globalViceTitleMsg -->
+					{{getSystemConfig['login.site_title'] || getThemeConfig.globalViceTitle}}
+					<!-- getSystemConfig['login.site_name'] || getThemeConfig.globalViceTitleMsg -->
 				</div>
 			</div>
 		</div>
@@ -23,7 +21,7 @@
 					<div class="flex flex-col items-center justify-center p-8 pt-14">
 						<!-- Logo -->
 						<div class="logo-title">
-							<img src="../../../assets/LOGO1.png" alt="奇才AI面试" style="width: 65px; height: 70px;margin-right: 10px;">
+							<!-- <img src="../../../assets/LOGO1.png" alt="奇才AI面试" style="width: 65px; height: 70px;margin-right: 10px;"> -->
 							<span style="font-size: 20px;font-weight: 600;letter-spacing: 3px;color: #595959;">账号登录</span>
 						</div>
 
@@ -79,7 +77,7 @@ import { useThemeConfig } from '/@/stores/themeConfig';
 import { NextLoading } from '/@/utils/loading';
 import logoMini from '/@/assets/logo-mini.svg';
 import loginMain from '/@/assets/login-main.svg';
-import loginBg from '/@/assets/background.jpg';
+import loginBg from '/@/assets/login_background.jpg';
 import { SystemConfigStore } from '/@/stores/systemConfig';
 import { getBaseURL } from '/@/utils/baseUrl';
 // 引入组件
@@ -156,7 +154,7 @@ onMounted(() => {
 			display: flex;
 			align-items: center;
 			position: absolute;
-			top: 280px;
+			top: 20px;
 			left: 80px;
 			z-index: 999;
 			animation: logoAnimation 0.3s ease;

+ 3 - 0
src/views/system/menu/components/MenuButtonCom/index.vue

@@ -20,6 +20,9 @@
 					</el-table>
 				</el-popover>
 			</template>
+			<template #toolbar-right>
+        <a-button type="danger">toolbar-right插槽</a-button>
+      </template>
 	</fs-crud>
 </template>