weieryang %!s(int64=7) %!d(string=před) měsíci
rodič
revize
f835ec7977

+ 2 - 1
.env.development

@@ -5,5 +5,6 @@ VITE_APP_TITLE = 智能语音质检系统
5 5
 VITE_APP_ENV = 'development'
6 6
 
7 7
 # 接口
8
-VITE_APP_BASE_API = 'http://192.168.1.15:8150/'
8
+# VITE_APP_BASE_API = 'http://192.168.1.15:8150/'
9
+VITE_APP_BASE_API = 'http://1.194.161.64:8150/'
9 10
 

+ 2 - 2
.env.production

@@ -2,8 +2,8 @@
2 2
 VITE_APP_TITLE = 智能语音质检系统
3 3
 
4 4
 # 开发环境配置
5
-VITE_APP_ENV = 'development'
5
+VITE_APP_ENV = 'production'
6 6
 
7 7
 # 接口
8
-VITE_APP_BASE_API = 'http://192.168.1.15:8150/'
8
+VITE_APP_BASE_API = 'http://1.194.161.64:8150/'
9 9
 

+ 5 - 1
src/components/quality/detail.vue

@@ -45,7 +45,7 @@
45 45
                             <div v-if="msg.trigger" class="mt-2 text-xs text-red-500">{{ getTriggerText(msg.trigger) }}
46 46
                                 <div v-if="msg.Number.length <= 4 && msg.trigger"
47 47
                                     class="hidden group-hover:flex items-center justify-center absolute top-0 -left-[55px] -translate-x-1/2 !p-1 ">
48
-                                    <el-button @click.stop="handleAppeal(msg,index)">
48
+                                    <el-button v-if="showApply" @click.stop="handleAppeal(msg,index)">
49 49
                                         <el-icon>
50 50
                                             <CirclePlus />
51 51
                                         </el-icon>
@@ -80,6 +80,10 @@ const props = defineProps({
80 80
     qualityData: {
81 81
         type: Object,
82 82
         default: () => ({})
83
+    },
84
+    showApply: { // 是否显示申诉按钮
85
+        type: Boolean,
86
+        default: false
83 87
     }
84 88
 });
85 89
 

+ 1 - 1
src/components/quality/result.vue

@@ -13,7 +13,7 @@
13 13
                 <div class="grid grid-cols-6 gap-4">
14 14
                     <div class="text-center p-3 bg-gray-50 rounded">
15 15
                         <div class="text-sm text-gray-500">响应时长</div>
16
-                        <div class="mt-1 font-medium">{{ resultData.waitTime || 0 }}s</div>
16
+                        <div class="mt-1 font-medium">{{ resultData.validity || 0 }}s</div>
17 17
                     </div>
18 18
                     <div class="text-center p-3 bg-gray-50 rounded">
19 19
                         <div class="text-sm text-gray-500">平均语速</div>

+ 27 - 7
src/views/quality/detail.vue

@@ -4,7 +4,7 @@
4 4
       <div class="flex gap-6">
5 5
         <!-- 左侧对话区域 -->
6 6
         <div class="flex-1 bg-white rounded-lg shadow-sm p-6">
7
-          <qualityDetail :qualityData="rowData" @addAppeal="handleAddAppeal" />
7
+          <qualityDetail :qualityData="rowData" :showApply="btnsData === 'shensu' || btnsData === 'jujue'" @addAppeal="handleAddAppeal" />
8 8
         </div>
9 9
         <!-- 右侧质检信息 -->
10 10
         <div class="w-[700px] bg-white rounded-lg shadow-sm p-6">
@@ -18,7 +18,7 @@
18 18
           </div>
19 19
           <div class="space-y-6 overflow-y-auto max-h-[calc(100vh-280px)]">
20 20
             <div>
21
-              <audio-player :audioUrl="filePath"></audio-player>
21
+              <audio-player :audioUrl="rowData.filePath"></audio-player>
22 22
               <qualityResult v-if="rowData.isQuality" :resultData="rowData" :standardShowType="'text'"
23 23
                 :showScore="false" />
24 24
               <qualityApplys v-if="rowData.isQuality" :resultData="applyList"/>
@@ -266,6 +266,28 @@ const submitAudit = async () => {
266 266
 }
267 267
 
268 268
 // 初始化数据
269
+
270
+
271
+
272
+
273
+const qualityStorage = computed(() => {
274
+  return JSON.parse(sessionStorage.getItem('qualityQuery'));
275
+})
276
+
277
+// // 监听qcid变化
278
+// watch(qualityStorage, (newVal, oldVal) => {
279
+//   console.log('watch', newVal, oldVal)
280
+//   if (newVal !== oldVal) {
281
+//     init();
282
+//   }
283
+// });
284
+
285
+
286
+onMounted(() => {
287
+  // console.log('onMounted')
288
+  init();
289
+});
290
+
269 291
 const queryData = JSON.parse(sessionStorage.getItem('qualityQuery'));
