Переглянути джерело

Merge branch 'refs/heads/wang' into test

WanGxC 11 місяців тому
батько
коміт
ddf1989596

+ 7 - 23
package-lock.json

@@ -27,7 +27,7 @@
 				"echarts": "^5.4.1",
 				"echarts-gl": "^2.0.9",
 				"echarts-wordcloud": "^2.1.0",
-				"element-plus": "^2.4.4",
+				"element-plus": "^2.7.6",
 				"element-tree-line": "^0.2.1",
 				"font-awesome": "^4.7.0",
 				"js-cookie": "^3.0.1",
@@ -5939,9 +5939,9 @@
 			"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
 		},
 		"node_modules/element-plus": {
-			"version": "2.4.4",
-			"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.4.tgz",
-			"integrity": "sha512-TlKubXJgxwhER0dw+8ULn9hr9kZjraV4R6Q/eidwWUwCKxwXYPBGmMKsZ/85tlxlhMYbcLZd/YZh6G3QkHX4fg==",
+			"version": "2.7.6",
+			"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.7.6.tgz",
+			"integrity": "sha512-36sw1K23hYjgeooR10U6CiCaCp2wvOqwoFurADZVlekeQ9v5U1FhJCFGEXO6i/kZBBMwsE1c9fxjLs9LENw2Rg==",
 			"dependencies": {
 				"@ctrl/tinycolor": "^3.4.1",
 				"@element-plus/icons-vue": "^2.3.1",
@@ -5963,14 +5963,6 @@
 				"vue": "^3.2.0"
 			}
 		},
