yangg пре 1 дан
родитељ
комит
33f2509729

+ 1 - 1
.env.development

@@ -6,7 +6,7 @@ ENV = 'development'
 # 本地环境接口地址 121.36.251.245
 
 
-VITE_API_URL = 'http://192.168.100.187:8083'
+VITE_API_URL = 'https://backend.qicai321.com'
 # 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'

+ 16 - 1
src/views/JobApplication/list/crud.tsx

@@ -316,6 +316,20 @@ export const createCrudOptions = function ({ crudExpose, context}: CreateCrudOpt
 							window.open(url, '_blank');
 						}
 					},
+					notification: { // 添加发送短信通知按钮
+						text: '发送短信',
+						iconRight: 'Message',
+						type: 'text',
+						show: compute(({ row }) => {
+							return row.status === 0; // 只在状态为"待通知"时显示
+						}),
+						order: 3,
+						click: ({ row }) => {
+							// 将单个申请转换为数组格式,以复用批量通知的逻辑
+							const selection = [row];
+							context.openSmsNotification(selection);
+						}
+					},
 					profile: { // 添加查看个人信息按钮
 						text: '查看个人信息',
 						iconRight: 'User',
@@ -330,7 +344,7 @@ export const createCrudOptions = function ({ crudExpose, context}: CreateCrudOpt
 						text: '重新分析',
 						iconRight: 'Refresh',
 						type: 'text',
-						show:true /* compute(({ row }) => {
+						show:false /* compute(({ row }) => {
 							return row.status === 2; // 只在状态为"已面试"时显示
 						}) */,
 						order: 2,
@@ -363,6 +377,7 @@ export const createCrudOptions = function ({ crudExpose, context}: CreateCrudOpt
 						type: 'text',
 						show: auth('area:Delete'),
 					},
+					
 				},
 			},
 			pagination: {

+ 1 - 1
src/views/JobApplication/report/report.vue

@@ -425,7 +425,7 @@
                   <!-- 追问题列表 -->
                   <div v-if="record.follow_up_questions && record.follow_up_questions.length > 0" 
                        class="mt-2  border-gray-200">
-                    <div v-for="(followUp, fIndex) in record.follow_up_questions.slice(0, 1)" 
+                    <div v-for="(followUp, fIndex) in record.follow_up_questions.slice(-1)" 
                          :key="fIndex" 
                          class="">
                       <div class="flex items-start space-x-2">

+ 1 - 1
src/views/position/list/components/BatchTagsDialog.vue

@@ -61,7 +61,7 @@ const form = reactive({
 // 获取标签列表
 const fetchTags = async () => {
   try {
-    const res = await GetTagList({ page: 1, limit: 1000, tenant_id: 1 });
+    const res = await GetTagList({ page: 1, limit: 50, tenant_id: 1 });
     console.log('res', res);
     if (res.code === 2000 && res.data && res.data.items) {
       tagOptions.value = res.data.items;

+ 1 - 1
src/views/position/list/crud.tsx

@@ -390,7 +390,7 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 					},
 					dict: dict({
 						getData: async () => {
-							const res = await api.GetCompetencyList({page:1, limit:1000, tenant_id:1});
+							const res = await api.GetCompetencyList({page:1, limit:30, tenant_id:1});
 							return res.data.items;
 						},
 						label: 'name',    

+ 1 - 1
src/views/questionBank/list/components/BatchCategoryDialog.vue

@@ -60,7 +60,7 @@ const { batchUpdateCategory } = useBatchUpdateCategory(props.crudExpose);
 // 获取分类列表
 const fetchCategories = async () => {
   try {
-    const res = await GetcategoryList({ page: 1, limit: 1000, tenant_id: 1 });
+    const res = await GetcategoryList({ page: 1, limit: 50, tenant_id: 1 });
     if (res.code === 2000 && res.data && res.data.items) {
       categoryOptions.value = res.data.items;
       console.log('categoryOptions', categoryOptions.value);

+ 1 - 1
src/views/questionBank/list/components/BatchCompetencyTagsDialog.vue

@@ -106,7 +106,7 @@ const fetchCompetencyList = async () => {
   try {
     const res = await api.GetCompetencyList({
       page: 1,
-      limit: 1000
+      limit: 50
     })
     if (res.code === 2000 && res.data?.items) {
       competencyOptions.value = res.data.items

+ 1 - 1
src/views/questionBank/list/components/BatchTagsDialog.vue

@@ -61,7 +61,7 @@ const form = reactive({
 // 获取标签列表
 const fetchTags = async () => {
   try {
-    const res = await GetTagList({ page: 1, limit: 1000, tenant_id: 1 });
+    const res = await GetTagList({ page: 1, limit: 50, tenant_id: 1 });
     if (res.code === 2000 && res.data && res.data.items) {
       tagOptions.value = res.data.items;
     }

+ 3 - 3
src/views/questionBank/list/components/QuestionBankForm.vue

@@ -383,15 +383,15 @@ const fetchOptions = async () => {
     competencyTagsOptions.value = competencyRes.data.items || [];
 
     // 获取职位选项
-    const positionRes = await api.GetPositionList({page:1, limit:1000, tenant_id:1});
+    const positionRes = await api.GetPositionList({page:1, limit:50, tenant_id:1});
     positionOptions.value = positionRes.data || [];
 
     // 获取分类选项
-    const categoryRes = await api.GetcategoryList({page:1, limit:1000, tenant_id:1});
+    const categoryRes = await api.GetcategoryList({page:1, limit:50, tenant_id:1});
     categoryOptions.value = categoryRes.data.items || [];
 
     // 获取标签选项
-    const tagRes = await api.GetTagList({page:1, limit:1000, tenant_id:1});
+    const tagRes = await api.GetTagList({page:1, limit:50, tenant_id:1});
     tagOptions.value = tagRes.data.items || [];
   } catch (error) {
     console.error('获取选项数据失败:', error);

+ 2 - 2
src/views/questionBank/list/components/treeList.vue

@@ -2,9 +2,9 @@
     <div class="document-tree-container">
       <div class="document-tree-header">
         <span class="document-tree-title">题库归属</span>
-       <!--  <el-button type="primary" size="small" @click="handleAddDocument">
+        <el-button type="primary" size="small" @click="handleAddDocument">
           <el-icon><Plus /></el-icon>添加分类
-        </el-button> -->
+        </el-button>
       </div>
       <el-tree
         ref="treeRef"

+ 4 - 4
src/views/questionBank/list/crud.tsx

@@ -892,7 +892,7 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 					},
 					dict: dict({
 						getData: async () => {
-							const res = await api.GetPositionList({page:1,limit:1000,tenant_id:1});
+							const res = await api.GetPositionList({page:1,limit:50,tenant_id:1});
 							console.log(res.data);
 							return res.data || [];
 						},
@@ -946,7 +946,7 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 					dict: dict({
 						// 使用API方式获取数据
 						getData: async () => {
-							const res = await api.GetcategoryList({page:1, limit:1000, tenant_id:1});
+							const res = await api.GetcategoryList({page:1, limit:50, tenant_id:1});
 							return res.data.items;
 						},
 						label: 'name',
@@ -986,7 +986,7 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 					dict:  dict({
 						// 使用API方式获取数据
 						getData: async () => {
-							const res = await api.GetTagList({page:1, limit:1000, tenant_id:1});
+							const res = await api.GetTagList({page:1, limit:50, tenant_id:1});
 							return res.data.items;
 						},
 						label: 'name',
@@ -1077,7 +1077,7 @@ export const createCrudOptions = function ({ crudExpose, context }: CreateCrudOp
 					dict:  dict({
 						// 使用API方式获取数据
 						getData: async () => {
-							const res = await api.GetTagList({page:1, limit:1000, tenant_id:1});
+							const res = await api.GetTagList({page:1, limit:50, tenant_id:1});
 							return res.data.items;
 						},
 						label: 'name',

+ 70 - 6
src/views/questionBank/list/index.vue

@@ -33,6 +33,15 @@
 		<BatchTagsDialog ref="batchTagsDialogRef" :crudExpose="crudExpose" />
 		<BatchCategoryDialog ref="batchCategoryDialogRef" :crudExpose="crudExpose" />
 		<BatchCompetencyTagsDialog ref="batchCompetencyTagsDialogRef" :crudExpose="crudExpose" />
+		<el-drawer v-model="drawerVisible" title="添加分类" direction="rtl" size="500px" :close-on-click-modal="false" :before-close="handleDrawerClose">
+			<DocumentFormCom
+				v-if="drawerVisible"
+				:initFormData="drawerFormData"
+				:cacheData="documentTreeCacheData"
+				:treeData="documentTreeData"
+				@drawerClose="handleDrawerClose"
+			/>
+			</el-drawer>
 	</fs-page>
 </template>
 
@@ -46,7 +55,13 @@ import { RoleMenuFieldStores } from './stores/RoleMenuFieldStores';
 import { RoleUsersStores } from './stores/RoleUsersStores';
 import { successMessage } from '../../../utils/message';
 import TreeList from './components/treeList.vue';
-import { GetDocumentTree, GetCategoryList, GetTagList } from '../positionList/api';
+import { GetDocumentTree, GetCategoryList, GetTagList,DeleteDocumentCategory } from '../positionList/api';
+import { successNotification } from '/@/utils/message';
+import DocumentFormCom from '../positionList/components/DocumentFormCom/index.vue';
+
+/* import { GetDocumentTree, DeleteDocumentCategory, UpdateDocument ,UpdateSequence, GetInterviewQuestions,AddDocument,
+  GetCategoryList, GetTagList
+ } from '../positionList/api'; */
 
 const PermissionDrawerCom = defineAsyncComponent(() => import('./components/RoleDrawer.vue'));
 const BatchTagsDialog = defineAsyncComponent(() => import('./components/BatchTagsDialog.vue'));
@@ -56,6 +71,10 @@ const BatchCompetencyTagsDialog = defineAsyncComponent(() => import('./component
 const batchTagsDialogRef = ref();
 const batchCategoryDialogRef = ref();
 const batchCompetencyTagsDialogRef = ref();
+const drawerVisible = ref(false);
+const drawerFormData = ref({});
+const documentTreeRef = ref<DocumentTreeRef | null>(null);
+	const documentTreeCacheData = ref<any[]>([]);
 
 const RoleDrawer = RoleDrawerStores(); // 角色-抽屉
 const RoleMenuBtn = RoleMenuBtnStores(); // 角色-菜单
@@ -64,6 +83,16 @@ const RoleUsers = RoleUsersStores();// 角色-用户
 const treeListRef = ref();
 const treeData = ref([]);
 
+// 添加类型定义
+interface DocumentTreeRef {
+  treeRef?: {
+    currentNode?: {
+      parent?: {
+        data: any;
+      };
+    };
+  };
+}
 // 定义树节点的类型
 interface TreeNode {
 	id: string;
@@ -101,6 +130,30 @@ const { crudBinding, crudRef, crudExpose } = useFs({
 
 const selectedCategoryId = ref(1);
 
+// 关闭抽屉
+const handleDrawerClose = (type: string) => {
+  if (type === 'submit') {
+    getTreeData();
+  }
+  drawerVisible.value = false;
+  drawerFormData.value = {};
+};
+// 删除文档分类
+const handleDeleteDocument = (id: any, callback: any) => {
+  ElMessageBox.confirm('您确认删除该文档分类吗?', '温馨提示', {
+    confirmButtonText: '确认',
+    cancelButtonText: '取消',
+    type: 'warning',
+  }).then(async () => {
+    const res = await DeleteDocumentCategory(id);
+    callback();
+    if (res?.code === 2000) {
+      successNotification(res.msg);
+      getTreeData();
+    }
+  });
+};
+
 const handleTreeClick = (node: any) => {
 	console.log('record', node);
   
@@ -151,13 +204,24 @@ const handleTreeClick = (node: any) => {
   crudExpose.doSearch(searchParams);
 };
 
-const handleUpdateDocument = (node: any) => {
-	console.log('node', node);
+// 处理文档分类的新增或编辑
+const handleUpdateDocument = (type: any, record: any) => {
+  if (type === 'update' && record) {
+    const parentData = documentTreeRef.value?.treeRef?.currentNode?.parent?.data || {};
+    documentTreeCacheData.value = [parentData];
+    drawerFormData.value = record;
+  }
+  drawerVisible.value = true;
 };
 
-const handleDeleteDocument = (node: any) => {
-	console.log('node', node);
-};
+// 关闭抽屉
+/* const handleDrawerClose = (type: string) => {
+  if (type === 'submit') {
+    getTreeData();
+  }
+  drawerVisible.value = false;
+  drawerFormData.value = {};
+}; */
 
 // 获取文档树数据
 const getTreeData = () => {

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

@@ -992,7 +992,7 @@ export default defineComponent({
 			try {
 				const queryParams = new URLSearchParams({
 					page: '1',
-					limit: '1000', // 获取更多数据用于统计
+					limit: '50', // 获取更多数据用于统计
 					tenant_id: '1'
 				});
 				

+ 1 - 1
src/views/talent/list/components/BatchTagsDialog.vue

@@ -67,7 +67,7 @@ const getTagList = async () => {
     const response = await axios.get(`${import.meta.env.VITE_API_URL}/api/system/talent_tag/`, {
       params: {
         page: 1,
-        limit: 1000,
+        limit: 50,
         tenant_id: 1
       },
       headers:{