991f6f78fccb86b2718ab96969a69304daafe2b4..b83e8417c341636a6da3a8eb7db7c151ef3c00cd
6 小时以前 spring
巡查菜单权限设置
yyb
b83e84 对比 | 目录
11 小时以前 spring
fix: 完成巡查字段调整
0358eb 对比 | 目录
已修改6个文件
307 ■■■■■ 文件已修改
src/manifest.json 210 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/index/index.vue 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/production/wire/attachment/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/routingInspection/detail/indexJX.vue 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/routingInspection/detail/indexLS.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/routingInspection/upload.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/manifest.json
@@ -1,110 +1,110 @@
{
    "name" : "线缆上报",
    "appid" : "__UNI__F64E0A4",
    "description" : "",
    "versionName" : "1.0.12",
    "versionCode" : "100",
    "transformPx" : false,
    /* 5+App特有相关 */
    "app-plus" : {
        "usingComponents" : true,
        "nvueStyleCompiler" : "uni-app",
        "compilerVersion" : 3,
        "compatible" : {
            "ignoreVersion" : true // true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
  "name": "线缆上报",
  "appid": "__UNI__F64E0A4",
  "description": "",
  "versionName": "1.0.15",
  "versionCode": "100",
  "transformPx": false,
  /* 5+App特有相关 */
  "app-plus": {
    "usingComponents": true,
    "nvueStyleCompiler": "uni-app",
    "compilerVersion": 3,
    "compatible": {
      "ignoreVersion": true // true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持
    },
    "splashscreen": {
      "alwaysShowBeforeRender": true,
      "waiting": true,
      "autoclose": true,
      "delay": 0
    },
    /* 模块配置 */
    "modules": {},
    /* 应用发布信息 */
    "distribute": {
      /* android打包配置 */
      "android": {
        "permissions": [
          "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
          "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
          "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
          "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
          "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
          "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
          "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
          "<uses-permission android:name=\"android.permission.CAMERA\"/>",
          "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
          "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
          "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
          "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
          "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
          "<uses-feature android:name=\"android.hardware.camera\"/>",
          "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
          "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"/>"
        ]
      },
      /* ios打包配置 */
      "ios": {
        "dSYMs": false
      },
      /* SDK配置 */
      "sdkConfigs": {},
      "icons": {
        "android": {
          "hdpi": "unpackage/res/icons/72x72.png",
          "xhdpi": "unpackage/res/icons/96x96.png",
          "xxhdpi": "unpackage/res/icons/144x144.png",
          "xxxhdpi": "unpackage/res/icons/192x192.png"
        },
        "splashscreen" : {
            "alwaysShowBeforeRender" : true,
            "waiting" : true,
            "autoclose" : true,
            "delay" : 0
        },
        /* 模块配置 */
        "modules" : {},
        /* 应用发布信息 */
        "distribute" : {
            /* android打包配置 */
            "android" : {
                "permissions" : [
                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
                    "<uses-feature android:name=\"android.hardware.camera\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
                    "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"/>"
                ]
            },
            /* ios打包配置 */
            "ios" : {
                "dSYMs" : false
            },
            /* SDK配置 */
            "sdkConfigs" : {},
            "icons" : {
                "android" : {
                    "hdpi" : "unpackage/res/icons/72x72.png",
                    "xhdpi" : "unpackage/res/icons/96x96.png",
                    "xxhdpi" : "unpackage/res/icons/144x144.png",
                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
                },
                "ios" : {
                    "appstore" : "unpackage/res/icons/1024x1024.png",
                    "ipad" : {
                        "app" : "unpackage/res/icons/76x76.png",
                        "app@2x" : "unpackage/res/icons/152x152.png",
                        "notification" : "unpackage/res/icons/20x20.png",
                        "notification@2x" : "unpackage/res/icons/40x40.png",
                        "proapp@2x" : "unpackage/res/icons/167x167.png",
                        "settings" : "unpackage/res/icons/29x29.png",
                        "settings@2x" : "unpackage/res/icons/58x58.png",
                        "spotlight" : "unpackage/res/icons/40x40.png",
                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
                    },
                    "iphone" : {
                        "app@2x" : "unpackage/res/icons/120x120.png",
                        "app@3x" : "unpackage/res/icons/180x180.png",
                        "notification@2x" : "unpackage/res/icons/40x40.png",
                        "notification@3x" : "unpackage/res/icons/60x60.png",
                        "settings@2x" : "unpackage/res/icons/58x58.png",
                        "settings@3x" : "unpackage/res/icons/87x87.png",
                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
                    }
                }
            }
        "ios": {
          "appstore": "unpackage/res/icons/1024x1024.png",
          "ipad": {
            "app": "unpackage/res/icons/76x76.png",
            "app@2x": "unpackage/res/icons/152x152.png",
            "notification": "unpackage/res/icons/20x20.png",
            "notification@2x": "unpackage/res/icons/40x40.png",
            "proapp@2x": "unpackage/res/icons/167x167.png",
            "settings": "unpackage/res/icons/29x29.png",
            "settings@2x": "unpackage/res/icons/58x58.png",
            "spotlight": "unpackage/res/icons/40x40.png",
            "spotlight@2x": "unpackage/res/icons/80x80.png"
          },
          "iphone": {
            "app@2x": "unpackage/res/icons/120x120.png",
            "app@3x": "unpackage/res/icons/180x180.png",
            "notification@2x": "unpackage/res/icons/40x40.png",
            "notification@3x": "unpackage/res/icons/60x60.png",
            "settings@2x": "unpackage/res/icons/58x58.png",
            "settings@3x": "unpackage/res/icons/87x87.png",
            "spotlight@2x": "unpackage/res/icons/80x80.png",
            "spotlight@3x": "unpackage/res/icons/120x120.png"
          }
        }
      }
    }
  },
  /* 快应用特有相关 */
  "quickapp": {},
  /* 小程序特有相关 */
  "mp-weixin": {
    "appid": "",
    "setting": {
      "urlCheck": false
    },
    /* 快应用特有相关 */
    "quickapp" : {},
    /* 小程序特有相关 */
    "mp-weixin" : {
        "appid" : "",
        "setting" : {
            "urlCheck" : false
        },
        "usingComponents" : true
    },
    "mp-alipay" : {
        "usingComponents" : true
    },
    "mp-baidu" : {
        "usingComponents" : true
    },
    "mp-toutiao" : {
        "usingComponents" : true
    },
    "uniStatistics" : {
        "enable" : false
    },
    "vueVersion" : "3"
    "usingComponents": true
  },
  "mp-alipay": {
    "usingComponents": true
  },
  "mp-baidu": {
    "usingComponents": true
  },
  "mp-toutiao": {
    "usingComponents": true
  },
  "uniStatistics": {
    "enable": false
  },
  "vueVersion": "3"
}
src/pages/index/index.vue
@@ -18,8 +18,8 @@
    </wd-notice-bar>
    <!-- 快捷导航 -->
    <wd-grid clickable :column="1" class="mt-2">
      <view v-for="(item, index) in navList">
        <wd-grid-item v-if="item.show" :key="index" use-slot link-type="navigateTo" :url="item.url">
      <view v-for="(item, index) in navList" :key="index">
        <wd-grid-item v-if="item.show" use-slot link-type="navigateTo" :url="item.url">
          <view class="p-2">
            <image class="w-72rpx h-72rpx rounded-8rpx" :src="item.icon" />
          </view>
@@ -87,11 +87,12 @@
</template>
<script setup lang="ts">
import { reactive } from "vue";
import { reactive, computed } from "vue";
import { dayjs, useMessage, useToast } from "wot-design-uni";
import LogAPI, { VisitStatsVO } from "@/api/system/log";
import WorkerCallingCard from "@/components/worker-calling-card/index.vue";
import HomeApi from "@/api/home";
import { useUserStore } from "@/store/modules/user";
const visitStatsData = ref<VisitStatsVO>({
  todayUvCount: 0,
@@ -104,6 +105,22 @@
const message = useMessage();
const toast = useToast();
// 获取当前登录用户信息
const userStore = useUserStore();
const userInfo: any = computed(() => userStore.userInfo);
// 判断是否为巡检员角色
const isInspector = computed(() => {
  if (!userInfo.value || !userInfo.value.roles || !Array.isArray(userInfo.value.roles)) {
    return false;
  }
  console.log(
    "userInfo.value.roles",
    userInfo.value.roles.some((role: any) => role.roleKey === "qualitative-inspector")
  );
  return userInfo.value.roles.some((role: any) => role.roleKey === "qualitative-inspector");
});
const fileProgress = reactive({
  show: false,
@@ -181,7 +198,7 @@
    icon: "/static/icons/routingInspection.png",
    title: "巡检",
    url: "/pages/routingInspection/index",
    show: true,
    show: false,
  },
]);
@@ -231,7 +248,12 @@
const init = async () => {
  checkVersion();
  const { data } = await HomeApi.getIndex();
  if (data.deviceGroupName == "时效组") {
  // 判断是否为巡检员角色
  if (isInspector.value) {
    // 如果是巡检员,显示巡检菜单
    navList[2].show = true;
  } else if (data.deviceGroupName == "时效组") {
    navList[1].show = true;
  } else {
    navList[0].show = true;
src/pages/production/wire/attachment/index.vue
@@ -519,3 +519,4 @@
src/pages/routingInspection/detail/indexJX.vue
@@ -276,9 +276,9 @@
        <text class="title">{{ "巡检结果" }}</text>
      </view>
      <wd-col :span="24">
        <wd-form-item label="样品是否齐全" prop="sampleComplete" required>
        <wd-form-item label="样品是否齐全" prop="isFully" required>
          <template v-if="isEdit">
            <wd-radio-group v-model="formData.sampleComplete" inline class="conclusion-radio-group">
            <wd-radio-group v-model="formData.isFully" inline class="conclusion-radio-group">
              <wd-radio
                v-for="(opt, idx) in sampleCompleteOptions"
                :key="idx"
@@ -290,7 +290,7 @@
            </wd-radio-group>
          </template>
          <template v-else>
            {{ formatValue(formData.sampleComplete) }}
            {{ formatValue(formData.isFully) }}
          </template>
        </wd-form-item>
      </wd-col>
@@ -361,7 +361,7 @@
  inspectTwist: [], // 绞线工艺质量控制
  productAppearance: [] as string[], // 产品外观(改为数组存储选中值)
  conclusion: "", // 结论(改为数组存储选中值)
  sampleComplete: "", // 样品是否齐全
  isFully: "", // 样品是否齐全
});
const twistDirectionOptions = [
@@ -392,7 +392,7 @@
  formData.twistedOuterDiameter =
    recordData.value.structureInfo.structureRecordResult.twistedOuterDiameter || "";
  formData.structureFormula = structureResult.inspectStructure?.structureFormula || "";
  formData.sampleComplete = inspectionResult.sampleComplete || "";
  formData.isFully = inspectionResult.isFully || "";
  formData.conclusion = structureResult.conclusion || "";
  // 初始化产品外观
@@ -469,8 +469,7 @@
  if (!formData.productAppearance.length)
    return uni.showToast({ title: "产品外观为必填项", icon: "none" });
  if (!formData.conclusion) return uni.showToast({ title: "结论为必填项", icon: "none" });
  if (!formData.sampleComplete)
    return uni.showToast({ title: "样品是否齐全为必填项", icon: "none" });
  if (!formData.isFully) return uni.showToast({ title: "样品是否齐全为必填项", icon: "none" });
  // 2. 结构项循环校验
  for (const item of formData.structureItems) {
    if (!item.structureValue)
@@ -505,17 +504,17 @@
    const res = await RoutingInspectionApi.strandedPatrolCheckInspection({
      deviceUid: deviceUid.value,
      id: paramsId.value,
      result: {
      inspectionResult: {
        twistedOuterDiameter: formData.twistedOuterDiameter,
        structureFormula: formData.structureFormula,
        structureItems: formData.structureItems,
        inspectTwist: formData.inspectTwist,
        productAppearance: formData.productAppearance,
        conclusion: formData.conclusion,
        sampleComplete: formData.sampleComplete,
        isFully: formData.isFully,
      },
      inspectionResult: {
        sampleComplete: formData.sampleComplete,
      result: {
        isFully: formData.isFully,
      },
      processInspectionAttachmentList: allFileIds,
    });
src/pages/routingInspection/detail/indexLS.vue
@@ -248,12 +248,17 @@
    </wd-row>
    <!-- 巡检结果 -->
    <wd-row v-if="detailData.processInspectionResult?.isFully">
    <wd-row>
      <view style="margin: 10rpx">
        <text class="title">{{ "巡检结果" }}</text>
      </view>
      <wd-col :span="24">
        <wd-form-item label="铝杆前、中、尾样品是否齐全" prop="isFully" required>
        <wd-form-item
          label="铝杆前、中、尾样品是否齐全"
          prop="isFully"
          required
          label-width="420rpx"
        >
          <template v-if="isEdit">
            <wd-radio-group v-model="formData.isFully" inline class="conclusion-radio-group">
              <wd-radio
@@ -279,7 +284,7 @@
    </wd-row>
    <!-- 附件模块 -->
    <wd-row class="attachment-section" v-if="detailData.files && detailData.files.length > 0">
    <wd-row class="attachment-section">
      <view style="margin: 10rpx">
        <text class="title">{{ "附件" }}</text>
      </view>
@@ -546,7 +551,7 @@
    const res = await RoutingInspectionApi.drawPatrolCheckInspection({
      deviceUid: deviceUid.value,
      id: paramsId.value,
      result: {
      inspectionResult: {
        dia: formData.dia,
        maxDia: formData.maxDia,
        minDia: formData.minDia,
@@ -557,7 +562,7 @@
        jointCondition: formData.jointCondition,
        conclusion: formData.conclusion,
      },
      inspectionResult: { isFully: formData.isFully },
      result: { isFully: formData.isFully },
      processInspectionAttachmentList: allFileIds,
    });
    if (res.code === 200) {
src/pages/routingInspection/upload.vue
@@ -16,7 +16,12 @@
    <!-- 附件列表 -->
    <view class="attachment-list">
      <wd-status-tip v-if="attachmentList.length === 0" image="content" tip="暂无附件" />
      <wd-status-tip
        v-if="attachmentList.length === 0"
        image="content"
        tip="暂无附件"
        custom-class="status-tip-full"
      />
      <view v-for="(item, index) in attachmentList" :key="item.id || index" class="attachment-card">
        <view class="media-wrapper" @click="previewAttachment(item)">
@@ -198,21 +203,21 @@
const addAttachment = () => {
  // 显示选择文件类型的弹窗
  uni.showActionSheet({
    itemList: ["选择图片", "选择视频", "拍照", "录像"],
    itemList: ["选择图片", /* "选择视频", */ "拍照" /* , "录像" */],
    success: (res) => {
      switch (res.tapIndex) {
        case 0: // 选择图片
          chooseImages();
          break;
        case 1: // 选择视频
          chooseVideos();
          break;
        case 2: // 拍照
        // case 1: // 选择视频
        //   chooseVideos();
        //   break;
        case 1: // 拍照
          takePhoto();
          break;
        case 3: // 录像
          recordVideo();
          break;
        // case 3: // 录像
        //   recordVideo();
        //   break;
      }
    },
    fail: (error) => {
@@ -475,6 +480,11 @@
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  :deep(.status-tip-full) {
    grid-column: 1 / -1;
    width: 100%;
  }
  .attachment-card {
    width: 100%;
    position: relative;