-		"node_modules/element-plus/node_modules/@element-plus/icons-vue": {
-			"version": "2.3.1",
-			"resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
-			"integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
-			"peerDependencies": {
-				"vue": "^3.2.0"
-			}
-		},
 		"node_modules/element-resize-detector": {
 			"version": "1.2.4",
 			"resolved": "https://registry.npmmirror.com/element-resize-detector/-/element-resize-detector-1.2.4.tgz",
@@ -14962,9 +14954,9 @@
 			"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
 		},
 		"element-plus": {
-			"version": "2.4.4",
-			"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.4.4.tgz",
-			"integrity": "sha512-TlKubXJgxwhER0dw+8ULn9hr9kZjraV4R6Q/eidwWUwCKxwXYPBGmMKsZ/85tlxlhMYbcLZd/YZh6G3QkHX4fg==",
+			"version": "2.7.6",
+			"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.7.6.tgz",
+			"integrity": "sha512-36sw1K23hYjgeooR10U6CiCaCp2wvOqwoFurADZVlekeQ9v5U1FhJCFGEXO6i/kZBBMwsE1c9fxjLs9LENw2Rg==",
 			"requires": {
 				"@ctrl/tinycolor": "^3.4.1",
 				"@element-plus/icons-vue": "^2.3.1",
@@ -14981,14 +14973,6 @@
 				"lodash-unified": "^1.0.2",
 				"memoize-one": "^6.0.0",
 				"normalize-wheel-es": "^1.2.0"
-			},
-			"dependencies": {
-				"@element-plus/icons-vue": {
-					"version": "2.3.1",
-					"resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
-					"integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
-					"requires": {}
-				}
 			}
 		},
 		"element-resize-detector": {

+ 1 - 1
package.json

@@ -27,7 +27,7 @@
 		"echarts": "^5.4.1",
 		"echarts-gl": "^2.0.9",
 		"echarts-wordcloud": "^2.1.0",
-		"element-plus": "^2.4.4",
+		"element-plus": "^2.7.6",
 		"element-tree-line": "^0.2.1",
 		"font-awesome": "^4.7.0",
 		"js-cookie": "^3.0.1",

+ 42 - 19
src/views/keyword/keywordManage/components/keyword-manage-table.vue

@@ -23,6 +23,8 @@ interface DataItem {
   add_date: string;
   creator: number;
   isEditing: boolean; // 添加isEditing字段
+  popConfirmVisible: boolean; // 添加popConfirmVisible字段
+  tempSearchTermType: string;
 }
 
 const SUCCESS_CODE = 2000;
@@ -108,7 +110,8 @@ async function fetchSearchTermList() {
     const response = await api.getSearchTermList(query);
     total.value = response.total;
     const responseData: DataItem[] = response.data;
-    tableData.value = responseData.map((item) => ({ ...item, isEditing: false }));
+    tableData.value = responseData.map((item) => ({ ...item, isEditing: false, popConfirmVisible: false, tempSearchTermType: item.searchTerm_type }));
+    console.log('tableData.value ', tableData.value );
   } catch (error) {
     console.log('error:', error);
   } finally {
@@ -139,10 +142,10 @@ async function updateSearchTerm(row: any) {
   }
 }
 
-async function updateSearchTermType(row: any, newValue: string) {
+async function updateSearchTermType(row: any) {
   const data = {
     searchTerm: row.searchTerm,
-    searchTerm_type: newValue,
+    searchTerm_type: row.searchTerm_type,
   };
   try {
     const response = await api.postUpdateSearchTerm({ data, id: row.id });
@@ -154,9 +157,21 @@ async function updateSearchTermType(row: any, newValue: string) {
     }
   } catch (error) {
     console.log('error:', error);
+  } finally {
+    row.popConfirmVisible = false;
   }
 }
 
+function showPopConfirm(row: any) {
+  row.popConfirmVisible = true;
+}
+
+function cancelUpdate(row: any) {
+  row.popConfirmVisible = false;
+  row.searchTerm_type = row.tempSearchTermType; // 恢复原值
+  ElMessage.warning({ message: '已取消修改', plain: true})
+}
+
 /**
  * 切换编辑状态, 并自动获取焦点
  * @param row 行数据
@@ -247,9 +262,9 @@ function resetForm(formEl: FormInstance | undefined) {
  */
 function handleResponse(response: any) {
   if (response.code === SUCCESS_CODE) {
-    ElMessage.success(response.msg);
+    ElMessage.success({ message: response.msg, plain: true });
   } else {
-    ElMessage.error(response.msg || '请联系管理员');
+    ElMessage.error({ message: response.msg || '请联系管理员', plain: true });
   }
 }
 </script>
@@ -263,27 +278,39 @@ function handleResponse(response: any) {
         </el-icon>
         添加关键词
       </el-button>
-      <el-table :data="tableData" stripe height="530" style="width: 100%">
-        <el-table-column fixed="left" prop="add_date" label="添加日期" width="180" />
-        <el-table-column prop="searchTerm" label="关键词">
+      <el-table :data="tableData" stripe max-height="530" style="width: 100%">
+        <el-table-column fixed="left" prop="add_date" label="添加日期" width="180" sortable />
+        <el-table-column prop="searchTerm" label="关键词" sortable>
           <template #default="{ row }">
             <el-input ref="searchTermInpRef" v-if="row.isEditing" v-model="row.searchTerm" @change="updateSearchTerm(row)" />
             <span class="font-bold" v-else>{{ row.searchTerm }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="searchTerm_type" label="关键词类型">
+        <el-table-column prop="searchTerm_type" label="关键词类型" sortable>
           <template #default="{ row }">
-            <el-select v-model="row.searchTerm_type" @change="(value) => updateSearchTermType(row, value)">
-              <el-option label="positive" value="positive" />
-              <el-option label="negative" value="negative" />
-            </el-select>
+            <el-popconfirm
+              title="确定修改吗?"
+              @confirm="updateSearchTermType(row)"
+              @cancel="cancelUpdate(row)"
+              :visible="row.popConfirmVisible">
+              <template #reference>
+                <el-select v-model="row.searchTerm_type" @change="showPopConfirm(row)" style="width: 150px">
+                  <el-option label="positive" value="positive" />
+                  <el-option label="negative" value="negative" />
+                </el-select>
+              </template>
+            </el-popconfirm>
           </template>
         </el-table-column>
         <el-table-column fixed="right" label="操作" width="120">
           <template #default="{ row }">
             <el-button link type="primary" size="small" @click="handleClick(row)" v-if="!row.isEditing"> 编辑</el-button>
             <el-button link type="primary" size="small" @click="handleClick(row)" v-else> 取消</el-button>
-            <el-button link type="danger" size="small" @click="handleDelete(row)">删除</el-button>
+            <el-popconfirm title="确定删除吗?" @confirm="handleDelete(row)">
+              <template #reference>
+                <el-button link type="danger" size="small">删除</el-button>
+              </template>
+            </el-popconfirm>
           </template>
         </el-table-column>
       </el-table>
@@ -299,7 +326,7 @@ function handleResponse(response: any) {
       </div>
     </el-card>
   </div>
-
+  <!-- 添加关键词弹窗 -->
   <el-dialog v-model="dialogVisible" title="添加关键词" width="500" :before-close="handleClose">
     <el-form ref="ruleFormRef" style="max-width: 600px" :model="ruleForm" status-icon :rules="rules" label-width="auto">
       <el-form-item label="关键词" prop="searchTerm">
@@ -311,10 +338,6 @@ function handleResponse(response: any) {
           <el-option label="negative" value="negative" />
         </el-select>
       </el-form-item>
-      <!--<el-form-item>-->
-      <!--  <el-button type="primary" @click="submitForm(ruleFormRef)"> Submit</el-button>-->
-      <!--  <el-button @click="resetForm(ruleFormRef)">Reset</el-button>-->
-      <!--</el-form-item>-->
     </el-form>
     <template #footer>
       <div class="dialog-footer">