2 Achegas 63d24bdb60 ... 5b84baedfe

Autor SHA1 Mensaxe Data
  倚楼听风雨 5b84baedfe Merge branch 'master' of http://10.8.230.114:3000/wangbin/log-server-web %!s(int64=3) %!d(string=hai) anos
  倚楼听风雨 263e4b80b6 no message %!s(int64=3) %!d(string=hai) anos

+ 8 - 2
src/api/rentComputer.js

@@ -2,7 +2,7 @@
  * @Author: 倚楼听风雨 18408246387@163.com
  * @Author: 倚楼听风雨 18408246387@163.com
  * @Date: 2023-01-09 16:01:45
  * @Date: 2023-01-09 16:01:45
  * @LastEditors: 倚楼听风雨 18408246387@163.com
  * @LastEditors: 倚楼听风雨 18408246387@163.com
- * @LastEditTime: 2023-02-20 09:49:31
+ * @LastEditTime: 2023-03-14 15:53:20
  * @FilePath: \log-server-web\src\api\rentComputer.js
  * @FilePath: \log-server-web\src\api\rentComputer.js
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
  */
@@ -188,7 +188,13 @@ export const rentingOutRentComputer = (data) => {
     data,
     data,
   });
   });
 };
 };
-
+export const offShelfRentComputer = (data) => {
+  return service({
+    url: "/rentComputer/offShelfRentComputer",
+    method: "post",
+    data,
+  });
+};
 //RentComputer============================================================================
 //RentComputer============================================================================
 //RentComputerLedger============================================================================
 //RentComputerLedger============================================================================
 export const getRentComputerLedgerList = (data) => {
 export const getRentComputerLedgerList = (data) => {

+ 316 - 45
src/view/dataStatistics/data_abnormal_rate.vue

@@ -55,7 +55,7 @@
         align="center"
         align="center"
         header-align="center"
         header-align="center"
         height="700"
         height="700"
-        size="mini"
+        size="small"
         :default-sort="{ prop: 'task_id', order: 'ascending' }"
         :default-sort="{ prop: 'task_id', order: 'ascending' }"
         v-loading="loading"
         v-loading="loading"
       >
       >
@@ -166,26 +166,26 @@
           min-width="70"
           min-width="70"
           align="center"
           align="center"
         />
         />
-        <el-table-column label="活跃成功" align="center">
+        <el-table-column label="完成" align="center">
           <el-table-column
           <el-table-column
             prop="num_new_success"
             prop="num_new_success"
-            label="新增成功"
-            min-width="70"
+            label="新增"
+            min-width="60"
             align="center"
             align="center"
           />
           />
           <el-table-column
           <el-table-column
             prop="num_lc_success"
             prop="num_lc_success"
-            label="留存成功"
-            min-width="70"
+            label="留存"
+            min-width="60"
+            align="center"
+          />
+          <el-table-column
+            prop="num_pay_success"
+            label="付费"
+            min-width="60"
             align="center"
             align="center"
           />
           />
         </el-table-column>
         </el-table-column>
-        <el-table-column
-          prop="num_pay_success"
-          label="付费成功"
-          min-width="70"
-          align="center"
-        />
         <el-table-column label="订单数" align="center">
         <el-table-column label="订单数" align="center">
           <el-table-column label="付费成功" align="center">
           <el-table-column label="付费成功" align="center">
             <el-table-column
             <el-table-column
@@ -280,43 +280,23 @@
             </el-table-column>
             </el-table-column>
           </el-table-column>
           </el-table-column>
         </el-table-column>
         </el-table-column>
-        <!-- <el-table-column label="微信扫码" align="center">
-          <el-table-column label="新增成功" align="center">
-            <el-table-column
-              prop="num_into_game,num_start_game"
-              label="成功率"
-              align="center"
-              sortable
-              :sort-method="sortBySuccess3"
-            >
-              <template #default="scope">
-                {{ scope.row.num_start_script }}
-                <el-divider style="margin: 0 5px" direction="vertical" />{{
-                  scope.row.num_into_game
-                }}
-                <el-divider style="margin: 0" />
-                {{ Math.round(scope.row.rate3 * 10000) / 100 + "%" }}
-              </template>
-            </el-table-column>
-          </el-table-column>
-        </el-table-column> -->
-        <!-- <el-table-column
+        <el-table-column
           fixed="right"
           fixed="right"
           label="操作"
           label="操作"
-          width="60"
+          width="80"
           align="center"
           align="center"
           header-align="center"
           header-align="center"
         >
         >
           <template #default="scope">
           <template #default="scope">
             <el-button
             <el-button
-              size="mini"
+              size="small"
               type="primary"
               type="primary"
               plain
               plain
               @click="showSevenTab(scope.row)"
               @click="showSevenTab(scope.row)"
-              >7</el-button
+              >7日</el-button
             >
             >
           </template>
           </template>
-        </el-table-column> -->
+        </el-table-column>
       </el-table>
       </el-table>
       <div class="gva-pagination">
       <div class="gva-pagination">
         <el-pagination
         <el-pagination
@@ -330,6 +310,211 @@
         />
         />
       </div>
       </div>
     </div>
     </div>
+    <el-dialog
+      :title="title"
+      v-model="dialogVisible"
+      :center="true"
+      :close-on-click-modal="false"
+      :close-on-press-escape="true"
+      width="80%"
+    >
+      <el-table
+        :data="sevenDataList"
+        border
+        style="width: 100%"
+        max-height="800"
+        v-loading="loading2"
+        size="small"
+      >
+        <el-table-column
+          prop="new_date"
+          label="日期"
+          min-width="80"
+          align="center"
+        />
+        <el-table-column label="留存账号" align="center">
+          <el-table-column prop="num_could_pay" align="center" label="能付费">
+            <template #default="scope">
+              {{ scope.row.num_account_lc }}
+              <el-divider style="margin: 0" />
+              {{ scope.row.num_could_pay }}
+            </template>
+          </el-table-column>
+        </el-table-column>
+        <el-table-column
+          prop="num_frozen"
+          label="封号数"
+          min-width="60"
+          align="center"
+        />
+        <el-table-column prop="new_target" label="目标" align="center">
+          <el-table-column
+            prop="new_target"
+            label="新增"
+            min-width="60"
+            align="center"
+          />
+          <el-table-column
+            prop="retained_target"
+            label="留存"
+            min-width="60"
+            align="center"
+          />
+          <el-table-column
+            prop="pay_target"
+            label="付费"
+            min-width="60"
+            align="center"
+          />
+        </el-table-column>
+        <el-table-column
+          prop="num_pull_account"
+          label="下发账号"
+          min-width="70"
+          align="center"
+        />
+        <el-table-column
+          prop="num_start_script"
+          label="脚本启动"
+          min-width="70"
+          align="center"
+        />
+        <el-table-column
+          prop="num_start_simulator"
+          label="模拟器启动"
+          min-width="80"
+          align="center"
+        />
+        <el-table-column
+          prop="num_ip"
+          label="查询IP"
+          min-width="60"
+          align="center"
+        />
+        <el-table-column
+          prop="num_start_game"
+          label="启动游戏"
+          min-width="70"
+          align="center"
+        />
+        <el-table-column
+          prop="num_login_success"
+          label="账号登录"
+          min-width="70"
+          align="center"
+        />
+        <el-table-column
+          prop="num_into_game"
+          label="进入游戏"
+          min-width="70"
+          align="center"
+        />
+        <el-table-column label="完成" align="center">
+          <el-table-column
+            prop="num_new_success"
+            label="新增"
+            min-width="60"
+            align="center"
+          />
+          <el-table-column
+            prop="num_lc_success"
+            label="留存"
+            min-width="60"
+            align="center"
+          />
+          <el-table-column
+            prop="num_pay_success"
+            label="付费"
+            min-width="60"
+            align="center"
+          />
+        </el-table-column>
+        <el-table-column label="订单数" align="center">
+          <el-table-column label="付费成功" align="center">
+            <el-table-column
+              prop="num_order_pay,num_pay"
+              align="center"
+              label="成功率"
+            >
+              <template #default="scope">
+                {{ scope.row.step6 }}
+                <el-divider style="margin: 0" />
+                {{ scope.row.rate_pay_success }}
+              </template>
+            </el-table-column>
+          </el-table-column>
+        </el-table-column>
+        <el-table-column label="脚本启动" align="center">
+          <el-table-column label="进入游戏" align="center">
+            <el-table-column
+              prop="num_into_game,num_start_game"
+              label="成功率"
+              align="center"
+            >
+              <template #default="scope">
+                {{ scope.row.num_start_script }}
+                <el-divider style="margin: 0 5px" direction="vertical" />{{
+                  scope.row.num_into_game
+                }}
+                <el-divider style="margin: 0" />
+                {{ Math.round(scope.row.rate3 * 10000) / 100 + "%" }}
+              </template>
+            </el-table-column>
+          </el-table-column>
+        </el-table-column>
+        <el-table-column label="下发账号" align="center">
+          <el-table-column label="脚本启动" align="center">
+            <el-table-column
+              prop="num_pull_account,num_start_script"
+              align="center"
+              label="成功率"
+            >
+              <template #default="scope">
+                {{ scope.row.step2 }}
+                <el-divider style="margin: 0" />
+                {{ Math.round(scope.row.rate2 * 10000) / 100 + "%" }}
+              </template>
+            </el-table-column>
+          </el-table-column>
+        </el-table-column>
+        <el-table-column label="脚本启动" align="center">
+          <el-table-column label="活跃成功" align="center">
+            <el-table-column
+              prop="num_start_script,num_active"
+              label="成功率"
+              align="center"
+            >
+              <template #default="scope">
+                {{ scope.row.num_start_script }}
+                <el-divider style="margin: 0 5px" direction="vertical" />{{
+                  scope.row.num_active
+                }}
+                <el-divider style="margin: 0" />
+                {{ Math.round(scope.row.rate4 * 10000) / 100 + "%" }}
+              </template>
+            </el-table-column>
+          </el-table-column>
+        </el-table-column>
+        <el-table-column label="下发付费" align="center">
+          <el-table-column label="付费成功" align="center">
+            <el-table-column
+              prop="num_start_script,num_new_success,num_lc_success"
+              label="成功率"
+              align="center"
+            >
+              <template #default="scope">
+                {{ scope.row.num_pull_pay }}
+                <el-divider style="margin: 0 5px" direction="vertical" />{{
+                  scope.row.num_pay_success
+                }}
+                <el-divider style="margin: 0" />
+                {{ Math.round(scope.row.rate5 * 10000) / 100 + "%" }}
+              </template>
+            </el-table-column>
+          </el-table-column>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -352,11 +537,15 @@ const page = ref(1);
 const total = ref(0);
 const total = ref(0);
 const pageSize = ref(100);
 const pageSize = ref(100);
 const tableData = ref([]);
 const tableData = ref([]);
-let spanArr = [];
 const searchInfo = ref({});
 const searchInfo = ref({});
 const userStore = useUserStore();
 const userStore = useUserStore();
 const loading = ref(false);
 const loading = ref(false);
+const loading2 = ref(false);
+const searchInfo2 = ref({});
+const dialogVisible = ref(false);
 const directorOptions = ref();
 const directorOptions = ref();
+const title = ref("");
+const sevenDataList = ref([]);
 
 
 const disabledDate = (time) => {
 const disabledDate = (time) => {
   return time.getTime() > Date.now();
   return time.getTime() > Date.now();
@@ -435,7 +624,6 @@ const sortChange = ({ prop, order }) => {
 
 
 // 搜索
 // 搜索
 const onSubmit = () => {
 const onSubmit = () => {
-  loading.value = true;
   page.value = 1;
   page.value = 1;
   pageSize.value = 100;
   pageSize.value = 100;
 
 
@@ -465,16 +653,16 @@ const onSubmit = () => {
   // console.log(searchInfo.value);
   // console.log(searchInfo.value);
 
 
   getTableData();
   getTableData();
-  loading.value = false;
 };
 };
 
 
 // 查询
 // 查询
 const getTableData = async () => {
 const getTableData = async () => {
-  ElMessage({
-    message: "查询中,请稍等",
-    type: "success",
-    offset: 50,
-  });
+  loading.value = true;
+  // ElMessage({
+  //   message: "查询中,请稍等",
+  //   type: "success",
+  //   offset: 50,
+  // });
   const table = await queryAbnormalRate({
   const table = await queryAbnormalRate({
     page: page.value,
     page: page.value,
     pageSize: pageSize.value,
     pageSize: pageSize.value,
@@ -541,8 +729,91 @@ const getTableData = async () => {
     page.value = table.data.page;
     page.value = table.data.page;
     pageSize.value = table.data.pageSize;
     pageSize.value = table.data.pageSize;
   }
   }
+  loading.value = false;
 };
 };
 
 
+//查询七天数据
+async function showSevenTab(row) {
+  // ElMessage({
+  //   message: "查询中,请稍等",
+  //   type: "warning",
+  //   offset: 50,
+  // });
+  dialogVisible.value = true;
+  loading2.value = true;
+  searchInfo2.value.task_id = Number(row.task_id);
+  searchInfo2.value.date = [
+    dayjs(row.new_date).subtract(7, "day").format("YYYY-MM-DD"),
+    dayjs(row.new_date).subtract(1, "day").format("YYYY-MM-DD"),
+  ];
+  // console.log(searchInfo2.value);
+  title.value = row.task_id + " | " + row.task_name + " | " + row.director_name;
+  const table = await queryAbnormalRate({
+    page: 1,
+    pageSize: 10,
+    ...searchInfo2.value,
+  });
+  // console.log(table);
+  if (table.code === 0) {
+    sevenDataList.value = [];
+    const data = table.data.list;
+    if (data) {
+      data.forEach((e) => {
+        let rate2 = 0;
+        let rate3 = 0;
+        let rate4 = 0;
+        let rate5 = 0;
+        if (e.num_pull_account != 0) {
+          rate2 = e.num_start_script / e.num_pull_account;
+        }
+        if (e.num_start_script != 0) {
+          rate3 = e.num_into_game / e.num_start_script;
+          rate4 = (e.num_new_success + e.num_lc_success) / e.num_start_script;
+        }
+        if (e.num_pull_pay != 0) {
+          rate5 = e.num_pay_success / e.num_pull_pay;
+        }
+        let obj1 = {
+          task_id: e.task_id,
+          task_name: e.task_name,
+          director_name: e.director_name,
+          new_date: e.new_date,
+          num_frozen: e.num_frozen,
+          num_pull_account: e.num_pull_account,
+          num_start_simulator: e.num_start_simulator,
+          num_ip: e.num_ip,
+          num_start_script: e.num_start_script,
+          num_start_game: e.num_start_game,
+          num_login_success: e.num_login_success,
+          num_into_game: e.num_into_game,
+          num_new_success: e.num_new_success,
+          num_lc_success: e.num_lc_success,
+          num_pay_success: e.num_pay_success,
+          rate_all_step: Math.round(e.rate_all_step * 10000) / 100 + "%",
+          step2: e.num_pull_account + " | " + e.num_start_script,
+          num_active: e.num_new_success + e.num_lc_success,
+          num_pull_pay: e.num_pull_pay,
+          num_account_lc: e.num_account_lc,
+          num_could_pay: e.num_could_pay,
+          num_order_pay: e.num_order_pay,
+          num_pay: e.num_pay,
+          step6: e.num_order_pay + " | " + e.num_pay,
+          rate_pay_success: e.rate_pay_success,
+          rate2: rate2,
+          rate3: rate3,
+          rate4: rate4,
+          rate5: rate5,
+          new_target: e.new_target,
+          pay_target: e.pay_target,
+          retained_target: e.retained_target,
+        };
+        sevenDataList.value.push(obj1);
+      });
+    }
+    loading2.value = false;
+  }
+}
+
 getTableData();
 getTableData();
 
 
 function sortBySuccess1(obj1, obj2) {
 function sortBySuccess1(obj1, obj2) {

+ 48 - 28
src/view/rentComputer/rent_computer.vue

@@ -2,7 +2,7 @@
  * @Author: 倚楼听风雨 18408246387@163.com
  * @Author: 倚楼听风雨 18408246387@163.com
  * @Date: 2022-11-16 17:16:17
  * @Date: 2022-11-16 17:16:17
  * @LastEditors: 倚楼听风雨 18408246387@163.com
  * @LastEditors: 倚楼听风雨 18408246387@163.com
- * @LastEditTime: 2023-02-28 10:34:39
+ * @LastEditTime: 2023-03-14 16:32:48
  * @FilePath: \log-server-web\src\view\logComputer\list_computer_distinct.vue
  * @FilePath: \log-server-web\src\view\logComputer\list_computer_distinct.vue
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 -->
 -->
@@ -54,12 +54,12 @@
               />
               />
             </el-select>
             </el-select>
           </el-form-item>
           </el-form-item>
-          <!-- <el-form-item label="是否下架">
+          <el-form-item label="是否下架">
             <el-select v-model="searchInfo.is_off_shelf" size="small">
             <el-select v-model="searchInfo.is_off_shelf" size="small">
               <el-option label="否" value="0" />
               <el-option label="否" value="0" />
               <el-option label="是" value="1" />
               <el-option label="是" value="1" />
             </el-select>
             </el-select>
-          </el-form-item> -->
+          </el-form-item>
           <el-form-item>
           <el-form-item>
             <el-button
             <el-button
               size="small"
               size="small"
@@ -128,6 +128,7 @@
         @sort-change="sortChange"
         @sort-change="sortChange"
         @selection-change="handleSelectionChange"
         @selection-change="handleSelectionChange"
         border
         border
+        v-loading="loading"
       >
       >
         <el-table-column type="selection" width="55" />
         <el-table-column type="selection" width="55" />
         <el-table-column
         <el-table-column
@@ -226,7 +227,7 @@
             >
             >
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <!-- <el-table-column
+        <el-table-column
           align="center"
           align="center"
           label="是否下架"
           label="是否下架"
           min-width="100"
           min-width="100"
@@ -242,7 +243,7 @@
             >
             >
             <el-button v-else size="small" type="success" plain>否</el-button>
             <el-button v-else size="small" type="success" plain>否</el-button>
           </template>
           </template>
-        </el-table-column> -->
+        </el-table-column>
         <el-table-column
         <el-table-column
           align="left"
           align="left"
           label="TD号"
           label="TD号"
@@ -280,7 +281,7 @@
           min-width="150"
           min-width="150"
           prop="update_time"
           prop="update_time"
         />
         />
-        <el-table-column align="left" fixed="right" label="操作" width="380">
+        <el-table-column align="left" fixed="right" label="操作" width="430">
           <template #default="scope">
           <template #default="scope">
             <el-button
             <el-button
               size="small"
               size="small"
@@ -317,6 +318,15 @@
               >换编号</el-button
               >换编号</el-button
             >
             >
             <el-button
             <el-button
+              v-if="scope.row.is_off_shelf == 0"
+              size="small"
+              type="primary"
+              link
+              icon="edit"
+              @click="offShelf(scope.row)"
+              >下架</el-button
+            >
+            <el-button
               size="small"
               size="small"
               type="primary"
               type="primary"
               link
               link
@@ -739,6 +749,7 @@ import {
   renewRentComputer,
   renewRentComputer,
   replaceNumRentComputer,
   replaceNumRentComputer,
   rentingOutRentComputer,
   rentingOutRentComputer,
+  offShelfRentComputer,
 } from "@/api/rentComputer";
 } from "@/api/rentComputer";
 import { getDirectorList } from "@/api/responsiblePerson";
 import { getDirectorList } from "@/api/responsiblePerson";
 import { useUserStore } from "@/pinia/modules/user";
 import { useUserStore } from "@/pinia/modules/user";
@@ -766,7 +777,7 @@ const form = ref({
   remark: "",
   remark: "",
   is_expire: -1,
   is_expire: -1,
   is_off_shelf: -1,
   is_off_shelf: -1,
-  director_name: "",
+  director_name: "ALL",
 });
 });
 const rules = ref({
 const rules = ref({
   pc_num: [{ required: true, message: "请输入电脑编号", trigger: "blur" }],
   pc_num: [{ required: true, message: "请输入电脑编号", trigger: "blur" }],
@@ -787,7 +798,7 @@ const page = ref(1);
 const total = ref(0);
 const total = ref(0);
 const pageSize = ref(20);
 const pageSize = ref(20);
 const tableData = ref([]);
 const tableData = ref([]);
-let spanArr = [];
+const loading = ref(false);
 const searchInfo = ref({});
 const searchInfo = ref({});
 const computerNum = ref("");
 const computerNum = ref("");
 const shopOptions = ref();
 const shopOptions = ref();
@@ -990,25 +1001,32 @@ const downloadExcelTemplate = () => {
   downloadTemplate("RentComputerTemplate.xlsx");
   downloadTemplate("RentComputerTemplate.xlsx");
 };
 };
 
 
-// const getSpanArr = (data) => {
-//   spanArr = [];
-//   var pos = 0;
-//   for (var i = 0; i < data.length; i++) {
-//     if (i === 0) {
-//       spanArr.push(1);
-//       pos = 0;
-//     } else {
-//       if (data[i].pc_code === data[i - 1].pc_code) {
-//         spanArr[pos] += 1;
-//         spanArr.push(0);
-//       } else {
-//         spanArr.push(1);
-//         pos = i;
-//       }
-//     }
-//   }
-//   // console.log(spanArr);
-// };
+// 删除/下架
+async function offShelf(rowData) {
+  let message = "确定要下架编号为" + rowData.pc_num + "的租机吗?";
+  if (rowData.is_expire != 1) {
+    message = "机器未到期,确定强制下架编号为" + rowData.pc_num + "的租机吗?";
+  }
+  let doForm = {
+    id: rowData.id,
+    pc_num: rowData.pc_num,
+  };
+  // console.log(doForm);
+  ElMessageBox.confirm(message, "租机下架", {
+    dangerouslyUseHTMLString: true,
+    type: "warning",
+  })
+    .then(async () => {
+      const data = await offShelfRentComputer(doForm);
+      if (data.code == 0) {
+        ElMessage.success(data.msg);
+        getTableData();
+      } else {
+        ElMessage.error(data.msg);
+      }
+    })
+    .catch(() => null);
+}
 
 
 // 分页
 // 分页
 const handleSizeChange = (val) => {
 const handleSizeChange = (val) => {
@@ -1057,6 +1075,7 @@ const onSubmit = () => {
 
 
 // 查询
 // 查询
 const getTableData = async () => {
 const getTableData = async () => {
+  loading.value = true;
   const table = await getRentComputerList({
   const table = await getRentComputerList({
     page: page.value,
     page: page.value,
     pageSize: pageSize.value,
     pageSize: pageSize.value,
@@ -1071,6 +1090,7 @@ const getTableData = async () => {
     getComputerNum();
     getComputerNum();
     getSelectList();
     getSelectList();
   }
   }
+  loading.value = false;
 };
 };
 
 
 //获取下拉框list
 //获取下拉框list
@@ -1112,7 +1132,7 @@ const getSelectList = async () => {
   const directorRes = await getDirectorList();
   const directorRes = await getDirectorList();
   let directorList = [
   let directorList = [
     { value: "ALL", label: "所有机器" },
     { value: "ALL", label: "所有机器" },
-    { value: "", label: "未使用" },
+    { value: "", label: "用" },
   ];
   ];
   const data3 = directorRes.data.list;
   const data3 = directorRes.data.list;
   data3.forEach((e) => {
   data3.forEach((e) => {