소스 검색

解衝突

upon 1 년 전
부모
커밋
024bbdd6da
100개의 변경된 파일874개의 추가작업 그리고 420개의 파일을 삭제
  1. 1 1
      TEAMModelBI/ClientApp/public/index.html
  2. BIN
      TEAMModelBI/ClientApp/src/assets/img/default1.png
  3. BIN
      TEAMModelBI/ClientApp/src/assets/img/default2.png
  4. BIN
      TEAMModelBI/ClientApp/src/assets/img/default3.png
  5. BIN
      TEAMModelBI/ClientApp/src/assets/img/default4.png
  6. BIN
      TEAMModelBI/ClientApp/src/assets/img/notspecial-icon.png
  7. BIN
      TEAMModelBI/ClientApp/src/assets/img/special-icon.png
  8. 59 48
      TEAMModelBI/ClientApp/src/view/index/index.vue
  9. 9 6
      TEAMModelBI/ClientApp/src/view/product/index.vue
  10. 41 16
      TEAMModelBI/ClientApp/src/view/schoolServe/school.vue
  11. 1 1
      TEAMModelBI/ClientApp/src/view/schoolmanage/schoolAnalyse.vue
  12. 446 72
      TEAMModelBI/ClientApp/src/view/userInquire/details.vue
  13. 9 2
      TEAMModelBI/ClientApp/src/view/userInquire/ies.vue
  14. 55 7
      TEAMModelBI/ClientApp/src/view/userInquire/index.vue
  15. 12 5
      TEAMModelBI/ClientApp/src/view/userInquire/iot.vue
  16. 17 3
      TEAMModelBI/ClientApp/src/view/userInquire/socrates.vue
  17. 7 2
      TEAMModelBI/ClientApp/src/view/userInquire/ticket.vue
  18. 67 15
      TEAMModelBI/ClientApp/src/view/userInquire/userdetail.vue
  19. 81 80
      TEAMModelBI/Controllers/BINormal/BatchAreaController.cs
  20. 16 1
      TEAMModelBI/Controllers/BIProductAnalysis/ProductAnalysisController.cs
  21. 30 7
      TEAMModelBI/Controllers/BITmid/TmidController.cs
  22. 20 21
      TEAMModelBI/Controllers/RepairApi/InitialAreaController.cs
  23. 0 113
      TEAMModelBI/Properties/ServiceDependencies/teammodelbi-rc - Web Deploy/profile.arm.json
  24. 3 3
      TEAMModelBI/TEAMModelBI.csproj
  25. 0 8
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/100.0.4889.0.manifest
  26. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/D3DCompiler_47.dll
  27. 0 1
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/First Run
  28. 0 8
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/MEIPreload/manifest.json
  29. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/MEIPreload/preloaded_data.pb
  30. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome.dll
  31. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome.exe
  32. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome_100_percent.pak
  33. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome_200_percent.pak
  34. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome_elf.dll
  35. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome_proxy.exe
  36. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome_pwa_launcher.exe
  37. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/elevation_service.exe
  38. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/eventlog_provider.dll
  39. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/icudtl.dat
  40. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/interactive_ui_tests.exe
  41. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/libEGL.dll
  42. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/libGLESv2.dll
  43. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/am.pak
  44. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ar-XB.pak
  45. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ar.pak
  46. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/bg.pak
  47. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/bn.pak
  48. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ca.pak
  49. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/cs.pak
  50. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/da.pak
  51. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/de.pak
  52. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/el.pak
  53. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/en-GB.pak
  54. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/en-US.pak
  55. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/en-XA.pak
  56. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/es-419.pak
  57. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/es.pak
  58. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/et.pak
  59. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/fa.pak
  60. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/fi.pak
  61. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/fil.pak
  62. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/fr.pak
  63. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/gu.pak
  64. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/he.pak
  65. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/hi.pak
  66. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/hr.pak
  67. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/hu.pak
  68. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/id.pak
  69. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/it.pak
  70. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ja.pak
  71. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/kn.pak
  72. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ko.pak
  73. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/lt.pak
  74. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/lv.pak
  75. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ml.pak
  76. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/mr.pak
  77. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ms.pak
  78. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/nb.pak
  79. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/nl.pak
  80. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/pl.pak
  81. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/pt-BR.pak
  82. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/pt-PT.pak
  83. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ro.pak
  84. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ru.pak
  85. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/sk.pak
  86. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/sl.pak
  87. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/sr.pak
  88. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/sv.pak
  89. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/sw.pak
  90. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ta.pak
  91. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/te.pak
  92. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/th.pak
  93. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/tr.pak
  94. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/uk.pak
  95. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/vi.pak
  96. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/zh-CN.pak
  97. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/zh-TW.pak
  98. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/mojo_core.dll
  99. BIN
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/nacl_irt_x86_64.nexe
  100. 0 0
      TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/notification_helper.exe

+ 1 - 1
TEAMModelBI/ClientApp/public/index.html

@@ -12,7 +12,7 @@
     </title>
 </head>
 <script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
-<script src="https://at.alicdn.com/t/c/font_2934132_zba0ifa4ele.js"></script>
+<script src="https://at.alicdn.com/t/c/font_2934132_s9rk0x895w8.js"></script>
 <script src="../src/access/iconfont.js"></script>
 
 <body>

BIN
TEAMModelBI/ClientApp/src/assets/img/default1.png


BIN
TEAMModelBI/ClientApp/src/assets/img/default2.png


BIN
TEAMModelBI/ClientApp/src/assets/img/default3.png


BIN
TEAMModelBI/ClientApp/src/assets/img/default4.png


BIN
TEAMModelBI/ClientApp/src/assets/img/notspecial-icon.png


BIN
TEAMModelBI/ClientApp/src/assets/img/special-icon.png


+ 59 - 48
TEAMModelBI/ClientApp/src/view/index/index.vue

@@ -208,7 +208,7 @@
                 </div>
                 <div class="commonbox-versions" v-loading="loading.versions" element-loading-background="rgba(0, 0, 0, 0.2)">
                   <div class="commonbox-versions-title">
-                    <p class="versions-title-name">自訂版</p>
+                    <p class="versions-title-name">评测版</p>
                     <p class="versions-title-num">数量:
                       <span>{{ versionsData.custom.num }}</span>
                     </p>