270 292
 if (queryData?.qcId) {
271 293
 
@@ -276,14 +298,12 @@ if (queryData?.qcId) {
276 298
   router.push({ path: '/quality/qualityList' });
277 299
 }
278 300
 
279
-onMounted(() => {
280
-  init();
281
-});
282
-
283 301
 // 初始化方法
284
-function init() {
302
+const init = () => {
303
+  
285 304
   getPageDetail(`/quality/qcresult/${qcId.value}`).then((res) => {
286 305
     if (res.state === "success") {
306
+
287 307
       rowData.value = res.data;
288 308
       if (rowData.value.status === 3 || rowData.value.status === 1  || rowData.value.status === 2) {
289 309
         console.log(qcId.value)

+ 2 - 2
src/views/rules/list.vue

@@ -82,7 +82,7 @@
82 82
                 <div class="flex-1">
83 83
                   <label class="block text-sm mb-2"><span class="text-red-500">*</span>适用坐席</label>
84 84
 
85
-                  <el-select v-model="currentModel.applySeats" clearable multiple filterable placeholder="请选择适用坐席">
85
+                  <el-select v-model="currentModel.applySeats" collapse-tags clearable multiple filterable placeholder="请选择适用坐席">
86 86
                     <el-option v-for="item in seatUsers" :key="item.userName" :label="item.nickName"
87 87
                       :value="item.userName" />
88 88
                   </el-select>
@@ -393,7 +393,7 @@
393 393
 import { ref, onMounted, nextTick } from 'vue';
394 394
 import { createPageData, getPageListData, editPageData, deletePageData } from '@/api/main/system/system';
395 395
 import { Edit, Delete, Search, Plus, MoreFilled } from '@element-plus/icons-vue';
396
-import * as moment from 'moment';
396
+import moment from 'moment';
397 397
 import * as echarts from 'echarts';
398 398
 import { ElMessage, ElMessageBox } from 'element-plus'
399 399
 import { modelRules } from '@/utils/modelRules';

+ 14 - 1
src/views/rules/models.vue

@@ -249,6 +249,7 @@ import moment from 'moment';
249 249
 import { createPageData, getPageListData, editPageData, deletePageData } from '@/api/main/system/system';
250 250
 import { ElMessage, ElMessageBox } from 'element-plus';
251 251
 import { modelRules } from '@/utils/modelRules';
252
+import { isArray } from 'lodash';
252 253
 
253 254
 const searchQuery = ref('');
254 255
 const selectedModel = ref(-1);
@@ -353,12 +354,14 @@ const removeGreeting = (index: number) => {
353 354
 };
354 355
 
355 356
 const getModelCases = async (val = '') => {
357
+  // selectedCase
356 358
   if (conditionTypes.value?.length) return;
357 359
   // 获取模型案例逻辑
358 360
   conditionTypes.value = modelRules;
359 361
   if (conditionTypes.value.length) {
360 362
     const selectedType = val ? conditionTypes.value.find(o => o.value === val) : conditionTypes.value[0];
361 363
     conditionOptions.value = selectedType ? selectedType.condition : [];
364
+    
362 365
   }
363 366
 
364 367
 }
@@ -415,12 +418,22 @@ const editCondition = async (index: number, row: any) => {
415 418
   await getWords();
416 419
   
417 420
   await getModelCases(row.type);
421
+  selectedCase.value = conditionTypes.value.find(o => o.value === row.type)?.condition.find(o => o.value === row.name);
422
+  console.log('selectedCase.value', selectedCase.value)
418 423
   nextTick(() => {
419 424
     showConditionDrawer.value = true;
420 425
     editIndex.value = index;
421 426
     conditionForm.value = row;
422 427
     console.log('conditionForm.value', row)
423
-    conditionForm.value.keywords = row.keywords?.length ? row.keywords.split(',').map(o => Number(o)) : [];
428
+    if (row.keywords && isArray(row.keywords)) {
429
+      conditionForm.value.keywords = row.keywords;
430
+    } else if (row.keywords) {
431
+      conditionForm.value.keywords = row.keywords.split(',').map(o => Number(o));
432
+    }
433
+    // conditionForm.value.keywords = row.keywords?.length ? row.keywords.split(',').map(o => Number(o)) : [];
434
+    
435
+
436
+    
424 437
   })
425 438
   
426 439
 };