@@ -3040,47 +3040,58 @@ export default {
       console.log()
       let marjorArr = []; let standardArr = []; let basicsArr = []; let customArr = [];
        // 專業版
-       schoolList ? schoolList.forEach((item) => {
-         (item.edition == null || item.edition.scaleVersion == null) 
-         && item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && item.service.includes('YPXSJ6NJ') 
-         ? marjorArr.push(item) : '' }) : ''
+      //  schoolList ? schoolList.forEach((item) => {
+      //    (item.edition == null || item.edition.scaleVersion == null)  && item.code ==='BIRel'
+      //    && item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && item.service.includes('YPXSJ6NJ') 
+      //    ? marjorArr.push(item) : '' }) : ''
+      //  11.14日修正  关于学校版本问题   根据edition   current /1基础   /2标准   /3专业
+      // schoolList ? schoolList.forEach((item) => {
+      //    item.edition   && item.edition.current === 3 && item.code ==='BIRel' ? marjorArr.push(item):''
+      //   //  item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') &&  item.service.includes('YPXSJ6NJ') && item.code ==='BIRel'  ?  marjorArr.push(item):''
+      //  }) : ''
        // 標準版
-       schoolList ? schoolList.forEach((item) => { 
-        (item.edition == null || item.edition.scaleVersion == null) 
-        && item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && (!item.service.includes('YPXSJ6NJ')) ? standardArr.push(item) : '' }) : ''
+      //  schoolList ? schoolList.forEach((item) => { 
+      //   (item.edition == null || item.edition.scaleVersion == null) && item.code ==='BIRel'
+      //   && item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && (!item.service.includes('YPXSJ6NJ')) ? standardArr.push(item) : '' }) : ''
+      // schoolList ? schoolList.forEach((item) => { 
+      //   item.edition  && item.edition.current === 2 && item.code ==='BIRel' ? standardArr.push(item):''
+      //   // item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && item.code ==='BIRel' ? standardArr.push(item):''
+      // }) : ''
        // 基礎版
-       schoolList ? schoolList.forEach((item) => { 
-        (item.edition == null || item.edition.scaleVersion == null) 
-        && !item.service.includes('IPDYZYLC') && !item.service.includes('YMPCVCIM') ? basicsArr.push(item) : '' }) : ''
-       // 自訂版
-       schoolList ? schoolList.forEach((item) => { 
-        item.edition !== null && item.edition.scaleVersion !== null ? customArr.push(item) : '' }) : ''           
-        // res.scInfos.forEach((item)=>{
-        //   //item.versions= item.service.includes('YPXSJ6NJ') && item.service.includes('B6V5J6NP') ? '专业版':item.service.includes('YMPCVCIM') ? '标准版':'基础版'}),
-        //   if (item.edition !== null) {
-        //         if (item.edition.scaleVersion !== null && item.edition.scaleVersion !== "") {
-        //           item.versions = item.edition.scaleVersion;
-        //         } else {
-        //           item.versions = item.service.includes('YPXSJ6NJ') && item.service.includes('B6V5J6NP') ? marjorArr.push(item) : item.service.includes('YMPCVCIM') ? standardArr.push(item) : '基础版';
-        //         }
-        //       } else {
-        //         item.versions = item.service.includes('YPXSJ6NJ') && item.service.includes('B6V5J6NP') ? '专业版' : item.service.includes('YMPCVCIM') ? '标准版' : '基础版';
-        //       }
-        // }),
+      //  schoolList ? schoolList.forEach((item) => { 
+      //   (item.edition == null || item.edition.scaleVersion == null) && item.code ==='BIRel'
+      //   && !item.service.includes('IPDYZYLC') && !item.service.includes('YMPCVCIM') ? basicsArr.push(item) : '' }) : ''
+      // schoolList ? schoolList.forEach((item) => { 
+      //   item.edition  &&  item.edition.current === 1 && item.code ==='BIRel' && !item.service.includes('B6V5J6NP') ? basicsArr.push(item):
+      //   item.edition ==null && item.code ==='BIRel' ? basicsArr.push(item):''
+      //   // !item.service.includes('IPDYZYLC') && !item.service.includes('YMPCVCIM') && item.code ==='BIRel' ? basicsArr.push(item):''
+      // }) : ''
+       // 评测版
+      //  schoolList ? schoolList.forEach((item) => { 
+      //   item.edition !== null && item.edition.current === 1 && item.code ==='BIRel' && item.service.includes('B6V5J6NP') ? 
+      //   customArr.push(item) : '' }) : ''    
+
+        schoolList ? schoolList.forEach((item) => {
+          item.service.includes('YPXSJ6NJ') && item.service.includes('B6V5J6NP') && item.service.includes('YMPCVCIM') && item.code ==='BIRel' ? marjorArr.push(item):
+          item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && (!item.service.includes('YPXSJ6NJ')) && item.code ==='BIRel' ? standardArr.push(item):
+          !item.service.includes('IPDYZYLC') && !item.service.includes('YMPCVCIM') && item.service.includes('B6V5J6NP') && item.code ==='BIRel'   ? customArr.push(item):
+          !item.service.includes('IPDYZYLC') && !item.service.includes('YMPCVCIM') && item.code ==='BIRel'  ? basicsArr.push(item):''
+        }):''
+        //计算版本占比
         console.log(basicsArr,standardArr,marjorArr,customArr,'数组')
         versionsData.value.basics.num = basicsArr.length >0 ?basicsArr.length :0
-        versionsData.value.basics.proportion = (( basicsArr.length / schoolList.length) * 100).toFixed(1)
+        versionsData.value.basics.proportion = (( basicsArr.length /areaAspectsData.value[2].num) * 100).toFixed(1)
         versionsData.value.standard.num = standardArr.length >0 ? standardArr.length:0
-        versionsData.value.standard.proportion = ((standardArr.length / schoolList.length) * 100).toFixed(1)
+        versionsData.value.standard.proportion = ((standardArr.length / areaAspectsData.value[2].num) * 100).toFixed(1)
         versionsData.value.major.num = marjorArr.length >0 ?marjorArr.length:0
-        versionsData.value.major.proportion = ((marjorArr.length / schoolList.length) * 100).toFixed(1)
+        versionsData.value.major.proportion = ((marjorArr.length / areaAspectsData.value[2].num) * 100).toFixed(1)
         versionsData.value.custom.num = customArr.length >0 ? customArr.length:0
-        versionsData.value.custom.proportion = ((customArr.length / schoolList.length) * 100).toFixed(1)
+        versionsData.value.custom.proportion = ((customArr.length / areaAspectsData.value[2].num) * 100).toFixed(1)
         console.log(versionsData.value.basics.num,versionsData.value.basics.proportion,'基础')
         console.log(versionsData.value.standard.num,versionsData.value.standard.proportion,'标准')
         console.log(versionsData.value.major.num,versionsData.value.major.proportion,'专业')
         console.log( versionsData.value.custom.num,versionsData.value.custom.proportion,'自订')
-         let dataBasics = {
+        let dataBasics = {
               title: {
                 text: '{a|' + versionsData.value.basics.proportion + '}{c|%}' + '\n' + '基础版占比',
                 x: 'center',
@@ -3120,7 +3131,7 @@ export default {
                   },
                   data: [
                     {
-                      value: versionsData.value.basics.proportion,
+                      value: Number(versionsData.value.basics.proportion),
                       name: '',
                       itemStyle: {
                         normal: {
@@ -3146,7 +3157,7 @@ export default {
                       },
                     },
                     {
-                      value: 100 - 78,
+                      value: 100 - versionsData.value.basics.proportion,
                       name: '',
                       label: {
                         normal: {
@@ -3162,8 +3173,8 @@ export default {
                   ],
                 },
               ],
-          }
-          let dataStandard = {
+        }
+        let dataStandard = {
               title: {
                 text: '{a|' + versionsData.value.standard.proportion + '}{c|%}' + '\n' + '标准版占比',
                 x: 'center',
@@ -3229,7 +3240,7 @@ export default {
                       },
                     },
                     {
-                      value: 100 - 78,
+                      value: 100 - versionsData.value.standard.proportion,
                       name: '',
                       label: {
                         normal: {
@@ -3245,8 +3256,8 @@ export default {
                   ],
                 },
               ],
-            }
-          let dataMajor = {
+        }
+        let dataMajor = {
               title: {
                 text: '{a|' + versionsData.value.major.proportion + '}{c|%}' + '\n' + '专业版占比',
                 x: 'center',
@@ -3312,7 +3323,7 @@ export default {
                       },
                     },
                     {
-                      value: 100 - 78,
+                      value: 100 - versionsData.value.major.proportion,
                       name: '',
                       label: {
                         normal: {
@@ -3328,10 +3339,10 @@ export default {
                   ],
                 },
               ],
-            }
-          let dataCustom = {
+        }
+        let dataCustom = {
               title: {
-                text: '{a|' + versionsData.value.custom.proportion + '}{c|%}' + '\n' + '自訂版占比',
+                text: '{a|' + versionsData.value.custom.proportion + '}{c|%}' + '\n' + '评测版占比',
                 x: 'center',
                 y: 'center',
                 textStyle: {
@@ -3395,7 +3406,7 @@ export default {
                       },
                     },
                     {
-                      value: 100 - 78,
+                      value: 100 - versionsData.value.custom.proportion,
                       name: '',
                       label: {
                         normal: {
@@ -3411,11 +3422,11 @@ export default {
                   ],
                 },
               ],
-          }
-          totalArea.value.pie1 = dataBasics
-          totalArea.value.pie2 = dataStandard
-          totalArea.value.pie3 = dataMajor
-          totalArea.value.pie4 = dataCustom
+        }
+        totalArea.value.pie1 = dataBasics
+        totalArea.value.pie2 = dataStandard
+        totalArea.value.pie3 = dataMajor
+        totalArea.value.pie4 = dataCustom
         loading.value.versions = false
       }
       }).catch((error) => {

+ 9 - 6
TEAMModelBI/ClientApp/src/view/product/index.vue

@@ -1,6 +1,6 @@
 <template>
   <!--外层所有数据-->
-  <div class="productbox" v-if="showState==='default'">
+  <div class="productbox" v-loading="" v-if="showState==='default'">
     <div class="header-select">
       <el-collapse v-model="activeNames" accordion>
         <el-collapse-item title="数据筛选" name="1">
@@ -95,7 +95,7 @@
                   <span class="filtratebox-phase-title subclass">精准选择:</span>
                   <div class="filtratebox-phase-content precise">
                     <div v-if="clickNum.district ===1" class="schoolclass">
-                      <el-cascader v-model="optionsValue" :options="options" :props="areaProps" clearable />
+                      <el-cascader v-model="optionsValue" :options="options" :props="areaProps" clearable   placeholder="请选择要统计的城市或区"/>
                     </div>
                     <div v-else-if="clickNum.district ===0" class="aresclass">
                       <el-select v-model="optionsValue" placeholder="请选择要统计的省份" clearable>
@@ -267,6 +267,7 @@
 </template>
 <script setup>
 import option_cn from '@/static/regions/region_cn.json'
+import option_gl from '@/static/regions/region_gl.json'
 import { ref, getCurrentInstance, watch, h, nextTick } from 'vue'
 import { ElMessage, TableV2SortOrder, ElLoading, ElCheckbox,HeaderCellSlotProps,ElPopover} from 'element-plus'
 import { Filter } from '@element-plus/icons'
@@ -368,6 +369,8 @@ let columns = ref([
   },
 ])
 const popoverRef = ref()
+const siteValue = window.location.host === 'localhost:5001' ? 'cn' : window.location.host === 'bi.teammodel.cn' ? 'cn' : window.location.host === 'bitest.teammodel.cn' ? 'cn' : 'international'
+const optionsData = siteValue === 'cn' ? option_cn : option_gl
 columns.value[0].headerCellRenderer = (props = HeaderCellSlotProps) => {
       return (
         <div class="items-center justify-center">
@@ -396,7 +399,7 @@ columns.value[0].headerCellRenderer = (props = HeaderCellSlotProps) => {
           </ElPopover>
         </div>
       )
-    }
+}
 const sortState = ref({
   'deviceCnt':TableV2SortOrder.ASC,
   'tmidCnt': TableV2SortOrder.ASC,
@@ -570,7 +573,7 @@ const props2 = {
 }
 const areaProps = {
   multiple: false,
-  checkStrictly: false,
+  checkStrictly:true,
   label: "name",
   value: "name",
 }
@@ -957,9 +960,9 @@ function serarchInit (value) {
     // dataSource.value.composite=
     console.log(clickNum.value.subject, '0学区值0')
     options.value = dataSource.value.composite
-    clickNum.value.subject === 2 ? options.value = option_cn : ''
+    clickNum.value.subject === 2 ? options.value = optionsData : ''
   } else if (filterKey === 1) {
-    options.value = option_cn
+    options.value = optionsData
     console.log(clickNum.value.district, '1学区值1')
     clickNum.value.district === 2 ? options.value = dataSource.value.composite : ''
   }

+ 41 - 16
TEAMModelBI/ClientApp/src/view/schoolServe/school.vue

@@ -565,12 +565,10 @@ export default {
         // sortable: true,
          cellRenderer: (data) => (
           <>
-            <div style="color:#000000;" v-show={data.rowData.versions !=='基础版' && data.rowData.versions !=='标准版' && data.rowData.versions !=='专业版'}>{data.rowData.versions}</div>
             <div style="color:#e6a23c;" v-show={data.rowData.versions ==='专业版' ? true:false}>专业版</div>
             <div style="color:#67C23A;" v-show={data.rowData.versions ==='标准版' ? true:false}>标准版</div>
             <div style="color:#409EFF;" v-show={data.rowData.versions ==='基础版' ? true:false}>基础版</div>
-            
-            
+            <div style="color:#fab6b6;" v-show={data.rowData.versions ==='评测版' ? true:false}>评测版</div>
           </>
         ),
       },
@@ -729,7 +727,7 @@ export default {
                       基础版
                     </ElCheckbox>
                     <ElCheckbox v-model={shouldFilter.value.custom} onChange={versionsEstimate}>
-                      自訂
+                      评测
                     </ElCheckbox>
                   </div>
                   {/* <div class="el-table-v2__demo-filter">
@@ -800,7 +798,7 @@ export default {
         res.scInfos.forEach((item)=>{
          // debugger;
           //item.versions= item.service.includes('YPXSJ6NJ') && item.service.includes('B6V5J6NP') ? '专业版':item.service.includes('YMPCVCIM') ? '标准版':'基础版'}),
-          if (item.edition !== null) {
+          /* if (item.edition !== null) {
                 if (item.edition.scaleVersion !== null && item.edition.scaleVersion !== "") {
                   item.versions = item.edition.scaleVersion;
                 } else {
@@ -808,7 +806,20 @@ export default {
                 }
               } else {
                 item.versions = item.service.includes('YPXSJ6NJ') && item.service.includes('B6V5J6NP') ? '专业版' : item.service.includes('YMPCVCIM') ? '标准版' : '基础版';
-              }
+          } */
+          //11.14日修正  关于学校版本问题   根据edition   current /1基础   /2标准   /3专业
+           /* if(item.edition !== null){
+            item.edition.current === 1 && item.service.includes('B6V5J6NP') ? item.versions='评测版':
+            item.edition.current === 3 ?  item.versions='专业版':
+            item.edition.current === 2 ? item.versions='标准版':
+            item.edition.current === 1 ? item.versions='基础版':''
+          }else{
+            item.versions='基础版'
+          } */
+          item.versions =item.service.includes('YPXSJ6NJ') && item.service.includes('B6V5J6NP') && item.service.includes('YMPCVCIM') ? '专业版':
+          item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && (!item.service.includes('YPXSJ6NJ')) ? '标准版':
+          !item.service.includes('IPDYZYLC') && !item.service.includes('YMPCVCIM') && item.service.includes('B6V5J6NP')   ?'评测版':
+          !item.service.includes('IPDYZYLC') && !item.service.includes('YMPCVCIM')  ? '基础版':'基础版' 
         }),
         tableData.value.push(...res.scInfos),originalNum.value = res.scInfos.length,
         originalData.value = res.scInfos,tablesccnt.value = res.allCnt) 
@@ -1504,6 +1515,7 @@ export default {
     }
     // ※版本判定:1.學校管理(IPDYZYLC) + 學情分析(YMPCVCIM)=「標準版」 
     //             2.學校管理(IPDYZYLC) + 學情分析(YMPCVCIM) + 五育看板(YPXSJ6NJ) =「專業版」  
+    //  11.14日修正  关于学校版本问题   根据edition   current /1基础   /2标准   /3专业
     function versionsEstimate (val) {
       console.log(shouldFilter.value)
       let arrState = shouldFilter.value
@@ -1512,21 +1524,34 @@ export default {
       //debugger;
       // debugger;
        // 專業版
-       arrState.major ? originalData.value.forEach((item) => {
-         (item.edition == null || item.edition.scaleVersion == null || item.edition.scaleVersion == "") 
-         && item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && item.service.includes('YPXSJ6NJ') 
-         ? marjorArr.push(item) : '' }) : ''
+        arrState.major ? originalData.value.forEach((item) => {
+          item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && item.service.includes('YPXSJ6NJ') ? 
+          marjorArr.push(item) : '' }) : '' 
+
+         {/* arrState.major ? originalData.value.forEach((item) => {
+          item.edition  && !item.edition.scaleVersion && item.edition.current === 3 ? marjorArr.push(item):''
+         }) : '' */}
+
        // 標準版
-       arrState.standard ? originalData.value.forEach((item) => { 
-        (item.edition == null || item.edition.scaleVersion == null || item.edition.scaleVersion == "") 
-        && item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && (!item.service.includes('YPXSJ6NJ')) ? standardArr.push(item) : '' }) : ''
+        arrState.standard ? originalData.value.forEach((item) => { 
+        item.service.includes('IPDYZYLC') && item.service.includes('YMPCVCIM') && (!item.service.includes('YPXSJ6NJ')) ? 
+        standardArr.push(item) : '' }) : '' 
+        /* arrState.standard ? originalData.value.forEach((item) => { 
+          item.edition  && !item.edition.scaleVersion && item.edition.current === 2  ? standardArr.push(item):''
+        }) : '' */
        // 基礎版
        arrState.basics ? originalData.value.forEach((item) => { 
-        (item.edition == null || item.edition.scaleVersion == null || item.edition.scaleVersion == "") 
-        && !item.service.includes('IPDYZYLC') && !item.service.includes('YMPCVCIM') ? basicsArr.push(item) : '' }) : ''
+        !item.service.includes('IPDYZYLC') && !item.service.includes('YMPCVCIM') && !item.service.includes('B6V5J6NP') ? 
+        basicsArr.push(item) : '' }) : '' 
+
+        /* arrState.basics ? originalData.value.forEach((item) => { 
+          item.edition  && !item.edition.scaleVersion && item.edition.current === 1 ? basicsArr.push(item):
+          item.edition ==null ? basicsArr.push(item):''
+        }) : '' */
        // 自訂版
        arrState.custom ? originalData.value.forEach((item) => { 
-        item.edition !== null && item.edition.scaleVersion !== null && item.edition.scaleVersion !== "" ? customArr.push(item) : '' }) : ''           
+        !item.service.includes('IPDYZYLC') && !item.service.includes('YMPCVCIM') && item.service.includes('B6V5J6NP') ? customArr.push(item) : '' }) : ''   
+        console.log(marjorArr,standardArr,basicsArr,customArr,'重组')        
       let versionArr = [...marjorArr, ...standardArr, ...basicsArr, ...customArr]
       console.log(versionArr, '合并结果')
       tableData.value = versionArr

+ 1 - 1
TEAMModelBI/ClientApp/src/view/schoolmanage/schoolAnalyse.vue

@@ -2832,7 +2832,7 @@ export default {
 .class-info,
 .class-total {
   width: 100%;
-  padding: 0.5% 1%;
+  padding: 1%;
   display: flex;
   flex-wrap: nowrap;
   justify-content: space-between;

+ 446 - 72
TEAMModelBI/ClientApp/src/view/userInquire/details.vue

@@ -1,8 +1,43 @@
 <template>
-    <div class="userdetails">
+    <div class="entirety">
+        <div class="groupdata" v-show="detailsData.length >1">
+            <span class="nowgroup-num">{{transferNum+1}}</span>/<span class="totalgroup-num">{{detailsData.length}}</span>
+            <div class="lastbtn" v-if="detailsData.length >1 && transferNum !==0" @click="lastUser()" title="上一个">
+                <div class="btn-ls">
+                <svg class="last-btns" aria-hidden="true">
+                    <use xlink:href="#icon-icon-test"></use>
+                </svg>
+                </div>
+            </div>
+            <div class="lastbtn" v-else title="上一个">
+                <div class="btn-ls">
+                <svg class="last-btns" aria-hidden="true">
+                    <use xlink:href="#icon-icon-test-copy"></use>
+                </svg>
+                </div>
+            </div>
+            <div class="nextbtn" v-if="detailsData.length >1 && transferNum+1 !==detailsData.length" @click="nextUser()" title="下一个">
+                <div class="btn-ls">
+                <svg class="last-btns" aria-hidden="true">
+                    <use xlink:href="#icon-icon-test1"></use>
+                </svg>
+                </div>
+            </div>
+            <div class="nextbtn" v-else title="下一个">
+                <div class="btn-ls">
+                <svg class="last-btns" aria-hidden="true">
+                    <use xlink:href="#icon-icon-test1-copy"></use>
+                </svg>
+                </div>
+            </div>
+        </div>
+    <div class="userdetails" v-loading="loading" element-loading-text="数据加载中...">
         <div class="topbox">
            <div class="img-name">
-            <div class="topbox-images"><el-image src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg" fit="fill" /></div>
+            <div class="topbox-images">
+                <el-image :src="userPortrait" v-if="userPortrait"/>
+                <el-image :src="randomImage" fit="contain" v-else/>
+            </div>
             <div class="topbox-name">
                 <div class="topbox-name-text">{{usernames}}</div>
                 <div class="topbox-name-advance" @click="userdetailState=true">查看账户进阶数据<el-icon><MoreFilled /></el-icon></div>
@@ -37,7 +72,7 @@
                             <p class="item-title">{{item.title}}</p>
                             <div class="item-content" v-show="item.state">
                                 <div class="content-left">
-                                    <span>上次登陆时间:{{item.value}}</span>
+                                    <span>上次登陆时间:{{item.valueText}}</span>
                                 </div>
                             </div>
                             <div class="notenabled-title" v-show="!item.state">近期未使用</div>
@@ -47,7 +82,7 @@
         <el-divider />
         <!--账户进阶数据-->
         <div class="user-details" v-if="userdetailState">
-            <Userdetail @updateView='handleChildEvent '></Userdetail>
+            <Userdetail @updateView='handleChildEvent' :detailsData="pointsData"></Userdetail>
         </div>
          <!--账户进阶数据 end-->
         <!--产品页面-->
@@ -61,7 +96,8 @@
                     </div>
                 </div>
                 <el-divider />
-                <replaceHiTeach :detailsData="detailsIot"></replaceHiTeach>
+                <replaceHiTeach :detailsData="detailsIot" v-if="iotState"></replaceHiTeach>
+                <div v-else class="not-coupons">暂无数据</div>
             </div>
             <!-- <div class="hitadiv">
                 <div  class="common-header-title">
@@ -92,8 +128,8 @@
                 <div class="equitystate" v-else>
                     <div class="rightsbox">
                         <div class="rightsbox-content">
-                            <el-carousel trigger="click" height="62vh" :autoplay="false">
-                                <el-carousel-item v-for="item in powerList" :key="item">
+                            <!-- <el-carousel trigger="click" height="60vh" :autoplay="false">
+                                <el-carousel-item v-for="item in powerList" :key="item"  v-show="powerList.length >0">
                                     <div class="rightsbox-item">
                                         <div class="rightsbox-item-title">
                                             <p>[ID授权] {{item.name}}</p>
@@ -107,17 +143,15 @@
                                         </div>
                                         <div class="rightsbox-item-expansion" v-show="item.prodCode ==='Z6ELB6EZ'">
                                             <p class="expansion-title">产品扩充项</p>
-                                            <!--产品扩充-->
                                             <div v-for="iteml in item.apruleArr" :key="iteml.key">
                                                 -<span :class="[iteml.state ? 'start-title':'error-title' ]">
                                                     {{iteml.title}}
                                                     <span v-show="iteml.key ==='cligroup' || iteml.key ==='client_volume' || iteml.key ==='soknumber'">({{iteml.value}})</span>
                                                  </span>
                                             </div>
-                                            <!--产品扩充 end-->
-                                            <!--HiTeach 附加功能-->
-                                            <el-divider /> 
-                                            <div class="subjoin">
+                                        </div>
+                                         <el-divider /> 
+                                        <div class="subjoin" v-show="item.prodCode ==='Z6ELB6EZ'">
                                                 <div class="subjoin-item" >
                                                     <p class="subjoin-title">{{subjoinData.hiteachTitle}}</p>
                                                     <div class="subjoin-content" v-for="item in subjoinData.hiteach" :key="item.key">
@@ -138,17 +172,120 @@
                                                             <span class="endtimes">(到期日:{{itemc.end}})</span>
                                                         </div>
                                                     </div>
+                                        </div>
+                                        <div class="rightsbox-item-expansion" v-show="item.prodCode ==='IPALB6EY'">
+                                            <p class="expansion-title">产品详细</p>
+                                            <div><span>空间大小:</span> <span class="expansion-sizenum">{{item.number}}   GB</span></div>
+                                        </div>
+                                    </div>
+                                </el-carousel-item>
+                                <el-carousel-item v-show="powerList.length ===0">
+                                    <div class="power-notdata">暂无权益内容</div>
+                                    <div class="subjoin">
+                                                <div class="subjoin-item" >
+                                                    <p class="subjoin-title">{{subjoinData.hiteachTitle}}</p>
+                                                    <div class="subjoin-content" v-for="item in subjoinData.hiteach" :key="item.key">
+                                                        <div v-show="item.exps < notTime || item.end ===0">
+                                                            <span class="expire">{{item.title}}</span>
+                                                            <span class="ccnums expire" v-show="item.key==='webirs'">{{item.value}}</span>
+                                                            <span class="endtimes-error">(到期日:{{item.end}})</span>
+                                                        </div>
+                                                        <div v-show="item.exps >= notTime">
+                                                            <span>{{item.title}}</span>
+                                                            <span class="ccnums" v-show="item.key==='webirs'">{{item.value}}</span>
+                                                            <span class="endtimes" >(到期日:{{item.end}})</span>
+                                                        </div>
+                                                </div>
+                                            </div>
+                                                <div class="subjoin-item" >
+                                                    <p class="subjoin-title">{{subjoinData.hiteachCCTitle}}</p>
+                                                    <div class="subjoin-content" v-for="itemc in subjoinData.hiteachCC" :key="itemc.key">
+                                                        <div v-show="itemc.end < notTime || itemc.end ===0">
+                                                            <span class="expire">{{itemc.title}}</span>
+                                                            <span class="ccnums expire">{{itemc.num}}</span>
+                                                            <span class="endtimes expire">(到期日:{{itemc.end}})</span>
+                                                        </div>
+                                                        <div v-show="itemc.end > notTime">
+                                                            <span>{{itemc.title}}</span>
+                                                            <span class="ccnums">{{itemc.num}}</span>
+                                                            <span class="endtimes">(到期日:{{itemc.end}})</span>
+                                                        </div>
+                                                    </div>
                                             </div>
-                                            <!--HiTeach 附加功能 end-->
+                                    </div>
+                                </el-carousel-item>
+                            </el-carousel> -->
+                            <div class="prodlist">
+                                <div v-if="powerList.length >0">
+                                    <div class="prodlist-item" v-for="item in powerList" :key="item">
+                                    <div class="rightsbox-item">
+                                        <div class="rightsbox-item-title">
+                                            <p>[ID授权] {{item.name}}</p>
+                                        </div>
+                                        <div class="rightsbox-item-time">
+                                            <p>
+                                                <span>时间:</span>
+                                                <span class="rightsbox-item-time-num">{{item.startDateText}}~{{item.endDateText}}</span>
+                                                <span>共<span class="rightsbox-item-timenums">{{item.intervalTime}}</span>天</span>
+                                            </p>
+                                            <p v-show="item.aprule.schoolinfo">
+                                                <span>学校:</span>
+                                                <span class="rightsbox-item-timenums">{{item.aprule.schoolinfo.name}}</span>
+                                            </p>
                                         </div>
+                                        <div class="rightsbox-item-expansion" v-show="item.prodCode ==='Z6ELB6EZ'">
+                                            <p class="expansion-title">产品扩充项</p>
+                                            <!--产品扩充-->
+                                            <div v-for="iteml in item.apruleArr" :key="iteml.key">
+                                                -<span :class="[iteml.state ? 'start-title':'error-title' ]">
+                                                    {{iteml.title}}
+                                                    <span v-show="iteml.key ==='cligroup' || iteml.key ==='client_volume' || iteml.key ==='soknumber'">({{iteml.value}})</span>
+                                                 </span>
+                                            </div>
+                                            <!--产品扩充 end-->
                                         </div>
-                                        <!-- <div class="rightsbox-item-expansion" v-show="item.prodCode ==='IPALB6EY'">
+                                        <div class="rightsbox-item-expansion" v-show="item.prodCode ==='IPALB6EY'">
                                             <p class="expansion-title">产品详细</p>
                                             <div><span>空间大小:</span> <span class="expansion-sizenum">{{item.number}}   GB</span></div>
-                                        </div> -->
+                                        </div>
                                     </div>
-                                </el-carousel-item>
-                            </el-carousel>
+                                    <el-divider /> 
+                                </div>
+                                </div>
+                                <div class="power-notdata" v-else>暂无权益内容</div>
+                                   <!--HiTeach 附加功能-->
+                                <div class="subjoin">
+                                    <div class="subjoin-item" >
+                                        <p class="subjoin-title">{{subjoinData.hiteachTitle}}</p>
+                                            <div v-if="subjoinData.hiteach.length >0">
+                                                <div class="subjoin-content" v-for="item in subjoinData.hiteach" :key="item.key">
+                                                <div>
+                                                    <span>{{item.title}}</span>
+                                                    <span class="ccnums" v-show="item.key==='webirs'">{{item.value}}</span>
+                                                    <span class="endtimes" v-if="item.exps >= notTime">(到期日:{{item.end}})</span>
+                                                    <span class="endtimes-error" v-else>(到期日:{{item.end}})</span>
+                                                </div>
+                                            </div>
+                                            </div>
+                                            <div class="not-datas" v-else>暂无数据</div>
+                                            <el-divider /> 
+                                            </div>
+                                    <div class="subjoin-item" >
+                                        <p class="subjoin-title">{{subjoinData.hiteachCCTitle}}</p>
+                                        <div v-if="subjoinData.hiteachCC.length >0">
+                                            <div class="subjoin-content" v-for="itemc in subjoinData.hiteachCC" :key="itemc.key">
+                                                <div>
+                                                    <span>{{itemc.title}}</span>
+                                                    <span class="ccnums">{{itemc.num}}</span>
+                                                    <span class="endtimes">(到期日:{{itemc.end}})</span>
+                                                 </div>
+                                            </div>
+                                        </div>
+                                        <div class="not-datas" v-else>暂无数据</div>
+                                    </div>
+                                </div>
+                                        <!--HiTeach 附加功能 end-->
+                            </div>
                         </div>
                     </div>
                 </div>
@@ -192,12 +329,12 @@
         <!--产品页面end-->
         <!--back-->
         <div class="back-btns">
-            <el-button type="info" :icon="ArrowLeft" size="small" @click="backClick">返回搜索</el-button>
+            <el-button type="primary" :icon="ArrowLeft" size="small" @click="backClick">返回搜索</el-button>
         </div>
         <!--back end-->
         <!--所有登入时间dialog-->
         <div class="login-total">
-            <el-dialog v-model="loginDialog" title="所有登入情况" width="65%" :before-close="handleClose">
+            <el-dialog v-model="loginDialog" title="所有登入情况" width="70%" :before-close="handleClose">
                 <div class="logintotal-box">
                     <div class="logintotal-box-list">
                         <div :class="[item.state ? item.key:'notenabled-total','listbox-item-total']" v-for="item in productdata" :key="item.id">
@@ -205,7 +342,7 @@
                             <div class="item-content" v-show="item.state">
                                 <div class="content-left">
                                     <p>上次登陆时间</p>
-                                    <span>{{item.value}}</span>
+                                    <span>{{item.valueText}}</span>
                                 </div>
                             </div>
                             <div class="notenabled-title-total" v-show="!item.state">近期未使用</div>
@@ -216,7 +353,7 @@
                         <p class="logintotal-box-table-title">登入详细:</p>
                         <el-table :data="logintotalTable" style="width: 100%" height="35vh" border >
                             <el-table-column prop="product" label="平台" align="center"/>
-                            <el-table-column prop="time" label="时间" align="center"/>
+                            <el-table-column prop="timeText" label="时间" align="center"/>
                         </el-table>
                     </div>
                 </div>
@@ -229,9 +366,10 @@
         </div>
          <!--所有登入时间dialog end-->
     </div>
+    </div>
 </template>
 <script setup>
-import { ref, getCurrentInstance, watch, h, nextTick,onMounted,defineProps,defineEmits } from 'vue'
+import { ref, getCurrentInstance, watch, h, nextTick,onMounted,defineProps,defineEmits,computed } from 'vue'
 import { Iphone,More,MoreFilled,ArrowLeft,Right } from '@element-plus/icons'
 import commonHeatmapVue from '../../components/echarts/commonHeatmap.vue'
 import commonGaugeVue from '../../components/echarts/commonGauge.vue'
@@ -246,7 +384,7 @@ import replaceHiTeach from './iot.vue'
 let props = defineProps({
     searchdata: Object,
 })
-let { proxy } = getCurrentInstance()
+let {ctx:that,proxy } = getCurrentInstance()
 let activeName = ref('basics')
 let userdetailState=ref(false)
 let tabPosition = ref('left')
@@ -261,13 +399,13 @@ let userdata = ref([
     { id: 6, icon: '#icon-shijian2', value: '0', title: '', key: 'time', check: false ,hint:'上次登录时间' },
 ])
 let productdata = ref([
-    { id: 1, title: 'HiTeach', value:0,key:'HiTeach',state: false },
-    { id: 2, title: 'HiTA',value:0, key:'HiTA',state: false },
-    { id: 3, title: 'IES', value:0,key:'IES', state: false },
-    { id: 4, title: '苏格拉底', value:0,key:'Socrates', state: false },
-    { id: 5, title: 'HiTeach CC', value:0,key:'cc', state: false },
-    { id: 6, title: '通用账号', value:0,key:'general', state: false },
-    { id: 7, title: 'IRS', value:0,key:'irs', state: false },
+    { id: 1, title: 'HiTeach', value:0,valueText:'',key:'HiTeach',state: false },
+    { id: 2, title: 'HiTA',value:0,valueText:'',key:'HiTA',state: false },
+    { id: 3, title: 'IES', value:0,valueText:'',key:'IES5', state: false },
+    { id: 4, title: '苏格拉底', value:0,valueText:'',key:'Sokrates', state: false },
+    { id: 5, title: '觀議課 APP', value:0,valueText:'',key:'SokAPP', state: false },
+    { id: 6, title: '通用账号', value:0,valueText:'',key:'Account ', state: false },
+    { id: 7, title: 'WebIRS5', value:0,valueText:'',key:'IRS', state: false },
 ])
 let tableData = ref([
     { time: '2023-07-05 15:33', ip: '222.209.14.199', location: '四川省成都市',platform:'HiTeach' },
@@ -532,23 +670,27 @@ let rightsdata=ref([
 ])
 let detailsData = ref()
 detailsData.value = props.searchdata?.length > 0 ? props.searchdata : ''
-let ies5datas=detailsData.value[0].ies5
-let sokratesData=detailsData.value[0].sokrates
-let pointsData=detailsData.value[0]
+let transferNum=ref(0)   //*滚动的数值*
+let ies5datas=ref(detailsData.value[transferNum.value].ies5)
+let sokratesData=ref(detailsData.value[transferNum.value].sokrates)
+let pointsData=ref(detailsData.value[transferNum.value])
 console.log(props.searchdata, '传输的值')
 console.log(detailsData.value, '最终数据')
 let powerExtension=ref([
     {title:'USB錄影支援',key:'hdcam',state:false},
     {title:'蘇格拉底議課APP',key:'sokapp',state:false},
     {title:'蘇格拉底影片',key:'sokvdo',state:false},
+    {title:'蘇格拉底桌面',key:'sokdesk',state:false},
+    {title:'蘇格拉底報告',key:'sokrpt',state:false},
+    {title:'蘇格拉底小數據',key:'soksdata',state:false},
     {title:'AI智能終端',key:'ezs',state:false},
     {title:'AI文句分析',key:'wordanls',state:false},
     {title:'電子學生證',key:'dgistuid',state:false},
-    {title:'蘇格拉底小數據',key:'soksdata',state:false},
     {title:'雲端診斷分析系統',key:'cloudas',state:false},
     {title:'分組數',key:'cligroup',value:0,state:false},
     {title:'IRS連線授權數',key:'client_volume',value:0,state:false},
     {title:'議課人數',key:'soknumber',value:0,state:false},
+    {title:'智慧評分系統',key:'scorsys',state:false},
     {title:'IRS硬體遙控器',key:'irs',state:true},
 ])
 let subjoinData=ref({
@@ -576,6 +718,25 @@ let buttonSelect = ref([
 ])
 let loginDialog=ref(false)
 let logintotalTable=ref([])
+let iotState=ref(true)
+let advancevalue=ref({
+    last:'',
+    next:''
+})
+let loading=ref(false)
+let headeronly=ref(require('@/assets/img/default1.png'))
+let headerData=ref([
+    require('@/assets/img/default1.png'),
+    require('@/assets/img/default2.png'),
+    require('@/assets/img/default3.png'),
+    require('@/assets/img/default4.png'),
+    ])
+let userPortrait=ref()     //用户头像
+const randomImage = computed(()=>{
+    const randomIndex = Math.floor(Math.random() * headerData.value.length);
+    console.log(randomIndex,'随机头像')
+    return headerData.value[randomIndex];
+})
 const handleChildEvent = (payload) => {
     userdetailState.value=false
 }
@@ -585,10 +746,12 @@ const backClick = () => {
         emits('parentClick','default') // 使用方式和 vue2 this.$emit 一样
 }
 function initdata() {
-    let transmitData = detailsData.value[0]
-    console.log(transmitData,'数据')
+    console.log(detailsData.value,'进入方法查看')
+    let transmitData = detailsData.value[transferNum.value]
+    console.log(transmitData,'数据details')
     //header 基础信息 
-    let { name,id,mobile, mail, schoolCode, schoolCodeW, points,country,province,city,} = transmitData
+    let { name,id,mobile, mail, schoolCode, schoolCodeW, points,country,province,city,picture} = transmitData
+    userPortrait.value=picture
     usernames.value=name
     userdata.value[0].value = id
     userdata.value[1].value = mobile
@@ -599,16 +762,27 @@ function initdata() {
     //产品使用及安装情况 登入时间
     let {login}=transmitData
     let logintimes = login.length >0 ? login.sort(function(a,b){return b.time-a.time}):'无'
+    console.log(logintimes,'时间!')
     logintimes !=='无' ?  userdata.value[5].value=proxy.$common.timestampToTime(logintimes[0].time,'all'):userdata.value[5].value='暂无'
+    productdata.value.forEach((itema)=>{itema.value =0})
     if(login.length >0){
+       console.log('进入到多数组')
+       logintotalTable.value=[]
        login.forEach(item => {
          let typename=item.product
          productdata.value.forEach(items=>{
-            typename === items.key ? items.value === 0 ? (items.value=proxy.$common.timestampToTime(item.time,'all'),items.state=true): item.time > items.value ? (items.value=proxy.$common.timestampToTime(item.time,'all'),items.state=true):'':''
+            typename === items.key ? 
+            items.value === 0 ? (items.valueText=proxy.$common.timestampToTime(item.time,'all'),items.value=item.time,items.state=true): 
+            item.time > items.value ? (items.valueText=proxy.$common.timestampToTime(item.time,'all'),items.value=item.time,items.state=true):'':''
          })
-         item.time=proxy.$common.timestampToTime(item.time,'all')
+         item.timeText=proxy.$common.timestampToTime(item.time,'all')
          logintotalTable.value.push(item)
        })
+    }else{
+        logintotalTable.value=[]
+        productdata.value.forEach((item)=>{
+            item.state=false
+        })
     }
     //空间与权益
     let {usedSize,teachSize,totalSize,surplusSize}=transmitData.ies5
@@ -623,18 +797,21 @@ function initdata() {
         let apruleItem=item.aprule
         item.apruleArr=[]
         if(apruleItem !==null && item.prodCode ==='Z6ELB6EZ'){
-            apruleItem.hdcam ? powerExtension.value[0].state=true:powerExtension.value[0].state=false
-            apruleItem.sokapp ? powerExtension.value[1].state=true:powerExtension.value[1].state=false
-            apruleItem.sokvdo ? powerExtension.value[2].state=true:powerExtension.value[2].state=false
-            apruleItem.ezs ? powerExtension.value[3].state=true:powerExtension.value[3].state=false
-            apruleItem.wordanls ? powerExtension.value[4].state=true:powerExtension.value[4].state=false
-            apruleItem.dgistuid ? powerExtension.value[5].state=true:powerExtension.value[5].state=false
-            apruleItem.soksdata ? powerExtension.value[6].state=true:powerExtension.value[6].state=false
-            apruleItem.cloudas ? powerExtension.value[7].state=true:powerExtension.value[7].state=false
-            apruleItem.cligroup !==0 ? (powerExtension.value[8].state=true,powerExtension.value[8].value=apruleItem.cligroup):powerExtension.value[8].state=false
-            apruleItem.client_volume !==0 ? (powerExtension.value[9].state=true,powerExtension.value[9].value=apruleItem.client_volume):powerExtension.value[9].state=false
-            apruleItem.soknumber !==0 ? (powerExtension.value[10].state=true,powerExtension.value[10].value=apruleItem.soknumber):powerExtension.value[10].state=false
-            apruleItem.hasOwnProperty('irs') ? powerExtension.value[11].state=false:powerExtension.value[11].state=true
+            apruleItem.hdcam ? powerExtension.value[0].state=true:powerExtension.value[0].state=false //USB錄影支援
+            apruleItem.sokapp ? powerExtension.value[1].state=true:powerExtension.value[1].state=false //蘇格拉底議課APP
+            apruleItem.sokvdo ? powerExtension.value[2].state=true:powerExtension.value[2].state=false //蘇格拉底影片
+            apruleItem.sokdesk ? powerExtension.value[3].state=true:powerExtension.value[3].state=false //蘇格拉底桌面
+            apruleItem.sokrpt ? powerExtension.value[4].state=true:powerExtension.value[4].state=false //蘇格拉底報告
+            apruleItem.soksdata ? powerExtension.value[5].state=true:powerExtension.value[5].state=false //蘇格拉底小數據
+            apruleItem.ezs ? powerExtension.value[6].state=true:powerExtension.value[6].state=false //AI智能終端
+            apruleItem.wordanls ? powerExtension.value[7].state=true:powerExtension.value[7].state=false //AI文句分析
+            apruleItem.dgistuid ? powerExtension.value[8].state=true:powerExtension.value[8].state=false //電子學生證
+            apruleItem.cloudas ? powerExtension.value[9].state=true:powerExtension.value[9].state=false  //雲端診斷分析系統
+            apruleItem.cligroup !==0 ? (powerExtension.value[10].state=true,powerExtension.value[10].value=apruleItem.cligroup):powerExtension.value[10].state=false //分組數
+            apruleItem.client_volume !==0 ? (powerExtension.value[11].state=true,powerExtension.value[11].value=apruleItem.client_volume):powerExtension.value[11].state=false  //IRS連線授權數
+            apruleItem.soknumber !==0 ? (powerExtension.value[12].state=true,powerExtension.value[10].value=apruleItem.soknumber):powerExtension.value[12].state=false //議課人數
+            apruleItem.scorsys ? (powerExtension.value[13].state=true,powerExtension.value[13].value=apruleItem.soknumber):powerExtension.value[13].state=false //智慧評分系統
+            apruleItem.hasOwnProperty('irs') ? powerExtension.value[14].state=false:powerExtension.value[14].state=true  //IRS硬體遙控器
             item.apruleArr=powerExtension.value
         }
         //处理时间
@@ -644,12 +821,14 @@ function initdata() {
         let days = Math.floor(timeDifference / (24 * 60 * 60 ));
         console.log(days,'天数')
         item.intervalTime=days
-        item.startDateText=item.startDateText ? proxy.$common.timestampToTime(item.startDate):0
-        item.endDateText= item.endDateText? proxy.$common.timestampToTime(item.endDate):0
+        item.startDateText=item.startDate ? proxy.$common.timestampToTime(item.startDate):0
+        item.endDateText= item.endDate? proxy.$common.timestampToTime(item.endDate):0
         powerList.value.push(item)  
     })
+    console.log(powerList.value,'权益内容')
     //处理权益内 附加功能(HITeach附加 CC权限)
     let hiteachData=benefits.hiteach !==null ?benefits.hiteach:[] ; let ccData=benefits.hiteachcc !==null  ?benefits.hiteachcc:[]
+    console.log(hiteachData,ccData)
     if(hiteachData.length >0){
         hiteachData.forEach((item)=>{
             let funcKey=item.func;let startTime=proxy.$common.timestampToTime(item.get);let endTime=proxy.$common.timestampToTime(item.exp)
@@ -657,6 +836,7 @@ function initdata() {
                 funcKey === items.key ? (items.start=startTime,items.end=endTime,items.value=item.para,items.gets=item.get,items.exps=item.exp):''
             })
         })
+        console.log(subjoinData.value)
     }
     if(ccData.length >0 ){
         ccData.forEach((itemA)=>{
@@ -683,40 +863,98 @@ function initdata() {
     gaugedata.value.series[0].data[0].value=transitionUsed !==0 ? Math.round((transitionUsed/transitionTotal).toFixed(2)*100):0
     gaugedata.value.title[0].text=useGsize+' G'
     console.log(transitionUsed,transitionSuplus,transitionTeach,transitionTotal,'结果')
+
+    //处理上下一个
+    advancevalue.value.next=detailsData.value[transferNum.value+1]
+    loading.value=false
 }
 function bytesToGB(bytes) {
   const gb = bytes / (1024 * 1024 * 1024);
   return gb.toFixed(2); // 将结果保留两位小数
 }
 function init(){
+    loading.value=true
+    console.log(detailsData.value,transferNum.value,'查看IOT')
     //处理关于iot问题
-    detailsData.value[0].iot.hiteach.day ? 
-    (buttonSelect.value[0].click=true,detailsIot.value=detailsData.value[0].iot.hiteach.day):
-    detailsData.value[0].iot.hiteach.month ? 
-    (buttonSelect.value[1].click=true,detailsIot.value=detailsData.value[0].iot.hiteach.month):
-    detailsData.value[0].iot.hiteach.year ? 
-    (buttonSelect.value[2].click=true,detailsIot.value=detailsData.value[0].iot.hiteach.year):''
+    detailsData.value[transferNum.value].iot.hiteach.day !==null ? 
+    (buttonSelect.value[0].click=true,detailsIot.value=detailsData.value[transferNum.value].iot.hiteach.day,iotState.value=true):
+    detailsData.value[transferNum.value].iot.hiteach.month !==null ? 
+    (buttonSelect.value[1].click=true,detailsIot.value=detailsData.value[transferNum.value].iot.hiteach.month,iotState.value=true):
+    detailsData.value[transferNum.value].iot.hiteach.year !==null ? 
+    (buttonSelect.value[2].click=true,detailsIot.value=detailsData.value[transferNum.value].iot.hiteach.year,iotState.value=true):iotState.value=false
 
     //BTN显示问题
-    detailsData.value[0].iot.hiteach.day ? buttonSelect.value[0].disabled=false:buttonSelect.value[0].disabled=true
-    detailsData.value[0].iot.hiteach.month ? buttonSelect.value[1].disabled=false:buttonSelect.value[1].disabled=true
-    detailsData.value[0].iot.hiteach.year ? buttonSelect.value[2].disabled=false:buttonSelect.value[2].disabled=true
+    console.log(detailsData.value,'按钮问题')
+    detailsData.value[transferNum.value].iot.hiteach.day ? (buttonSelect.value[0].disabled=false):(buttonSelect.value[0].disabled=true,buttonSelect.value[0].click=false)
+    detailsData.value[transferNum.value].iot.hiteach.month ? (buttonSelect.value[1].disabled=false):(buttonSelect.value[1].disabled=true,buttonSelect.value[1].click=false)
+    detailsData.value[transferNum.value].iot.hiteach.year  ? (buttonSelect.value[2].disabled=false):(buttonSelect.value[2].disabled=true,buttonSelect.value[2].click=false)
 }
 function selectTime(value){
     console.log(value,'值')
     value =='day' ? 
-    (buttonSelect.value[0].click=true,buttonSelect.value[1].click=false,buttonSelect.value[2].click=false,detailsIot.value=detailsData.value[0].iot.hiteach.day):
+    (buttonSelect.value[0].click=true,buttonSelect.value[1].click=false,buttonSelect.value[2].click=false,detailsIot.value=detailsData.value[transferNum.value].iot.hiteach.day):
     value =='month' ?
-    (buttonSelect.value[1].click=true,buttonSelect.value[0].click=false,buttonSelect.value[2].click=false,detailsIot.value=detailsData.value[0].iot.hiteach.month):
+    (buttonSelect.value[1].click=true,buttonSelect.value[0].click=false,buttonSelect.value[2].click=false,detailsIot.value=detailsData.value[transferNum.value].iot.hiteach.month):
     value =='year' ? 
-    (buttonSelect.value[2].click=true,buttonSelect.value[0].click=false,buttonSelect.value[1].click=false,detailsIot.value=detailsData.value[0].iot.hiteach.year):''
+    (buttonSelect.value[2].click=true,buttonSelect.value[0].click=false,buttonSelect.value[1].click=false,detailsIot.value=detailsData.value[transferNum.value].iot.hiteach.year):''
 
     console.log(detailsIot.value,'值')
 }
+//切换用户 需要执行的内容
+function cutUser(){
+    loading.value=true
+    console.log(detailsData,'数据组')
+    ies5datas.value=detailsData.value[transferNum.value].ies5
+    sokratesData.value=detailsData.value[transferNum.value].sokrates
+    pointsData.value=detailsData.value[transferNum.value]
+    powerList.value=[]
+    initdata()
+    init()
+    setTimeout(()=>{loading.value=false},800)
+    that.$forceUpdate()
+    // let nowNums=transferNum.value
+    // if(nowNums+1 === detailsData.value.length){
+    //     advancevalue.value.next={}
+    //     advancevalue.value.last=detailsData.value[nowNums-1]
+    // }else if(nowNums.value !==0 && nowNums.value+1 !== detailsData.value.length){
+    //     advancevalue.value.next=detailsData.value[nowNums+1]
+    //     advancevalue.value.last=detailsData.value[nowNums-1]
+    // }else if(nowNums.value ===0){
+    //     advancevalue.value.next=detailsData.value[nowNums+1]
+    // }
+}
+//下一个用户
+function nextUser(){
+    console.log(transferNum,'值')
+    transferNum.value=Number(transferNum.value)+1
+    if(transferNum.value === detailsData.value.length){}
+}
+//上一个用户
+function lastUser(){
+    if(transferNum.value !==0){
+        transferNum.value=Number(transferNum.value)-1
+        console.log(transferNum.value,'页数')
+        ies5datas.value=detailsData.value[transferNum.value].ies5
+        sokratesData.value=detailsData.value[transferNum.value].sokrates
+        pointsData.value=detailsData.value[transferNum.value]
+    }
+}
 onMounted(() => {
     initdata()
 })
 init()
+watch(()=>transferNum.value,(newnum)=>{
+    console.log(newnum,'变化的数字')
+    // nextTick(() => {
+        cutUser()
+    // })
+})
+// watch(() => props.detailsData, (newValue) => {
+//     //   propValue.value = newValue;
+//     let datas={detailsData:newValue}
+//     init(datas)
+//     console.log(datas,'有数据进来')
+//   });
 </script>
 <style>
 .userdetails{
@@ -841,18 +1079,29 @@ init()
     color:#fff;
     font-size:14px;
 }
+
 .HiTeach{
-    background: linear-gradient(to top right, #7d82fe, #6fa5fe);
+    background: linear-gradient(to top right, #0093E9, #80D0C7);
 }
 .HiTA{
     background: linear-gradient(to top right, #ff6e72, #ff7390);
 }
-.IES{
-    background: linear-gradient(to top right, #ff8f64, #ffaa64); 
+.IES5{
+    background: linear-gradient(to top right, #FBAB7E, #F7CE68); 
 }
-.Socrates{
+.Sokrates{
     background: linear-gradient(to top right, #a55bfb, #bc5dfe); 
 }
+.SokAPP{
+    background: linear-gradient(to top right, #08AEEA, #2AF598); 
+}
+.IRS{
+    background: linear-gradient(to top right, #FBDA61, #FF5ACD); 
+}
+.Account{
+    background: linear-gradient(to top right, #FAACA8, #DDD6F3); 
+}
+
 .notenabled{
     background-color: #dcdaef;
 }
@@ -1003,7 +1252,7 @@ init()
 }
 .login-echart{
     width:100%;
-    height:40vh;
+    height:54vh;
     display: flex;
     align-items: center;
 }
@@ -1067,6 +1316,7 @@ init()
 .rightsbox-item-expansion div{
     line-height: 18px;
     padding-left: 4px;
+    margin-bottom: 3px;
 }
 .subjoin-item{
     margin-top:5px;
@@ -1089,7 +1339,7 @@ init()
     color:#909399;
 }
 .subjoin{
-    height:20vh;
+    height:25vh;
     line-height: 20px;
     color:#73767a;
     overflow: hidden;
@@ -1164,7 +1414,7 @@ init()
 }
 .logintotal-box-list{
     display: flex;
-    flex-wrap: wrap;
+    flex-wrap: nowrap;
     overflow: hidden;
     overflow-x: auto;
 }
@@ -1178,6 +1428,127 @@ init()
     margin-bottom: 5px;
     color:#606266;
 }
+.not-coupons{
+    display: flex;
+    height:90%;
+    align-items: center;
+    justify-content: center;
+    font-size:22px;
+    font-weight: 700;
+    color: #73767a;
+    /* line-height: 160px; */
+}
+.power-notdata{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size:22px;
+    font-weight: 700;
+    color: #73767a;
+    height: 30vh;
+}
+.expire{
+    color: #b1b3b8;
+}
+.groupdata{
+    line-height: 16px;
+    text-align: right;
+    font-size:14px;
+    color:#909399;
+    display: flex;
+    justify-content: right;
+    align-items: center;
+}
+.nowgroup-num,.totalgroup-num{
+    color:#409EFF;
+    margin:0px 3px;
+}
+
+.lastbtn {
+  width: 30px;
+  height: auto;
+  line-height: 20px;
+  /* position: absolute;
+  left: 0%;
+  top: 45%; */
+  opacity: 1;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: center;
+  align-items: center;
+  border-radius: 5px;
+  font-size: 14px;
+  padding: 5px;
+}
+.nextbtn {
+  width: 30px;
+  height: auto;
+  line-height: 20px;
+  /* position: absolute;
+  right: 0%;
+  top: 43%; */
+  opacity: 1;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: center;
+  align-items: center;
+  border-radius: 5px;
+  font-size: 14px;
+  padding: 5px;
+}
+.lastbtn:hover,
+.nextbtn:hover {
+  background-color: #dfe6e9;
+  opacity: 1;
+  box-shadow: rgba(6, 24, 44, 0.1) 0px 0px 0px 2px,
+    rgba(6, 24, 44, 0.1) 0px 4px 6px -1px,
+    rgba(255, 255, 255, 0.08) 0px 1px 0px inset;
+  cursor: pointer;
+}
+.lastbtn:hover .btn-ls-text,
+.nextbtn:hover .btn-ls-text {
+  opacity: 0.8;
+}
+.btn-ls-text {
+  margin-top: 3px;
+  color: #303a5d;
+  opacity: 0;
+}
+.last-btns {
+  width: 20px;
+  height: 20px;
+  vertical-align: -0.2em;
+  fill: currentColor;
+}
+.btn-ls-text p {
+  margin-bottom: 5px;
+}
+.next-school {
+  font-size: 12px;
+  color: #303a5d;
+  font-weight: bold;
+}
+.next-title {
+  font-size: 8px;
+  color: #34495e;
+}
+.entirety{
+    position: relative;
+}
+.prodlist{
+    height:60vh;
+    overflow: hidden;
+    overflow-y: auto;
+}
+.not-datas{
+    font-size:16px;
+    font-weight: 700;
+    color: #73767a;
+    line-height: 40px;
+}
+.login-total{
+    line-height: 40px;
+}
 </style>
 <style>
 .inquirebox-details .el-divider{
@@ -1192,4 +1563,7 @@ init()
 .login-total .el-overlay .el-dialog__header{
     padding:5px !important;
 }
+.recordbox-item .el-tag{
+    cursor: pointer;
+}
 </style>

+ 9 - 2
TEAMModelBI/ClientApp/src/view/userInquire/ies.vue

@@ -289,6 +289,10 @@
  onMounted(() => {
     initdatas()
 })
+watch(()=>props,(newvalue)=>{
+    console.log(newvalue,'有新值进入IES')
+    newvalue.iesdata ? (allschoolList.value=[],initdatas()):''
+},{deep:true})
  </script>
  <style scoped>
  .ies-content{
@@ -460,17 +464,20 @@
     padding: 1%;
     display: flex;
     flex-wrap: wrap;
+    height:64vh;
+    overflow: hidden;
+    overflow-y: auto;
  }
  .dialogschool-item{
-    width:25%;
+    width:30%;
     padding: 2% 1%;
     justify-content: center;
     align-items: center;
     border:1px solid #ccc;
     border-radius: 5px;
-    margin:0px 10px;
     position:relative;
     overflow: hidden;
+    margin:1%;
  }
  .dialogschool-item-top,.item-content-tile{
     text-align: center;

+ 55 - 7
TEAMModelBI/ClientApp/src/view/userInquire/index.vue

@@ -21,17 +21,17 @@
                 </template>
                 </el-input>
             </div>
-            <!-- <div class="recordbox" v-if="selecttypes==='precise'">
+            <div class="recordbox" v-if="selecttypes==='precise'">
                 <p>搜索记录:</p>
                 <div class="recordbox-item">
-                    <el-tag v-for="tag in tags" :key="tag.name" class="mx-1" closable :type="tag.type">
-                        {{ tag.name }}
+                    <el-tag v-for="tag in searchRecordsArr"  class="mx-1" closable type="''"  effect="light" @close="deleteLog(tag)" @click="searchvalue=tag">
+                        {{ tag }}
                     </el-tag>
                 </div>
             </div>
             <div class="recordbox" v-else="selecttypes ==='batch'">
                 <p>搜索结果:</p>
-            </div> -->
+            </div>
         </div>
     </div>
     <div class="inquirebox-details" v-else-if="pageShow ==='details'">
@@ -56,24 +56,72 @@ let searchvalue=ref('')
 let selecttypes = ref('precise')
 let searchResult=ref()
 let searchLoading=ref(false)
+const searchRecordsArr = ref(localStorage.getItem('searchRecords') ?  JSON.parse(localStorage.getItem('searchRecords')):[]);
 const backClicks=()=>{pageShow.value='default'}
+console.log(searchRecordsArr.value,'搜索记录')
 function seachSole(datavalue) {
     if(!searchvalue.value){
         ElMessage.info('请输入手机号码/ 醍魔豆账号 进行搜索!')
         return
     }
-    let data = {'tmids':[searchvalue.value]}
+    //处理TW用户 ID可能是以0开头的情况。删除掉开头的0
+    if(searchvalue.value.startsWith('0')){
+        searchvalue.value =searchvalue.value.substring(1)
+    }
+    //处理多名用户查询
+    let userArr=''
+    if(searchvalue.value.includes(',') || searchvalue.value.includes(',')){
+        searchvalue.value=searchvalue.value.replace(/,/g, ',');
+        userArr = searchvalue.value.split(',');
+    }
+    if(userArr.length >5){
+            ElMessage.info('同时查询人员不能大于5,请调整查询范围')
+            return
+    }
+    //let testdata=['1524738018','1595321354']
+    let data = ''
+    //let data={'tmids':testdata}
+    searchvalue.value.includes(',') || searchvalue.value.includes(',') ? data={'tmids':userArr}: data = {'tmids':[searchvalue.value]}
     console.log(data)
     searchLoading.value=true
+    let setData={
+        value:searchvalue.value,
+        type:searchvalue.value.includes(',') || searchvalue.value.includes(',') ? 'multiple':'only',
+        time:Date.now()
+    }
     proxy.$api.getUserdatas(data).then((res) => { 
         console.log(res, 'user back')
-        res.length >0 ? (searchResult.value=res,searchLoading.value=false,pageShow.value='details'):(ElMessage.error('暂无搜索到相关人员,请检查信息搜索'),searchLoading.value=false)
+        res.length >0 ? 
+        (searchResult.value=res,searchLoading.value=false,pageShow.value='details'):
+        (ElMessage.error('暂无搜索到相关人员,请检查信息搜索'),searchLoading.value=false)
+        //搜索记录
+        if(res.length >0){saveSearchRecord(searchvalue.value)}
     }).catch((err) => {
         searchLoading.value=false
         ElMessage.error('API异常,查询失败')
     })
     // pageShow.value='details'
- }
+}
+// 保存搜索记录到localStorage(重复搜索的只记录一个)
+function saveSearchRecord(keyword) {
+  let searchRecords = localStorage.getItem('searchRecords');
+  console.log(searchRecords,'存储数据')
+  !searchRecords ?searchRecords = []:searchRecords = JSON.parse(searchRecords);
+  if (!searchRecords.includes(keyword)) {
+    searchRecords.push(keyword);
+    searchRecordsArr.value.push(keyword)
+  }
+  localStorage.setItem('searchRecords', JSON.stringify(searchRecords));
+}
+function deleteLog(value){
+    console.log(value)
+    let parseSearchRecords=searchRecordsArr.value
+    console.log(parseSearchRecords,'数组内容')
+    let resultNum=parseSearchRecords.findIndex((item)=>{return item ===value})
+    console.log(resultNum,'数字')
+    resultNum !== -1 ? (searchRecordsArr.value.splice(resultNum,1)):''
+    localStorage.setItem('searchRecords', JSON.stringify(searchRecordsArr.value));
+}
 </script>
 <style scoped>
 .inquirebox{

+ 12 - 5
TEAMModelBI/ClientApp/src/view/userInquire/iot.vue

@@ -631,7 +631,8 @@
     // props.pattern.state ==='school' ? appearState.value='default': props.pattern.state ==='area' ? appearState.value='area':appearState.value='default'
     
     let propsbox=transfervalue? transfervalue:props
-    console.log(propsbox, '数据')
+    
+    console.log(propsbox,props,'数据1234')
     //学校基础信息
     // let { name, region, province, city, dist } = propsbox.detailsData.school
     // schoolData.value.name = appearState.value ==='default' ? name: appearState.value ==='area' ? propsbox.detailsData.name:''
@@ -717,13 +718,19 @@
   function backbtn () {
     $myemit('myback', 'default')
   }
+onMounted(() => {
   init()
-  watch(() => props.detailsData, (newValue) => {
+})
+  watch(() => props, (newValue) => {
+    console.log()
     //   propValue.value = newValue;
-    let datas={detailsData:newValue}
+    let datas={detailsData:newValue.detailsData}
     init(datas)
-    console.log(datas,'有数据进来')
-  });
+  },{deep:true});
+  watch(()=>props,(newdata)=>{
+    console.log(newdata,'9999999999999999')
+  })
+
   </script>
   <style  scoped>
   .details-analysis {

+ 17 - 3
TEAMModelBI/ClientApp/src/view/userInquire/socrates.vue

@@ -377,6 +377,8 @@ function initdatas(){
         presupposed.value.data.general_observation=user_channels.general_observation,
         presupposed.value.state=true)
         :presupposed.value.state=false
+    }else{
+        presupposed.value.state=false
     }
     //处理total数据
     primary.value[0].value=hiteach_data.total.t_data ? hiteach_data.total.t_data:0
@@ -412,22 +414,34 @@ function selectTime(values) {
         element.value === values ? element.click=true: element.click=false
     });
     if(values ==='week'){
+        console.log(hiteach_data.this_week.t_green,hiteach_data.this_month.t_green)
         proportiondata.value.title[0].text='占同月T绿灯比例'
-        proportiondata.value.title[1].text=Math.round((hiteach_data.this_week.t_green/hiteach_data.this_month.t_green).toFixed(2)*100)+'%'
+        proportiondata.value.title[1].text= hiteach_data.this_week.t_green !=0 ? Math.round((hiteach_data.this_week.t_green/hiteach_data.this_month.t_green).toFixed(2)*100)+'%':0+'%'
         proportiondata.value.series[0].data[0].value=Math.round((hiteach_data.this_week.t_green/hiteach_data.this_month.t_green).toFixed(2)*100)
         proportiondata.value.series[0].data[1].value=100-(Math.round((hiteach_data.this_week.t_green/hiteach_data.this_month.t_green).toFixed(2)*100))
     }else if(values ==='month'){
+        console.log(hiteach_data.this_month.t_green,hiteach_data.this_year.t_green)
         proportiondata.value.title[0].text='占同年T绿灯比例'
-        proportiondata.value.title[1].text=Math.round((hiteach_data.this_month.t_green/hiteach_data.this_year.t_green).toFixed(2)*100)+'%'
+        proportiondata.value.title[1].text=hiteach_data.this_month.t_green !=0 ? Math.round((hiteach_data.this_month.t_green/hiteach_data.this_year.t_green).toFixed(2)*100)+'%':0+'%'
         proportiondata.value.series[0].data[0].value=Math.round((hiteach_data.this_month.t_green/hiteach_data.this_year.t_green).toFixed(2)*100)
         proportiondata.value.series[0].data[1].value=100-(Math.round((hiteach_data.this_month.t_green/hiteach_data.this_year.t_green).toFixed(2)*100))
     }else if(values ==='year'){
+        console.log(hiteach_data.this_year.t_green,hiteach_data.total.t_green)
         proportiondata.value.title[0].text='占全部T绿灯比例'
-        proportiondata.value.title[1].text=Math.round((hiteach_data.this_year.t_green/hiteach_data.total.t_green).toFixed(2)*100)+'%'
+        proportiondata.value.title[1].text=hiteach_data.this_year.t_green && hiteach_data.total.t_green ? Math.round((hiteach_data.this_year.t_green/hiteach_data.total.t_green).toFixed(2)*100)+'%':0+'%'
         proportiondata.value.series[0].data[0].value=Math.round((hiteach_data.this_year.t_green/hiteach_data.total.t_green).toFixed(2)*100)
         proportiondata.value.series[0].data[1].value=100-(Math.round((hiteach_data.this_year.t_green/hiteach_data.total.t_green).toFixed(2)*100))
+    }else if(values ==='total'){
+        proportiondata.value.title[0].text='占全部T绿灯比例'
+        proportiondata.value.title[1].text='100%'
+        proportiondata.value.series[0].data[0].value=100
+        proportiondata.value.series[0].data[1].value=100-100
     }
 }
+watch(()=>props,(newvalue)=>{
+    console.log(newvalue,'有新值进入苏格拉底')
+    newvalue.sokratesdatas ? (initdatas(),zb.value = proportiondata.value):''
+},{deep:true})
  </script>
  <style scoped>
  .socrates-header,.socrates-auxiliary{

+ 7 - 2
TEAMModelBI/ClientApp/src/view/userInquire/ticket.vue

@@ -142,6 +142,10 @@ let gaindata = computed(() => {
  onMounted(() => {
     inidatas()
 })
+watch(()=>props,(newdata)=>{
+    console.log(newdata,'有新值进入票卷')
+    newdata.pointsandcoupons ? (ticketlist.value=[],inidatas()):''
+},{deep:true})
 </script>
 <style scoped>
 .ticket-header{
@@ -285,9 +289,10 @@ let gaindata = computed(() => {
     padding-top:25px;
 }
 .not-coupons{
-    font-size:16px;
+    font-size:18px;
     color: #73767a;
-    line-height: 120px;
+    line-height: 160px;
+    font-weight: 700;
 }
 /* .usebox{
     color:rgba(255,255,255,.9) !important;

+ 67 - 15
TEAMModelBI/ClientApp/src/view/userInquire/userdetail.vue

@@ -10,23 +10,26 @@
                                 <use :xlink:href="[item.state ? item.icon+'1':item.icon]"></use>
                             </svg>
                         </div>
+                        <div class="third-party-item" title="教育云">
+                            <img :src="specialBind" class="third-party-itemicon">
+                        </div>
                      </div>
                 </el-form-item>
                 <el-form-item label="用户积分">
                     <div class="user-from-integral">
-                        <span>58</span><span>/</span><span>78</span>
+                        <span>{{integralAndticket.integral.used}}</span><span>/</span><span>{{integralAndticket.integral.total}}</span>
                     </div>
                 </el-form-item>
                 <el-form-item label="用户票卷">
                     <div class="user-from-integral">
-                        <span>8</span><span>/</span><span>8</span>
+                        <span>{{integralAndticket.ticket.used}}</span><span>/</span><span>{{integralAndticket.ticket.total}}</span>
                     </div>
                 </el-form-item>
-                <el-form-item label="注册时间">
+                <!-- <el-form-item label="注册时间">
                     <div class="user-from-integral">
                         <span>2019-05-28</span>
                     </div>
-                </el-form-item>
+                </el-form-item> -->
                 <el-form-item label="账户语系">
                     <div class="user-from-integral">
                         <div v-show="!userdata.countrystate">
@@ -43,9 +46,9 @@
                               />
                             </el-select>
                         </div>
-                        <div class="redacticon">
+                        <!-- <div class="redacticon">
                             <el-icon size="20" @click="userdata.countrystate=true"><EditPen /></el-icon>
-                        </div>
+                        </div> -->
                     </div>
                 </el-form-item>
                 <el-form-item label="单位名称">
@@ -56,9 +59,9 @@
                         <div v-show="userdata.companystate">
                             <el-input v-model="userdata.company"  placeholder="公司/单位 名称" />
                         </div>
-                        <div class="redacticon">
+                        <!-- <div class="redacticon">
                             <el-icon size="20" @click="userdata.companystate=true"><EditPen /></el-icon>
-                        </div>
+                        </div> -->
                     </div>
                 </el-form-item>
                 <el-form-item label="单位类别">
@@ -76,9 +79,9 @@
                                 />
                             </el-select>
                         </div>
-                        <div class="redacticon">
+                        <!-- <div class="redacticon">
                             <el-icon size="20" @click="userdata.typestate=true"><EditPen /></el-icon>
-                        </div>
+                        </div> -->
                     </div>
                 </el-form-item>
                 <el-form-item label="职称">
@@ -89,9 +92,9 @@
                         <div v-show="userdata.professionalstate">
                             <el-input v-model="userdata.professional"  placeholder="职称" />
                         </div>
-                        <div class="redacticon">
+                        <!-- <div class="redacticon">
                             <el-icon size="20" @click="userdata.professionalstate=true"><EditPen /></el-icon>
-                        </div>
+                        </div> -->
                     </div>
                 </el-form-item>
                 <el-form-item class="submitbtn" v-show="userdata.countrystate || userdata.companystate || userdata.typestate || userdata.professionalstate">
@@ -108,6 +111,9 @@
  import { ref, getCurrentInstance, watch, h, nextTick, onMounted,defineEmits } from 'vue'
  import { EditPen, Back } from '@element-plus/icons-vue'
  const emits = defineEmits(['updateView'])
+ let props = defineProps({
+    detailsData: Object,
+})
  let userdata = ref({
       name: '',
       country: '',
@@ -120,9 +126,13 @@
       professionalstate:false,
  })
  let thridPartydata = ref([
-      { name: '微信', icon: '#icon-weixin', state: true, key: 'wechart' },
-      { name: '钉钉', icon: '#icon-dingding', state: true, key: 'dingding' },
+      { name: '微信', icon: '#icon-weixin', state: false, key:'wechart' },
+      { name: '钉钉', icon: '#icon-dingding', state: false, key:'ding' },
+      { name: 'Facebook', icon:'#icon-facebook', state: false, key:'facebook' },
+      { name: 'Google', icon:'#icon-google', state: false, key:'google' },
+      { name: 'Apple', icon:'#icon-logo_apple', state: false, key:'apple' },
  ])
+ let specialBind=ref(require('@/assets/img/notspecial-icon.png'))
  let options=ref( [
     {
       value: 'zh-cn',
@@ -137,6 +147,16 @@
       label: '简体',
     },
   ])
+ let integralAndticket=ref({
+    integral:{
+        used:0,
+        total:0,
+    },
+    ticket:{
+        used:0,
+        total:0,
+    }
+ })
 const optionsT = ref([
   {
     value: 'Option1',
@@ -165,7 +185,38 @@ function handleChange(value) {
  function backs() {
     console.log('123')
     emits('updateView',true);
- }
+}
+function inidatas(){
+    console.log(props,'用户详情')
+    let originalData=props?.detailsData
+    //处理绑定第三方
+    let {wechat,ding,facebook,google,apple,educloudtw,points,coupons,lang,unitName,jobTitle,unitType}=originalData
+    wechat ? thridPartydata.value[0].state=true:thridPartydata.value[0].state=false
+    ding ? thridPartydata.value[1].state=true:thridPartydata.value[1].state=false
+    facebook ? thridPartydata.value[2].state=true:thridPartydata.value[2].state=false
+    google ? thridPartydata.value[3].state=true:thridPartydata.value[3].state=false
+    apple ? thridPartydata.value[4].state=true:thridPartydata.value[4].state=false
+    educloudtw ? specialBind.value=require('@/assets/img/special-icon.png'):specialBind.value=require('@/assets/img/notspecial-icon.png')
+    //积分票卷
+    integralAndticket.value.integral.used=points.balance
+    integralAndticket.value.integral.total=points.points
+    integralAndticket.value.ticket.used=coupons.length
+    integralAndticket.value.ticket.total=coupons.length
+    //语系 公司 职称
+    userdata.value.country=lang ==='zh-cn' ? '中文简体':lang ==='zh-tw' ?'中文繁体':'英语'
+    userdata.value.company=unitName
+    userdata.value.type =unitType == '1'? '基礎教育機構':
+    unitType =='2' ? 中等教育機構:unitType=='3' ? '高等教育機構':unitType=='4' ? '政府單位機構':unitType=='5' ? 'NGO機構':
+    unitType =='6' ? '企業機構':unitType=='7' ? '其他':unitType=='8' ? '學前教育':unitType=='9' ? '特殊教育':''
+    userdata.value.professional=jobTitle
+}
+onMounted(() => {
+    inidatas()
+})
+watch(()=>props,(newdata)=>{
+    console.log(newdata,'新值-进阶数据')
+    newdata.detailsData ? inidatas():''
+},{deep:true})
  </script>
  <style scoped>
  .user-forward{
@@ -186,6 +237,7 @@ function handleChange(value) {
     overflow: hidden;
     margin-right: 25px;
     margin-left: 0px;
+    cursor: pointer;
  }
  .third-party{
     display: flex;

+ 81 - 80
TEAMModelBI/Controllers/BINormal/BatchAreaController.cs

@@ -598,31 +598,27 @@ namespace TEAMModelBI.Controllers.BINormal
                 #endregion
 
                 //执行复制操作
-                BatchCopyFile batchCopyFile = new BatchCopyFile();
-                batchCopyFile.blobCntr = "teammodelos";
-                batchCopyFile.oldFileName = $"{oldStandard}";
-                batchCopyFile.newFileName = $"{standard}";
-                batchCopyFile.tmdid = $"{_tmdId}";
-                batchCopyFile.tmdIds = new List<string> { $"{ _tmdId}" };
-                batchCopyFile.codeKey = partitionCode;
-                batchCopyFile.tmdName = $"{_tmdName}";
-                var messageBatchCopyFile = new ServiceBusMessage(batchCopyFile.ToJsonString());
-                messageBatchCopyFile.ApplicationProperties.Add("name", "CopyStandardFile");
-                //var activeTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
-
-                try
-                {
-                    //await  _serviceBus.GetServiceBusClient().SendMessageAsync(activeTask, messageBatchCopyFile);
-                    await serBusClient.SendMessageAsync(activeTask, messageBatchCopyFile);
-                }
-                catch (Exception)
-                {
-                    return Ok(new { state = 201, msg = "能力点复制成功,复制能力点的文件失败," });
-                }
- 
-
-            
-              
+                //去除新建区,复制能力点文件
+                //BatchCopyFile batchCopyFile = new BatchCopyFile();
+                //batchCopyFile.blobCntr = "teammodelos";
+                //batchCopyFile.oldFileName = $"{oldStandard}";
+                //batchCopyFile.newFileName = $"{standard}";
+                //batchCopyFile.tmdid = $"{_tmdId}";
+                //batchCopyFile.tmdIds = new List<string> { $"{ _tmdId}" };
+                //batchCopyFile.codeKey = partitionCode;
+                //batchCopyFile.tmdName = $"{_tmdName}";
+                //var messageBatchCopyFile = new ServiceBusMessage(batchCopyFile.ToJsonString());
+
+                //messageBatchCopyFile.ApplicationProperties.Add("name", "CopyStandardFile");
+
+                //try
+                //{
+                //    await serBusClient.SendMessageAsync(activeTask, messageBatchCopyFile);
+                //}
+                //catch (Exception)
+                //{
+                //    return Ok(new { state = 201, msg = "能力点复制成功,复制能力点的文件失败," });
+                //}
                 //保存操作记录
                 //await _azureStorage.SaveBILog("area-add", $"{_tmdName}【{_tmdId}】已操作创区功能模块:{name},当前标准【{standard}】,复制的微能力点:{tempStandard}", _dingDing, httpContext: HttpContext);
                 await AzureStorageBlobExtensions.SaveBILog(blobClient, tableClient, "area-add", $"{_tmdName}【{_tmdId}】已操作创区功能模块:{name},当前标准【{standard}】,复制的微能力点:{tempStandard}", _dingDing, httpContext: HttpContext);
@@ -691,23 +687,25 @@ namespace TEAMModelBI.Controllers.BINormal
 
                 string sqlCheckRep =  $"SELECT c.id FROM c WHERE c.shortCode = '{shortCode}'";
                 var _azureCosmosClientCsv2Read = _azureCosmos.GetCosmosClient(name: "CoreServiceV2CnRead");
-                await foreach (var item in _azureCosmosClientCsv2Read.GetContainer("Core", "School").GetItemQueryStreamIterator(queryText: sqlCheckRep, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("district") })) 
-                {
-                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetInt16() > 0)
-                    {
-                        return Ok(new { state = 1, message = "此学区简码与其他 [学区] 简码相同请检查!" });
-                    }                    
-                }
-                await foreach (var item in _azureCosmosClientCsv2Read.GetContainer("Core", "School").GetItemQueryStreamIterator(queryText: sqlCheckRep, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("base") }))
-                {
-                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetInt16() > 0)
-                    {
-                        return Ok(new { state = 1, message = "此学区简码与其他 [学校] 简码相同请检查!" });
-                    }
-                }
-
+                //學校資料庫驗證 [式樣待確認,先封印]
+                ///學區簡碼重複驗證
+                //await foreach (var item in _azureCosmosClientCsv2Read.GetContainer("Core", "School").GetItemQueryStreamIterator(queryText: sqlCheckRep, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("district") })) 
+                //{
+                //    using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                //    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetInt16() > 0)
+                //    {
+                //        return Ok(new { state = 1, message = "此学区简码与其他 [学区] 简码相同请检查!" });
+                //    }                    
+                //}
+                ///學校簡碼重複驗證
+                //await foreach (var item in _azureCosmosClientCsv2Read.GetContainer("Core", "School").GetItemQueryStreamIterator(queryText: sqlCheckRep, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("base") }))
+                //{
+                //    using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                //    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetInt16() > 0)
+                //    {
+                //        return Ok(new { state = 1, message = "此学区简码与其他 [学校] 简码相同请检查!" });
+                //    }
+                //}
 
                 //DB值更新
                 if (!string.IsNullOrWhiteSpace(name)) area.name = name;
@@ -951,25 +949,27 @@ namespace TEAMModelBI.Controllers.BINormal
                 _coreAPIHttpService.PushNotify(new List<IdNameCode> { new IdNameCode { id = targetTeacher.id, name = targetTeacher.name, code = targetTeacher.lang } }, "copy-file_area", Constant.NotifyType_IES5_Management, new Dictionary<string, object> { { "tmdname", $"{_tmdName}" } }, _option.Location, _configuration, _dingDing, _environment.ContentRootPath);
 
                 //执行复制操作
-                BatchCopyFile batchCopyFile = new();
-                batchCopyFile.blobCntr = "teammodelos";
-                batchCopyFile.oldFileName = $"{_newStandard}";
-                batchCopyFile.newFileName = $"{_oldStandard}";
-                batchCopyFile.tmdid = $"{_tmdId}";
-                batchCopyFile.tmdIds = new List<string> { $"{ _tmdId}" };
-                batchCopyFile.codeKey = partitionCode;
-                batchCopyFile.tmdName = $"{_tmdName}";
-                var messageBatchCopyFile = new ServiceBusMessage(batchCopyFile.ToJsonString());
-                messageBatchCopyFile.ApplicationProperties.Add("name", "CopyStandardFile");  
-                try
-                {
-                    //await _serviceBus.GetServiceBusClient().SendMessageAsync(activeTask, messageBatchCopyFile);  //先执行删除操作,在执行复制  单一
-                    await serBusClient.SendMessageAsync(activeTask, messageBatchCopyFile);  //先执行删除操作,在执行复制
-                }
-                catch (Exception)
-                {
-                    return Ok(new { state = 201 ,msg = "能力点复制成功,复制能力点的文件失败," });
-                }
+
+                //去除新建区,复制能力点文件
+                //BatchCopyFile batchCopyFile = new();
+                //batchCopyFile.blobCntr = "teammodelos";
+                //batchCopyFile.oldFileName = $"{_newStandard}";
+                //batchCopyFile.newFileName = $"{_oldStandard}";
+                //batchCopyFile.tmdid = $"{_tmdId}";
+                //batchCopyFile.tmdIds = new List<string> { $"{ _tmdId}" };
+                //batchCopyFile.codeKey = partitionCode;
+                //batchCopyFile.tmdName = $"{_tmdName}";
+                //var messageBatchCopyFile = new ServiceBusMessage(batchCopyFile.ToJsonString());
+                //messageBatchCopyFile.ApplicationProperties.Add("name", "CopyStandardFile");  
+                //try
+                //{
+                     
+                //    await serBusClient.SendMessageAsync(activeTask, messageBatchCopyFile);  //先执行删除操作,在执行复制
+                //}
+                //catch (Exception)
+                //{
+                //    return Ok(new { state = 201 ,msg = "能力点复制成功,复制能力点的文件失败," });
+                //}
 
               
                 //保存操作记录
@@ -1285,25 +1285,26 @@ namespace TEAMModelBI.Controllers.BINormal
                         string partitionCode = "DelBeforeCopyAbility-mark";
 
                         //执行复制操作
-                        BatchCopyFile batchCopyFile = new();
-                        batchCopyFile.blobCntr = "teammodelos";
-                        batchCopyFile.oldFileName = $"{newstand.standard}";
-                        batchCopyFile.newFileName = $"{area.standard}";
-                        batchCopyFile.tmdid = $"{_tmdId}";
-                        batchCopyFile.tmdIds = new List<string> { $"{_tmdId}" };
-                        batchCopyFile.codeKey = partitionCode;
-                        batchCopyFile.tmdName = $"{_tmdName}";
-                        var messageBatchCopyFile = new ServiceBusMessage(batchCopyFile.ToJsonString());
-                        messageBatchCopyFile.ApplicationProperties.Add("name", "CopyStandardFile");
-                        try
-                        {
-                            //await _serviceBus.GetServiceBusClient().SendMessageAsync(activeTask, messageBatchCopyFile);  //先执行删除操作,在执行复制  单一
-                            await serBusClient.SendMessageAsync(activeTask, messageBatchCopyFile);  //先执行删除操作,在执行复制
-                        }
-                        catch (Exception)
-                        {
-                            return Ok(new { state = 201, msg = "能力点复制成功,复制能力点的文件失败," });
-                        }
+                        //去除新建区,复制能力点文件
+                        //BatchCopyFile batchCopyFile = new();
+                        //batchCopyFile.blobCntr = "teammodelos";
+                        //batchCopyFile.oldFileName = $"{newstand.standard}";
+                        //batchCopyFile.newFileName = $"{area.standard}";
+                        //batchCopyFile.tmdid = $"{_tmdId}";
+                        //batchCopyFile.tmdIds = new List<string> { $"{_tmdId}" };
+                        //batchCopyFile.codeKey = partitionCode;
+                        //batchCopyFile.tmdName = $"{_tmdName}";
+                        //var messageBatchCopyFile = new ServiceBusMessage(batchCopyFile.ToJsonString());
+                        //messageBatchCopyFile.ApplicationProperties.Add("name", "CopyStandardFile");
+                        //try
+                        //{
+                        //    //await _serviceBus.GetServiceBusClient().SendMessageAsync(activeTask, messageBatchCopyFile);  //先执行删除操作,在执行复制  单一
+                        //    await serBusClient.SendMessageAsync(activeTask, messageBatchCopyFile);  //先执行删除操作,在执行复制
+                        //}
+                        //catch (Exception)
+                        //{
+                        //    return Ok(new { state = 201, msg = "能力点复制成功,复制能力点的文件失败," });
+                        //}
                     }
 
                     StandardFile saveFile = new();

+ 16 - 1
TEAMModelBI/Controllers/BIProductAnalysis/ProductAnalysisController.cs

@@ -175,6 +175,16 @@ namespace TEAMModelBI.Controllers.ProductAnalysis
                 string dist = (jsonElement.TryGetProperty("dist", out JsonElement distJobj)) ? distJobj.GetString() : string.Empty; //區
                 List<string> areaIds = (jsonElement.TryGetProperty("areaIds", out JsonElement areaIdsJobj)) ? areaIdsJobj.ToObject<List<string>>() : new List<string>(); //學區ID(array)
                 bool hasVirtual = (jsonElement.TryGetProperty("virtual", out JsonElement virtualJobj)) ? virtualJobj.GetBoolean() : true; //是否取得虛擬學校
+                //國際站欄位調整
+                if(_option.Location.Contains("Global"))
+                {
+                    if(string.IsNullOrWhiteSpace(region) && !string.IsNullOrWhiteSpace(province))
+                    {
+                        region = province;
+                        province = string.Empty;
+                        dist = string.Empty;
+                    }
+                }
                 //地區特殊字去除
                 comeRemoveStr.ForEach(c => { region = region.Replace(c, ""); });
                 comeRemoveStr.ForEach(c => { province = province.Replace(c, ""); });
@@ -183,6 +193,11 @@ namespace TEAMModelBI.Controllers.ProductAnalysis
 
                 //CosmosDB資料取得
                 List<SimpleSchoolInfo> result = new List<SimpleSchoolInfo>();
+                ///檢索條件全無對策
+                if(schoolIds.Count.Equals(0) && string.IsNullOrWhiteSpace(region) && string.IsNullOrWhiteSpace(province) && string.IsNullOrWhiteSpace(city) && string.IsNullOrWhiteSpace(dist) && areaIds.Count.Equals(0))
+                {
+                    return Ok(new { state = 200, data = result });
+                }
                 string schIdListStr = JsonSerializer.Serialize(schoolIds);
                 string areaIdsListStr = JsonSerializer.Serialize(areaIds);
                 string Sql = $"SELECT c.id, c.name, c.region, c.province, c.city, c.dist, c.areaId FROM c WHERE (c.pk = 'Base' OR c.pk = 'School')";
@@ -232,7 +247,7 @@ namespace TEAMModelBI.Controllers.ProductAnalysis
             }
         }
 
-        public List<string> comeRemoveStr = new List<string>() { "省", "市", "区", "州", "县", "旗", "盟", "自治", "區", "縣" };
+        public List<string> comeRemoveStr = new List<string>() { "省", "市", "区", "州", "县", "旗", "盟", "自治", "地區", "區", "縣" };
         private class SimpleSchoolInfo
         {
             public string id { get; set; }

+ 30 - 7
TEAMModelBI/Controllers/BITmid/TmidController.cs

@@ -73,7 +73,7 @@ namespace TEAMModelBI.Controllers.BITmid
                 Dictionary<string, TmidStics> tmidDic = new();
 
                 QueryDefinition query =
-                       new QueryDefinition(@"SELECT c.id, c.name, c.mobile, c.mail FROM c WHERE (ARRAY_CONTAINS(@key, c.id) OR ARRAY_CONTAINS(@key, c.mobile))")
+                       new QueryDefinition(@"SELECT c.id, c.name, c.picture, c.mobile, c.mail, c.lang, c.wechat, c.facebook, c.google, c.ding, c.apple, c.educloudtw, c.ts FROM c WHERE (ARRAY_CONTAINS(@key, c.id) OR ARRAY_CONTAINS(@key, c.mobile))")
                        .WithParameter("@key", tmids);
                 await foreach (var item in cosmosClientCsv2
                             .GetContainer("Core", "ID2")
@@ -88,10 +88,17 @@ namespace TEAMModelBI.Controllers.BITmid
                             if(!tmids.Contains(id)) tmids.Add(id);
                             //基本資料
                             TmidStics tmidStics = (tmidDic.ContainsKey(id)) ? tmidDic[id] : new() { id = id };
-                            string tmidName = doc.GetProperty("name").GetString();
-                            string tmidMobile = GenDataMask(doc.GetProperty("mobile").GetString(), "mobile");
-                            string tmidMail = GenDataMask(doc.GetProperty("mail").GetString(), "mail");
-
+                            tmidStics.name = doc.GetProperty("name").GetString();
+                            tmidStics.picture = doc.GetProperty("picture").GetString();
+                            tmidStics.mobile = GenDataMask(doc.GetProperty("mobile").GetString(), "mobile");
+                            tmidStics.mail = GenDataMask(doc.GetProperty("mail").GetString(), "mail");
+                            tmidStics.lang = (doc.TryGetProperty("lang", out JsonElement lang)) ? lang.GetString() : string.Empty;
+                            tmidStics.wechat = (doc.TryGetProperty("wechat", out JsonElement wechat) && !string.IsNullOrWhiteSpace(wechat.GetString())) ? true : false;
+                            tmidStics.facebook = (doc.TryGetProperty("facebook", out JsonElement facebook) && !string.IsNullOrWhiteSpace(facebook.GetString())) ? true : false;
+                            tmidStics.google = (doc.TryGetProperty("google", out JsonElement google) && !string.IsNullOrWhiteSpace(google.GetString())) ? true : false;
+                            tmidStics.ding = (doc.TryGetProperty("ding", out JsonElement ding) && !string.IsNullOrWhiteSpace(ding.GetString())) ? true : false;
+                            tmidStics.apple = (doc.TryGetProperty("apple", out JsonElement apple) && !string.IsNullOrWhiteSpace(apple.GetString())) ? true : false;
+                            tmidStics.ts = (doc.TryGetProperty("ts", out JsonElement ts)) ? ts.GetInt64() : 0;
                             //票券
                             var usersCoupons = tableCouponClient.Get<DynamicTableEntity>(id);
                             foreach (var coupon in usersCoupons)
@@ -140,7 +147,7 @@ namespace TEAMModelBI.Controllers.BITmid
                 }
 
                 //ID進階資料
-                query = new QueryDefinition(@"SELECT c.id, c.name, c.mobile, c.mail, c.country, c.province, c.city, c.schoolCode, c.schoolCodeW FROM c WHERE (ARRAY_CONTAINS(@key, c.id) OR ARRAY_CONTAINS(@key, c.mobile))")
+                query = new QueryDefinition(@"SELECT c.id, c.name, c.mobile, c.mail, c.country, c.province, c.city, c.schoolCode, c.schoolCodeW, c.unitType, c.unitName, c.jobTitle FROM c WHERE (ARRAY_CONTAINS(@key, c.id) OR ARRAY_CONTAINS(@key, c.mobile))")
                        .WithParameter("@key", tmids);
                 await foreach (var item in cosmosClientCsv2
                             .GetContainer("Core", "ID2")
@@ -161,6 +168,9 @@ namespace TEAMModelBI.Controllers.BITmid
                             tmidStics.city = doc.GetProperty("city").GetString();
                             tmidStics.schoolCode = (doc.TryGetProperty("schoolCode", out JsonElement schCode)) ? schCode.GetString() : string.Empty;
                             tmidStics.schoolCodeW = (doc.TryGetProperty("schoolCodeW", out JsonElement schCodeW)) ? schCodeW.GetString() : string.Empty;
+                            tmidStics.unitType = (doc.TryGetProperty("unitType", out JsonElement unitType)) ? unitType.GetString() : string.Empty;
+                            tmidStics.unitName = (doc.TryGetProperty("unitName", out JsonElement unitName)) ? unitName.GetString() : string.Empty;
+                            tmidStics.jobTitle = (doc.TryGetProperty("jobTitle", out JsonElement jobTitle)) ? jobTitle.GetString() : string.Empty;
                         }
                     }
                 }
@@ -484,7 +494,7 @@ namespace TEAMModelBI.Controllers.BITmid
         public async Task<TmidAnalysisCal> getTMIDIotData(CosmosClient cosmosClientIes5, string tmid, string toolType, string dateUnit, int year, int month, int day, long from, long to)
         {
             TmidAnalysisCal result = new TmidAnalysisCal();
-            List<string> calPropList = new List<string>() { "lessonRecord", "useIES", "useIES5Resource", "useWebIrs", "useDeviceIrs", "useHaboard", "useHita", "lessonLengMin", "lessonLeng0", "stuShow", "stuLessonLengMin", "tGreen", "lTypeCoop", "lTypeIact", "lTypeMis", "lTypeTst", "lTypeDif", "lTypeNone", "lessonCnt928", "lessonCntId", "lessonCntDevice", "lessonCntIdDevice", "mission", "missionFin", "item", "interact", "sendSok" }; //要計算的ProdAnalysis欄位列表
+            List<string> calPropList = new List<string>() { "lessonRecord", "useIES", "useIES5Resource", "useWebIrs", "useDeviceIrs", "useHaboard", "useHita", "lessonLengMin", "lessonLeng0", "stuShow", "stuLessonLengMin", "tGreen", "tLesson", "lTypeCoop", "lTypeIact", "lTypeMis", "lTypeTst", "lTypeDif", "lTypeNone", "lessonCnt928", "lessonCntId", "lessonCntDevice", "lessonCntIdDevice", "mission", "missionFin", "item", "interact", "sendSok" }; //要計算的ProdAnalysis欄位列表
             string strQuery = $"SELECT * FROM c WHERE c.tmid = '{tmid}' AND c.toolType = '{toolType}'";
             var qryOption = new QueryRequestOptions() { PartitionKey = new PartitionKey("TmidAnalysis") };
             if (!string.IsNullOrWhiteSpace(dateUnit)) strQuery += $" AND c.dateUnit = '{dateUnit}'";
@@ -526,6 +536,7 @@ namespace TEAMModelBI.Controllers.BITmid
                 result.deviceAuth = result.deviceAuthList.Count;
                 result.tmidList = result.tmidList.Union(tmidAnalysis.tmidList).ToList();
                 result.tmidCnt = result.tmidList.Count;
+                result.verList = result.verList.Union(tmidAnalysis.verList).ToList();
             }
             if (string.IsNullOrWhiteSpace(result.tmid)) result = null;
             return result;
@@ -538,6 +549,7 @@ namespace TEAMModelBI.Controllers.BITmid
         {
             public string id { get; set; }
             public string name { get; set; }
+            public string picture { get; set; }
             public string mobile { get; set; }
             public string mail { get; set; }
             public string country { get; set; }
@@ -545,6 +557,10 @@ namespace TEAMModelBI.Controllers.BITmid
             public string city { get; set; }
             public string schoolCode { get; set; }
             public string schoolCodeW { get; set; }
+            public string lang { get; set; }
+            public string unitType { get; set; } //1:基礎教育機構(K-小學) 2:中等教育機構(國中、高中/職) 3:高等教育機構 4:政府單位機構 5:NGO機構 6:企業機構 7:其他 8:學前教育 9:特殊教育
+            public string unitName { get; set; }
+            public string jobTitle { get; set; }
             public TmidSticsIes5 ies5 { get; set; } = new(); //IES統計資料
             public TmidPoints points { get; set; } = new();
             public TmidSokrates sokrates { get; set; } = new();
@@ -553,6 +569,13 @@ namespace TEAMModelBI.Controllers.BITmid
             public List<TmidLoginTime> login { get; set; } = new();
             public List<object> prod { get; set; } = new();
             public TmidIot iot { get; set; } = new();
+            public bool wechat { get; set; }
+            public bool facebook { get; set; }
+            public bool google { get; set; }
+            public bool ding { get; set; }
+            public bool apple { get; set; }
+            public bool educloudtw { get; set; }
+            public long ts { get; set; } //資料最終變更時間
         }
         //TMID統計 IES5資訊
         private class TmidSticsIes5

+ 20 - 21
TEAMModelBI/Controllers/RepairApi/InitialAreaController.cs

@@ -262,27 +262,26 @@ namespace TEAMModelBI.Controllers.RepairApi
                 }
 
                 //执行复制操作
-                BatchCopyFile batchCopyFile = new();
-                batchCopyFile.blobCntr = "teammodelos";
-                batchCopyFile.oldFileName = $"{area.standard}";
-                batchCopyFile.newFileName = $"{standard}";
-                batchCopyFile.tmdid = $"{_tmdId}";
-                batchCopyFile.tmdIds = new List<string> { $"{_tmdId}" };
-                batchCopyFile.codeKey = partitionCode;
-                batchCopyFile.tmdName = $"{_tmdName}";
-                var messageBatchCopyFile = new ServiceBusMessage(batchCopyFile.ToJsonString());
-                messageBatchCopyFile.ApplicationProperties.Add("name", "CopyStandardFile");
-                //var activeTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
-
-                try
-                {
-                    await _serviceBus.GetServiceBusClient().SendMessageAsync(activeTask, messageBatchCopyFile);
-                    await serBusClient.SendMessageAsync(activeTask, messageBatchCopyFile);
-                }
-                catch (Exception)
-                {
-                    return Ok(new { state = 201, msg = "能力点复制成功,复制能力点的文件失败," });
-                }
+                //BatchCopyFile batchCopyFile = new();
+                //batchCopyFile.blobCntr = "teammodelos";
+                //batchCopyFile.oldFileName = $"{area.standard}";
+                //batchCopyFile.newFileName = $"{standard}";
+                //batchCopyFile.tmdid = $"{_tmdId}";
+                //batchCopyFile.tmdIds = new List<string> { $"{_tmdId}" };
+                //batchCopyFile.codeKey = partitionCode;
+                //batchCopyFile.tmdName = $"{_tmdName}";
+                //去除新建区,复制能力点文件
+                //var messageBatchCopyFile = new ServiceBusMessage(batchCopyFile.ToJsonString());
+                //messageBatchCopyFile.ApplicationProperties.Add("name", "CopyStandardFile");
+                //try
+                //{
+                //    await _serviceBus.GetServiceBusClient().SendMessageAsync(activeTask, messageBatchCopyFile);
+                //    await serBusClient.SendMessageAsync(activeTask, messageBatchCopyFile);
+                //}
+                //catch (Exception)
+                //{
+                //    return Ok(new { state = 201, msg = "能力点复制成功,复制能力点的文件失败," });
+                //}
  
             }
 

+ 0 - 113
TEAMModelBI/Properties/ServiceDependencies/teammodelbi-rc - Web Deploy/profile.arm.json

@@ -1,113 +0,0 @@
-{
-  "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
-  "contentVersion": "1.0.0.0",
-  "metadata": {
-    "_dependencyType": "compute.appService.windows"
-  },
-  "parameters": {
-    "resourceGroupName": {
-      "type": "string",
-      "defaultValue": "TEAMModelChengdu",
-      "metadata": {
-        "description": "Name of the resource group for the resource. It is recommended to put resources under same resource group for better tracking."
-      }
-    },
-    "resourceGroupLocation": {
-      "type": "string",
-      "defaultValue": "",
-      "metadata": {
-        "description": "Location of the resource group. Resource groups could have different location than resources, however by default we use API versions from latest hybrid profile which support all locations for resource types we support."
-      }
-    },
-    "resourceName": {
-      "type": "string",
-      "defaultValue": "rc",
-      "metadata": {
-        "description": "Name of the main resource to be created by this template."
-      }
-    },
-    "resourceLocation": {
-      "type": "string",
-      "defaultValue": "[parameters('resourceGroupLocation')]",
-      "metadata": {
-        "description": "Location of the resource. By default use resource group's location, unless the resource provider is not supported there."
-      }
-    }
-  },
-  "variables": {
-    "appServicePlan_name": "[concat('Plan', uniqueString(concat(parameters('resourceName'), subscription().subscriptionId)))]",
-    "appServicePlan_ResourceId": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', parameters('resourceGroupName'), '/providers/Microsoft.Web/serverFarms/', variables('appServicePlan_name'))]"
-  },
-  "resources": [
-    {
-      "type": "Microsoft.Resources/resourceGroups",
-      "name": "[parameters('resourceGroupName')]",
-      "location": "[parameters('resourceGroupLocation')]",
-      "apiVersion": "2019-10-01"
-    },
-    {
-      "type": "Microsoft.Resources/deployments",
-      "name": "[concat(parameters('resourceGroupName'), 'Deployment', uniqueString(concat(parameters('resourceName'), subscription().subscriptionId)))]",
-      "resourceGroup": "[parameters('resourceGroupName')]",
-      "apiVersion": "2019-10-01",
-      "dependsOn": [
-        "[parameters('resourceGroupName')]"
-      ],
-      "properties": {
-        "mode": "Incremental",
-        "template": {
-          "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
-          "contentVersion": "1.0.0.0",
-          "resources": [
-            {
-              "location": "[parameters('resourceLocation')]",
-              "name": "[parameters('resourceName')]",
-              "type": "Microsoft.Web/sites",
-              "apiVersion": "2015-08-01",
-              "tags": {
-                "[concat('hidden-related:', variables('appServicePlan_ResourceId'))]": "empty"
-              },
-              "dependsOn": [
-                "[variables('appServicePlan_ResourceId')]"
-              ],
-              "kind": "app",
-              "properties": {
-                "name": "[parameters('resourceName')]",
-                "kind": "app",
-                "httpsOnly": true,
-                "reserved": false,
-                "serverFarmId": "[variables('appServicePlan_ResourceId')]",
-                "siteConfig": {
-                  "metadata": [
-                    {
-                      "name": "CURRENT_STACK",
-                      "value": "dotnetcore"
-                    }
-                  ]
-                }
-              },
-              "identity": {
-                "type": "SystemAssigned"
-              }
-            },
-            {
-              "location": "[parameters('resourceLocation')]",
-              "name": "[variables('appServicePlan_name')]",
-              "type": "Microsoft.Web/serverFarms",
-              "apiVersion": "2015-08-01",
-              "sku": {
-                "name": "S1",
-                "tier": "Standard",
-                "family": "S",
-                "size": "S1"
-              },
-              "properties": {
-                "name": "[variables('appServicePlan_name')]"
-              }
-            }
-          ]
-        }
-      }
-    }
-  ]
-}

+ 3 - 3
TEAMModelBI/TEAMModelBI.csproj

@@ -65,9 +65,9 @@
 		<SpaRoot>ClientApp\</SpaRoot>
 		<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
 		<UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
-		<Version>5.2311.1</Version>
-		<AssemblyVersion>5.2311.1.1</AssemblyVersion>
-		<FileVersion>5.2311.1.1</FileVersion>
+		<Version>5.2311.15</Version>
+		<AssemblyVersion>5.2311.15.1</AssemblyVersion>
+		<FileVersion>5.2311.15.1</FileVersion>
 		<Description>TEAMModelBI(BI)</Description>
 		<PackageReleaseNotes>BI版本说明版本切换标记2022000908</PackageReleaseNotes>
 		<PackageId>TEAMModelBI</PackageId>

+ 0 - 8
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/100.0.4889.0.manifest

@@ -1,8 +0,0 @@
-<assembly
-  xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
-  <assemblyIdentity
-      name='100.0.4889.0'
-      version='100.0.4889.0'
-      type='win32'/>
-  <file name='chrome_elf.dll'/>
-</assembly>

BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/D3DCompiler_47.dll


+ 0 - 1
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/First Run

@@ -1 +0,0 @@
-krome 

+ 0 - 8
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/MEIPreload/manifest.json

@@ -1,8 +0,0 @@
-{
-  "name": "MEI Preload", 
-  "icons": {}, 
-  "version": "1.0.6.0", 
-  "manifest_version": 2, 
-  "update_url": "https://clients2.google.com/service/update2/crx", 
-  "description": "Contains preloaded data for Media Engagement"
-}

BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/MEIPreload/preloaded_data.pb


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome.dll


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome.exe


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome_100_percent.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome_200_percent.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome_elf.dll


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome_proxy.exe


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/chrome_pwa_launcher.exe


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/elevation_service.exe


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/eventlog_provider.dll


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/icudtl.dat


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/interactive_ui_tests.exe


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/libEGL.dll


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/libGLESv2.dll


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/am.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ar-XB.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ar.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/bg.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/bn.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ca.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/cs.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/da.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/de.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/el.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/en-GB.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/en-US.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/en-XA.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/es-419.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/es.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/et.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/fa.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/fi.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/fil.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/fr.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/gu.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/he.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/hi.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/hr.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/hu.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/id.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/it.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ja.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/kn.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ko.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/lt.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/lv.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ml.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/mr.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ms.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/nb.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/nl.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/pl.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/pt-BR.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/pt-PT.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ro.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ru.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/sk.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/sl.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/sr.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/sv.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/sw.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/ta.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/te.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/th.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/tr.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/uk.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/vi.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/zh-CN.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/locales/zh-TW.pak


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/mojo_core.dll


BIN
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/nacl_irt_x86_64.nexe


+ 0 - 0
TEAMModelOS.FunctionV4/.local-chromium/Win64-970485/chrome-win/notification_helper.exe


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.