wenhongquan 3 anos atrás
pai
commit
4408f75326

+ 71 - 44
src/api/system/maintain.js

@@ -1,44 +1,71 @@
-import request from '@/utils/request'
-
-// 查询养护计划列表
-export function listMaintain(query) {
-  return request({
-    url: '/system/maintain/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询养护计划详细
-export function getMaintain(id) {
-  return request({
-    url: '/system/maintain/' + id,
-    method: 'get'
-  })
-}
-
-// 新增养护计划
-export function addMaintain(data) {
-  return request({
-    url: '/system/maintain',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改养护计划
-export function updateMaintain(data) {
-  return request({
-    url: '/system/maintain',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除养护计划
-export function delMaintain(id) {
-  return request({
-    url: '/system/maintain/' + id,
-    method: 'delete'
-  })
-}
+import request from '@/utils/request'
+
+// 查询养护计划列表
+export function listMaintain(query) {
+    return request({
+        url: '/system/maintain/list',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询养护计划详细
+export function getMaintain(id) {
+    return request({
+        url: '/system/maintain/' + id,
+        method: 'get'
+    })
+}
+
+// 新增养护计划
+export function addMaintain(data) {
+    return request({
+        url: '/system/maintain',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改养护计划
+export function updateMaintain(data) {
+    return request({
+        url: '/system/maintain',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除养护计划
+export function delMaintain(id) {
+    return request({
+        url: '/system/maintain/' + id,
+        method: 'delete'
+    })
+}
+
+// 派发养护计划
+export function distributedMaintain(data) {
+    return request({
+        url: "/system/maintain/distributed",
+        method: "post",
+        data: data,
+    });
+}
+
+// 反馈养护计划
+export function feedbackMaintain(data) {
+    return request({
+        url: "/system/maintain/feedback",
+        method: "post",
+        data: data,
+    });
+}
+
+// 成果上传养护计划
+export function completeMaintain(data) {
+    return request({
+        url: "/system/maintain/complete",
+        method: "post",
+        data: data,
+    });
+}

BIN
src/assets/images/Video.png


+ 119 - 0
src/components/VideoPreview/index.vue

@@ -0,0 +1,119 @@
+<template>
+  <div>
+    <img style="width:110px;margin-right:10px" v-for="i in realSrcList" :src="videopic" @click="openvideo(i)"/>
+
+    <el-dialog
+      v-model="dialogVisible"
+      title="预览"
+      width="800px"
+      append-to-body
+      @close="closevideo"
+    >
+      <video autoplay controls
+        :src="dialogImageUrl"
+        style="display: block; max-width: 100%; margin: 0 auto"
+      />
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { isExternal } from "@/utils/validate";
+import videopic from '@/assets/images/Video.png'
+
+
+const props = defineProps({
+  src: {
+    type: String,
+    required: true
+  },
+  width: {
+    type: [Number, String],
+    default: ""
+  },
+  height: {
+    type: [Number, String],
+    default: ""
+  }
+});
+
+const realSrc = computed(() => {
+  let real_src = props.src.split(",")[0];
+  if (isExternal(real_src)) {
+    return real_src;
+  }
+  return import.meta.env.VITE_APP_BASE_API + real_src;
+});
+
+const realSrcList = computed(() => {
+
+
+  let real_src_list = (props.src??'') .split(",");
+  let srcList = [];
+  ((real_src_list==null||real_src_list==""?[]:real_src_list)).forEach(item => {
+    if (isExternal(item)) {
+      return srcList.push(item);
+    }
+    return srcList.push(import.meta.env.VITE_APP_BASE_API + item);
+  });
+  return srcList;
+});
+const dialogVisible = ref(false);
+const dialogImageUrl = ref("");
+
+const openvideo = (src) => {
+  dialogVisible.value = true;
+  dialogImageUrl.value = src;
+  var vs = document.getElementsByTagName('video');
+  for (var i in vs) {
+    try {
+      var v = vs[i];
+      v.play();
+    } catch (e) { }
+
+  }
+}
+
+function closevideo() {
+  var vs = document.getElementsByTagName('video');
+  for (var i in vs) {
+    try {
+      var v = vs[i];
+      v.pause();
+    } catch (e) { }
+
+  }
+}
+
+const realWidth = computed(() =>
+  typeof props.width == "string" ? props.width : `${props.width}px`
+);
+
+const realHeight = computed(() =>
+  typeof props.height == "string" ? props.height : `${props.height}px`
+);
+</script>
+
+<style lang="scss" scoped>
+.el-image {
+  border-radius: 5px;
+  background-color: #ebeef5;
+  box-shadow: 0 0 5px 1px #ccc;
+  :deep(.el-image__inner) {
+    transition: all 0.3s;
+    cursor: pointer;
+    &:hover {
+      transform: scale(1.2);
+    }
+  }
+  :deep(.image-slot) {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    width: 100%;
+    height: 100%;
+    color: #909399;
+    font-size: 30px;
+  }
+}
+</style>

+ 227 - 0
src/components/VideoUpload/index.vue

@@ -0,0 +1,227 @@
+<template>
+  <div class="component-upload-image">
+
+    <el-upload
+      multiple
+      :action="uploadImgUrl"
+      list-type="picture-card"
+      :on-success="handleUploadSuccess"
+      :before-upload="handleBeforeUpload"
+      :limit="limit"
+      :on-error="handleUploadError"
+      :on-exceed="handleExceed"
+      name="file"
+      :on-remove="handleRemove"
+      :show-file-list="true"
+      :headers="headers"
+      :file-list="fileList"
+      :on-preview="handlePictureCardPreview"
+      :class="{ hide: fileList.length >= limit }"
+    >
+      <el-icon class="avatar-uploader-icon"><plus /></el-icon>
+
+
+
+      <template #file="{ file }">
+      <div>
+        <img class="el-upload-list__item-thumbnail" :src="videopic" alt="" />
+        <span class="el-upload-list__item-actions">
+          <span
+            class="el-upload-list__item-preview"
+            @click="handlePictureCardPreview(file)"
+          >
+            <el-icon><zoom-in /></el-icon>
+          </span>
+
+          <span
+            v-if="!disabled"
+            class="el-upload-list__item-delete"
+            @click="handleRemove(file)"
+          >
+            <el-icon><Delete /></el-icon>
+          </span>
+        </span>
+      </div>
+    </template>
+    </el-upload>
+    <!-- 上传提示 -->
+    <div class="el-upload__tip" v-if="showTip">
+      请上传
+      <template v-if="fileSize">
+        大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
+      </template>
+      <template v-if="fileType">
+        格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
+      </template>
+      的文件
+    </div>
+
+    <el-dialog
+      v-model="dialogVisible"
+      title="预览"
+      width="800px"
+      append-to-body
+      @close="closevideo"
+    >
+      <video autoplay controls
+        :src="dialogImageUrl"
+        style="display: block; max-width: 100%; margin: 0 auto"
+      />
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { getToken } from "@/utils/auth";
+import videopic from '@/assets/images/Video.png'
+
+
+const props = defineProps({
+  modelValue: [String, Object, Array],
+  // 图片数量限制
+  limit: {
+    type: Number,
+    default: 10,
+  },
+  // 大小限制(MB)
+  fileSize: {
+    type: Number,
+    default: 50,
+  },
+  // 文件类型, 例如['png', 'jpg', 'jpeg']
+  fileType: {
+    type: Array,
+    default: () => ["mp4", "webm"],
+  },
+  // 是否显示提示
+  isShowTip: {
+    type: Boolean,
+    default: false
+  },
+});
+
+const { proxy } = getCurrentInstance();
+const emit = defineEmits();
+const number = ref(0);
+const uploadList = ref([]);
+const dialogImageUrl = ref("");
+const dialogVisible = ref(false);
+const baseUrl = import.meta.env.VITE_APP_BASE_API;
+const uploadImgUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传的图片服务器地址
+const headers = ref({ Authorization: "Bearer " + getToken() });
+const fileList = ref([]);
+const showTip = computed(
+  () => props.isShowTip && (props.fileType || props.fileSize)
+);
+
+watch(() => props.modelValue, val => {
+  if (val) {
+    // 首先将值转为数组
+    const list = Array.isArray(val) ? val : props.modelValue.split(",");
+    // 然后将数组转为对象数组
+    fileList.value = list.map(item => {
+      if (typeof item === "string") {
+        if (item.indexOf(baseUrl) === -1) {
+          item = { name: baseUrl + item, url: baseUrl + item };
+        } else {
+          item = { name: item, url: item };
+        }
+      }
+      return item;
+    });
+  } else {
+    fileList.value = [];
+    return [];
+  }
+},{ deep: true, immediate: true });
+
+// 删除图片
+function handleRemove(file, files) {
+  emit("update:modelValue", listToString(fileList.value));
+}
+
+// 上传成功回调
+function handleUploadSuccess(res) {
+  uploadList.value.push({ name: res.fileName, url: res.fileName });
+  if (uploadList.value.length === number.value) {
+    fileList.value = fileList.value.filter(f => f.url !== undefined).concat(uploadList.value);
+    uploadList.value = [];
+    number.value = 0;
+    emit("update:modelValue", listToString(fileList.value));
+    proxy.$modal.closeLoading();
+  }
+}
+
+function closevideo() {
+  var vs = document.getElementsByTagName('video');
+  for (var i in vs) {
+    try {
+      var v = vs[i];
+      v.pause();
+    } catch (e) { }
+
+  }
+}
+
+// 上传前loading加载
+function handleBeforeUpload(file) {
+  let isImg = false;
+  if (props.fileType.length) {
+    let fileExtension = "";
+    if (file.name.lastIndexOf(".") > -1) {
+      fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
+    }
+    isImg = props.fileType.some(type => {
+      if (file.type.indexOf(type) > -1) return true;
+      if (fileExtension && fileExtension.indexOf(type) > -1) return true;
+      return false;
+    });
+  } else {
+    isImg = file.type.indexOf("image") > -1;
+  }
+  if (!isImg) {
+    proxy.$modal.msgError(
+      `文件格式不正确, 请上传${props.fileType.join("/")}视频格式文件!`
+    );
+    return false;
+  }
+  if (props.fileSize) {
+    const isLt = file.size / 1024 / 1024 < props.fileSize;
+    if (!isLt) {
+      proxy.$modal.msgError(`上传头像图片大小不能超过 ${props.fileSize} MB!`);
+      return false;
+    }
+  }
+  proxy.$modal.loading("正在上传视频,请稍候...");
+  number.value++;
+}
+
+// 文件个数超出
+function handleExceed() {
+  proxy.$modal.msgError(`上传文件数量不能超过 ${props.limit} 个!`);
+}
+
+// 上传失败
+function handleUploadError() {
+  proxy.$modal.msgError("上传视频失败");
+  proxy.$modal.closeLoading();
+}
+
+// 预览
+function handlePictureCardPreview(file) {
+  dialogImageUrl.value = file.url;
+  dialogVisible.value = true;
+}
+
+// 对象转成指定字符串分隔
+function listToString(list, separator) {
+  let strs = "";
+  separator = separator || ",";
+  for (let i in list) {
+    if (undefined !== list[i].url && list[i].url.indexOf("blob:") !== 0) {
+      strs += list[i].url.replace(baseUrl, "") + separator;
+    }
+  }
+  return strs != "" ? strs.substr(0, strs.length - 1) : "";
+}
+</script>

+ 1400 - 6
src/views/maintain/detail/index.vue

@@ -1,12 +1,1406 @@
 <template>
-  <div>3</div>
+  <div style="padding: 10px 15px">
+    <div class="maintindetail">
+      <div class="title">
+        {{ facilitieinfo.name }}养护计划
+        <div class="btngroup">
+          <el-button
+            type="primary"
+            v-if="maintaininfo.status == 1"
+            @click="showpf = true"
+            >派 发</el-button
+          >
+
+          <el-button
+            type="primary"
+            v-if="maintaininfo.status == 2"
+            @click="showzxfk = true"
+            >执行反馈</el-button
+          >
+          <el-button
+            type="primary"
+            v-if="maintaininfo.status == 3"
+            @click="showcgsc = true"
+            >成果上传</el-button
+          >
+
+          <el-button
+            type="danger"
+            @click="
+              () => {
+                router.back();
+              }
+            "
+            >返回</el-button
+          >
+        </div>
+      </div>
+      <div class="card">
+        <div class="title" style="position: relative">设施信息</div>
+        <div class="body">
+          <el-row>
+            <el-col :span="6">台账序号:{{ facilitieinfo.exId }}</el-col>
+            <el-col :span="6">所在道路:{{ facilitieinfo.roadName }}</el-col>
+            <el-col :span="6">性质:{{ facilitieinfo.nature }}</el-col>
+            <el-col :span="6">运维长度:{{ facilitieinfo.fLength }}</el-col>
+            <el-col :span="6">设施名称:{{ facilitieinfo.name }}</el-col>
+            <el-col :span="18"
+              >设施起止点:{{ facilitieinfo.addrFrom }}-{{
+                facilitieinfo.addrEnd
+              }}</el-col
+            >
+          </el-row>
+        </div>
+      </div>
+
+      <div class="card">
+        <div class="title" style="position: relative">
+          养护计划信息
+          <div
+            style="
+              position: absolute;
+              right: 10px;
+              top: 0;
+              color: #333;
+              font-size: 20px;
+            "
+          >
+            {{
+              maintain_status.filter(
+                (i) => i.value.toString() === maintaininfo.status.toString()
+              )[0]?.label ?? "-"
+            }}
+          </div>
+        </div>
+        <div class="body">
+          <el-row>
+            <el-col :span="6"
+              >养护类型:{{
+                maintain_type.filter(
+                  (i) => i.value === maintaininfo.maintainType + ""
+                )[0]?.label ?? "-"
+              }}</el-col
+            >
+            <el-col :span="6"
+              >养护数量:{{ maintaininfo.maintainCount }}</el-col
+            >
+            <el-col :span="6">养护单位:{{ maintaininfo.maintainUnit }}</el-col>
+            <el-col :span="6"
+              >报南排:{{
+                maintaininfo.maintainReportNp == 1 ? "是" : "否"
+              }}</el-col
+            >
+            <el-col :span="6">年计划:{{ maintaininfo.maintainYear }}</el-col>
+            <el-col :span="6">月计划:{{ maintaininfo.maintainMonth }}</el-col>
+            <el-col :span="12">计划备注:{{ maintaininfo.maintainDes }}</el-col>
+            <el-col :span="24">备注:{{ maintaininfo.maintainRemark }}</el-col>
+          </el-row>
+        </div>
+      </div>
+
+      <div class="card" v-if="maintaininfo.status > 1">
+        <div class="title">派发信息</div>
+        <div class="body">
+          <el-row>
+            <el-col :span="6"
+              >负责人:{{
+                allusers.filter(
+                  (i) =>
+                    i.userId.toString() ===
+                    JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 2
+                      )[0].logDes
+                    ).fzr.toString()
+                )[0]?.nickName ?? "-"
+              }}</el-col
+            >
+            <el-col :span="6"
+              >联系方式:{{
+                allusers.filter(
+                  (i) =>
+                    i.userId.toString() ===
+                    JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 2
+                      )[0].logDes
+                    ).fzr.toString()
+                )[0]?.phonenumber ?? "-"
+              }}</el-col
+            >
+            <el-col :span="6"
+              >处置班组:{{
+                alldept
+                  .filter(
+                    (i) =>
+                      (
+                        JSON.parse(
+                          maintaininfo.maintainLogs.filter(
+                            (ii) => ii.maintainStatus === 2
+                          )[0].logDes
+                        ).fzbz ?? []
+                      ).indexOf(i.deptId) != -1
+                  )
+                  .map((i) => i.deptName)
+                  .join(",")
+              }}</el-col
+            >
+            <el-col :span="6"
+              >派发时间:{{
+                maintaininfo.maintainLogs.filter(
+                  (ii) => ii.maintainStatus === 2
+                )[0].createTime
+              }}</el-col
+            >
+          </el-row>
+        </div>
+      </div>
+
+      <div class="card" v-if="maintaininfo.status >2">
+        <div class="title" style="position: relative">执行反馈</div>
+        <div class="body">
+           <div class="titleheader" :style="`${'margin-top:0px'}`">
+            {{ "作业组" }}
+          </div>
+          <div>
+            <el-row>
+                <el-col :span="6">
+                  负责人:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.fzr}}
+                </el-col>
+                <el-col :span="6">
+                  组员:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.zy}}
+                </el-col>
+                <el-col :span="6">
+                  人数: {{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.rs}}
+                </el-col>
+                <el-col :span="6">
+                  开始时间:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.starttime}}
+                </el-col>
+                <el-col :span="6">
+                  管线起点:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.addrstart}}
+                </el-col>
+                <el-col :span="6">
+                  管线终点:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.addrend}}
+                </el-col>
+                <el-col :span="6">
+                  城区: {{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.cq}}
+                </el-col>
+
+                <el-col :span="6">
+                  结束时间:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.endtime}}
+                </el-col>
+                <el-col :span="6">
+                  作业地址: {{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.addr}}
+                </el-col>
+                 <el-col :span="6">
+                  作业方式:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.jcsb}}
+                </el-col>
+                 <el-col :span="6">
+                  车辆:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.cars}}
+                </el-col>
+                 <el-col :span="6">
+                  车牌:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 3
+                    )[0].logDes ?? "{}"
+                  ).gzz.carnumber}}
+                </el-col>
+                <el-col :span="12">
+                  作业照片:
+                </el-col>
+                <el-col :span="12">
+                  工作照片:
+                </el-col>
+                <el-col :span="12">
+                  <ImagePreview
+                  v-model:src="
+                  JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzz.zyimages
+                  "
+                  :height="'120px'"
+                  :width="'120px'"
+                ></ImagePreview>
+                </el-col>
+                <el-col :span="12">
+                  <ImagePreview
+                  v-model:src="
+                  JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzz.gzimages
+                  "
+                  :height="'120px'"
+                  :width="'120px'"
+                ></ImagePreview>
+                </el-col>
+            </el-row>
+          </div>
+           <div class="titleheader" :style="`${'margin-top:0px'}`">
+            {{ "工作量" }}
+          </div>
+          <div>
+            <el-row>
+              <el-col :span="6">管径(mm):
+                {{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.gj}}
+              </el-col>
+              <el-col :span="6">对应长度(m):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.dycd}}</el-col>
+              <el-col :span="6">泥量(方):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.nl}}</el-col>
+              <el-col :span="6">检查井(座):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.jcj}}</el-col>
+              <el-col :span="6">雨水口(座):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.ysk}}</el-col>
+              <el-col :span="6">箅子(个):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.bz}}</el-col>
+              <el-col :span="6">雨水口支管(m):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.yskzg}}</el-col>
+              <el-col :span="6">备注:{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.remark}}</el-col>
+              <el-col :span="12">未能作业原因:{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.wnzyyy}}</el-col>
+              <el-col :span="12">备注:{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.remark1}}</el-col>
+              <el-col :span="24">现场照片:</el-col>
+              <el-col :span="24"><ImagePreview
+                  v-model:src="
+                  JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 3
+                      )[0].logDes ?? '{}'
+                    ).gzl.images
+                  "
+                  :height="'120px'"
+                  :width="'120px'"
+                ></ImagePreview></el-col>
+            </el-row>
+          </div>
+
+
+
+        </div>
+      </div>
+
+      <div class="card" v-if="maintaininfo.status >3">
+        <div class="title" style="position: relative">养护成果</div>
+        <div class="body">
+
+            <div class="titleheader" :style="`${'margin-top:0px'}`">
+            {{ "收单方" }}
+          </div>
+          <div>
+            <el-row>
+                <el-col :span="6">
+                  收单编号:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 4
+                    )[0].logDes ?? "{}"
+                  ).sdf.sdfbh}}
+                </el-col>
+                <el-col :span="6">
+                  城区:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 4
+                    )[0].logDes ?? "{}"
+                  ).sdf.cq}}
+                </el-col>
+                <el-col :span="6">
+                  完成月份: {{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 4
+                    )[0].logDes ?? "{}"
+                  ).sdf.wcyf}}
+                </el-col>
+                <el-col :span="6">
+                  备注:{{JSON.parse(
+                    maintaininfo.maintainLogs.filter(
+                      (ii) => ii.maintainStatus === 4
+                    )[0].logDes ?? "{}"
+                  ).sdf.bz}}
+                </el-col>
+
+                <el-col :span="12">
+                  作业图纸:
+                </el-col>
+                <el-col :span="12">
+                  收单方:
+                </el-col>
+                <el-col :span="12">
+                 <div style="position:relative">
+                  <div
+                  style="position: absolute; top: 0; left: 60px; width: 100%"
+                >
+                  <div
+                    style="
+                      margin-bottom: 10px;
+                      color: #4f9eee;
+                      display: inline-block;
+                      margin-left: 10px;
+                    "
+                    v-for="i in JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).sdf.tz?.split(',') ?? []"
+                  >
+                    <a target="_blank" :href="`${STATICURL + i}`">
+                      {{ i.split("/")[i.split("/").length - 1] }}
+                    </a>
+                  </div>  </div>
+                </div>
+                </el-col>
+                <el-col :span="12">
+                  <div style="position:relative">
+                  <div
+                  style="position: absolute; top: 0; left: 60px; width: 100%"
+                >
+                  <div
+                    style="
+                      margin-bottom: 10px;
+                      color: #4f9eee;
+                      display: inline-block;
+                      margin-left: 10px;
+                    "
+                    v-for="i in JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).sdf.sfd?.split(',') ?? []"
+                  >
+                    <a target="_blank" :href="`${STATICURL + i}`">
+                      {{ i.split("/")[i.split("/").length - 1] }}
+                    </a>
+                  </div>  </div>
+                </div>
+                </el-col>
+                <el-col :span="12">
+                  作业照片:
+                </el-col>
+                <el-col :span="12">
+                  作业视频:
+                </el-col>
+                <el-col :span="12">
+                   <ImagePreview
+                  v-model:src="
+                  JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).sdf.zyzp
+                  "
+                  :height="'120px'"
+                  :width="'120px'"
+                ></ImagePreview>
+                </el-col>
+                <el-col :span="12">
+                    <VideoPreview
+                  v-model:src="
+                  JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).sdf.zysp
+                  "
+                  :height="'120px'"
+                  :width="'120px'"
+                ></VideoPreview>
+                </el-col>
+            </el-row>
+          </div>
+           <div class="titleheader" :style="`${'margin-top:0px'}`">
+            {{ "班组验收信息" }}
+          </div>
+          <div>
+            <el-row>
+              <el-col :span="24">实际养护路段范围:
+                {{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.sjfw}}
+              </el-col>
+              <el-col :span="6">管径(mm):
+                {{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.zgkj}}
+              </el-col>
+              <el-col :span="6">对应长度(m):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.dycd}}</el-col>
+              <el-col :span="6">泥量(方):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.nl}}</el-col>
+              <el-col :span="6">检查井(座):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.jcj}}</el-col>
+              <el-col :span="6">雨水口(座):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.ysk}}</el-col>
+              <el-col :span="6">箅子(个):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.bz}}</el-col>
+              <el-col :span="6">雨水口支管(m):{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.yskzg}}</el-col>
+
+              <el-col :span="12">验收情况:{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.ysqk}}</el-col>
+              <el-col :span="12">验收备注:{{JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.remark}}</el-col>
+              <el-col :span="24">验收图纸:</el-col>
+              <el-col :span="24">
+                 <div style="position:relative">
+                  <div
+                  style="position: absolute; top: 0; left: 60px; width: 100%"
+                >
+                  <div
+                    style="
+                      margin-bottom: 10px;
+                      color: #4f9eee;
+                      display: inline-block;
+                      margin-left: 10px;
+                    "
+                    v-for="i in JSON.parse(
+                      maintaininfo.maintainLogs.filter(
+                        (ii) => ii.maintainStatus === 4
+                      )[0].logDes ?? '{}'
+                    ).bzys.ystz?.split(',') ?? []"
+                  >
+                    <a target="_blank" :href="`${STATICURL + i}`">
+                      {{ i.split("/")[i.split("/").length - 1] }}
+                    </a>
+                  </div>  </div>
+                </div>
+              </el-col>
+            </el-row>
+          </div>
+
+
+        </div>
+      </div>
+    </div>
+
+    <el-dialog v-model="showpf" title="计划派发" draggable>
+      <div>
+        <el-form :model="pdobj" label-width="120px">
+          <el-form-item label="负责班组"
+            ><el-tree-select
+              style="width: 100%"
+              v-model="pdobj.fzbz"
+              multiple
+              :data="treedept"
+          /></el-form-item>
+          <el-form-item label="负责人">
+            <el-select
+              v-model="pdobj.fzr"
+              placeholder="请选择"
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in allusers.filter(
+                  (i) => (pdobj.fzbz ?? []).indexOf(i.deptId) !== -1
+                )"
+                :label="item.nickName"
+                :value="item.userId"
+              />
+            </el-select>
+          </el-form-item>
+        </el-form>
+      </div>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="showpf = false">取消</el-button>
+          <el-button type="primary" @click="Maintaindistributed"
+            >确定</el-button
+          >
+        </span>
+      </template>
+    </el-dialog>
+
+    <el-dialog v-model="showzxfk" title="计划执行反馈" draggable>
+      <div>
+        <el-form :model="zxfkobj" label-width="10px">
+          <el-form-item label="">
+            <el-tabs v-model="currenttabname" class="demo-tabs">
+              <el-tab-pane label="作业组" name="zyz">
+                <el-row>
+                  <el-col :span="6">
+                    <el-form-item label="负责人" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzz.fzr"
+                        placeholder="请输入负责人"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="组员" label-width="80px">
+                      <el-select
+                        v-model="zxfkobj.gzz.zy"
+                        multiple
+                        filterable
+                        allow-create
+                        default-first-option
+                        :reserve-keyword="false"
+                        placeholder="请输入组员"
+                      >
+                        <el-option
+                          v-for="item in allusers"
+                          :key="item.nickName"
+                          :label="item.nickName"
+                          :value="item.userId"
+                        />
+                      </el-select>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="人数" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzz.rs"
+                        type="number"
+                        placeholder="请输入人数"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="城区" label-width="80px">
+
+
+                    <el-select
+                        v-model="zxfkobj.gzz.cq"
+                        placeholder="请选择城区"
+                      >
+                        <el-option
+                          v-for="item in sys_area"
+                          :key="item.label"
+                          :label="item.label"
+                          :value="item.label"
+                        />
+                      </el-select>
+
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+
+                <el-row>
+                  <el-col :span="6">
+                    <el-form-item label="管线起点" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzz.addrstart"
+                        placeholder="请输入地址"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="管线终点" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzz.addrend"
+                        placeholder="请输入地址"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="开始时间" label-width="80px">
+                      <el-date-picker
+                        v-model="zxfkobj.gzz.starttime"
+                        type="date"
+                        format="YYYY-MM-DD"
+                        placeholder="请选择"
+                      />
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="结束时间" label-width="80px">
+                      <el-date-picker
+                        v-model="zxfkobj.gzz.endtime"
+                        type="date"
+                        format="YYYY-MM-DD"
+                        placeholder="请选择"
+                      />
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+
+                <el-row>
+                  <el-col :span="6">
+                    <el-form-item label="作业地址" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzz.addr"
+                        placeholder="请输入地址"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="作业方式" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzz.jcsb"
+                        placeholder="请输入"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="车辆" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzz.cars"
+                        type="number"
+                        placeholder="请输入车辆数"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="车牌号" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzz.carnumber"
+                        placeholder="请输入车牌号"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+                <el-row>
+                  <el-col :span="12">
+                    <el-form-item label="作业图片" label-width="80px">
+                      <ImageUpload v-model="zxfkobj.gzz.zyimages"></ImageUpload>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12">
+                    <el-form-item label="工作图片" label-width="80px">
+                      <ImageUpload v-model="zxfkobj.gzz.gzimages"></ImageUpload>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-tab-pane>
+              <el-tab-pane label="工作量" name="gzl">
+                <el-row>
+                  <el-col :span="6">
+                    <el-form-item label="管径(mm)" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzl.gj"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="对应长度(m)" label-width="90px">
+                      <el-input
+                        v-model="zxfkobj.gzl.dycd"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="泥量(方)" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzl.nl"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="检查井(座)" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzl.jcj"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col> </el-row
+                ><el-row>
+                  <el-col :span="6">
+                    <el-form-item label="雨水口(座)" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzl.ysk"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+
+                  <el-col :span="6">
+                    <el-form-item label="箅子(个)" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzl.bz"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+
+                  <el-col :span="6">
+                    <el-form-item label="雨水口支管(m)" label-width="120px">
+                      <el-input
+                        v-model="zxfkobj.gzl.yskzg"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="备注" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzl.remark"
+                        placeholder="请输入备注"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col> </el-row
+                ><el-row>
+                  <el-col :span="12">
+                    <el-form-item label="未能作业原因" label-width="100px">
+                      <el-input
+                        v-model="zxfkobj.gzl.wnzyyy"
+                        placeholder="请输入备注"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12">
+                    <el-form-item label="备注" label-width="80px">
+                      <el-input
+                        v-model="zxfkobj.gzl.remark1"
+                        placeholder="请输入备注"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  </el-row>
+                  <el-row>
+                  <el-col :span="24">
+                    <el-form-item label="现场图片" label-width="80px">
+                      <ImageUpload v-model="zxfkobj.gzl.images"></ImageUpload>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-tab-pane>
+            </el-tabs>
+          </el-form-item>
+        </el-form>
+      </div>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="showzxfk = false">取消</el-button>
+          <el-button type="primary" @click="FeedbackMaintain">确定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+
+    <el-dialog v-model="showcgsc" title="计划成果上传" draggable>
+      <div>
+        <el-form :model="cgscobj" label-width="10px">
+          <el-form-item label="">
+            <el-tabs v-model="currenttabname1" class="demo-tabs">
+              <el-tab-pane label="收单方" name="sdf">
+                <el-row>
+                  <el-col :span="6">
+                    <el-form-item label="收方单编号" label-width="100px">
+                      <el-input
+                        v-model="cgscobj.sdf.sdfbh"
+                        placeholder="请输入编号"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                   <el-col :span="6">
+                    <el-form-item label="城区" label-width="80px">
+                       <el-select
+                        v-model="cgscobj.sdf.cq"
+                        placeholder="请选择城区"
+                      >
+                        <el-option
+                          v-for="item in sys_area"
+                          :key="item.label"
+                          :label="item.label"
+                          :value="item.label"
+                        />
+                      </el-select>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="完成月份" label-width="80px">
+                     <el-select
+                        v-model="cgscobj.sdf.wcyf"
+                        placeholder="请选择月份"
+                      >
+                        <el-option
+                          v-for="item in getmonth()"
+                          :key="item"
+                          :label="item"
+                          :value="item"
+                        />
+                      </el-select>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="备注" label-width="80px">
+                      <el-input
+                        v-model="cgscobj.sdf.bz"
+                        type="number"
+                        placeholder="请输入备注"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+
+                </el-row>
+
+                <el-row>
+                  <el-col :span="12">
+                    <el-form-item label="作业图纸" label-width="80px">
+                      <FileUpload v-model="cgscobj.sdf.tz" :fileSize="100"></FileUpload>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12">
+                    <el-form-item label="收单方" label-width="80px">
+                      <FileUpload v-model="cgscobj.sdf.sfd" :fileSize="100"></FileUpload>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12">
+                    <el-form-item label="作业照片" label-width="80px">
+                       <ImageUpload v-model="cgscobj.sdf.zyzp"></ImageUpload>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12">
+                    <el-form-item label="作业视频" label-width="80px">
+                       <VideoUpload v-model="cgscobj.sdf.zysp"></VideoUpload>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+
+
+              </el-tab-pane>
+              <el-tab-pane label="班组验收信息" name="bzys">
+                <el-row>
+                   <el-col :span="24">
+                    <el-form-item label="实际养护路段范围" label-width="130px">
+                      <el-input
+                        v-model="cgscobj.bzys.sjfw"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="管径(mm)" label-width="80px">
+                      <el-input
+                        v-model="cgscobj.bzys.zgkj"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="对应长度(m)" label-width="90px">
+                      <el-input
+                        v-model="cgscobj.bzys.dycd"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="泥量(方)" label-width="80px">
+                      <el-input
+                        v-model="cgscobj.bzys.nl"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="6">
+                    <el-form-item label="检查井(座)" label-width="80px">
+                      <el-input
+                        v-model="cgscobj.bzys.jcj"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col> </el-row
+                ><el-row>
+                  <el-col :span="6">
+                    <el-form-item label="雨水口(座)" label-width="80px">
+                      <el-input
+                        v-model="cgscobj.bzys.ysk"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+
+                  <el-col :span="6">
+                    <el-form-item label="箅子(个)" label-width="80px">
+                      <el-input
+                        v-model="cgscobj.bzys.bz"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+
+                  <el-col :span="6">
+                    <el-form-item label="雨水口支管(m)" label-width="120px">
+                      <el-input
+                        v-model="cgscobj.bzys.yskzg"
+                         type="number"
+                        placeholder="请输入数量"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                   </el-row
+                ><el-row>
+                  <el-col :span="12">
+                    <el-form-item label="验收情况" label-width="100px">
+                      <el-input
+                        v-model="cgscobj.bzys.ysqk"
+                        placeholder="请输入"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12">
+                    <el-form-item label="验收备注" label-width="80px">
+                      <el-input
+                        v-model="cgscobj.bzys.remark"
+                        placeholder="请输入备注"
+                      ></el-input>
+                    </el-form-item>
+                  </el-col>
+                  </el-row>
+                  <el-row>
+                  <el-col :span="24">
+                    <el-form-item label="验收图纸" label-width="80px">
+                      <FileUpload v-model="cgscobj.bzys.ystz"></FileUpload>
+                    </el-form-item>
+                  </el-col>
+                </el-row>
+              </el-tab-pane>
+            </el-tabs>
+          </el-form-item>
+        </el-form>
+      </div>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="showcgsc = false">取消</el-button>
+          <el-button type="primary" @click="MaintainComplete">确定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
 </template>
-<script lang="ts">
-import { defineComponent } from 'vue'
+<script lang="ts" setup>
+import { defineComponent, ref, onMounted, watch } from "vue";
+import { useDict } from "@/utils/dict";
+// 图片预览组件
+import ImagePreview from "@/components/ImagePreview";
+import ImageUpload from "@/components/ImageUpload";
+import FileUpload from "@/components/FileUpload";
+import VideoUpload from "@/components/VideoUpload";
+import VideoPreview from "@/components/VideoPreview";
+import { cloneDeep } from "lodash";
+import { listDept, getDept } from "@/api/system/dept";
+import { ElMessage } from "element-plus";
+import router from "../../../router";
+import { useRoute } from "vue-router";
+import { listFacilities, getFacilities } from "@/api/system/facilities";
+import {
+  listMaintain,
+  addMaintain,
+  getMaintain,
+  distributedMaintain,
+  feedbackMaintain,
+  completeMaintain
+} from "@/api/system/maintain";
+import {
+  changeUserStatus,
+  listUser,
+  resetUserPwd,
+  delUser,
+  getUser,
+  updateUser,
+  addUser,
+} from "@/api/system/user";
+import { treeselect as deptTreeselect } from "@/api/system/dept";
 
-export default defineComponent({
-  setup() {
+const { maintain_status, maintain_type,sys_area } = useDict(
+  "maintain_status",
+  "maintain_type",
+  "sys_area"
+);
 
+const STATICURL = import.meta.env.VITE_APP_BASE_API;
+const route = useRoute();
+if (!route.params.id || route.params.id == "undefined") {
+  router.back();
+}
+
+const currenttabname = ref("zyz");
+const currenttabname1 = ref("sdf");
+const showzxfk = ref(false);
+const zxfkobj = ref({
+  gzz: {
+    fzr: "",
+    zy: "",
+    rs: 1,
+    starttime: "",
+    endtime: "",
+    addrstart: "",
+    addrend: "",
+    cq: "",
+    addr: "",
+    jcsb: "",
+    cars: "",
+    carnumber: "",
+    zyimages: [],
+    gzimages: [],
+  },
+  gzl: {
+    gj: "",
+    dycd: "",
+    nl: "",
+    jcj: "",
+    ysk: "",
+    bz: "",
+    yskzg: "",
+    remark: "",
+    wnzyyy: "",
+    remark1: "",
+    images: [],
   },
-})
+});
+const FeedbackMaintain = () => {
+  feedbackMaintain({
+    maintainId: route.params.id,
+    logDes: JSON.stringify(zxfkobj.value),
+  }).then((res) => {
+    showzxfk.value = false;
+    ElMessage.success("反馈成功!");
+    getMaintain(Number(route.params.id)).then((res) => {
+      maintaininfo.value = res.data;
+    });
+  });
+}
+
+const showcgsc = ref(false);
+const cgscobj = ref({
+  sdf: {
+    sdfbh: "",
+    cq: "",
+    rs: 1,
+    wcyf: "",
+    bz: "",
+    tz: [],
+    sfd: [],
+    zyzp: [],
+    zysp: []
+  },
+  bzys: {
+    sjfw: "",
+    zgkj: "",
+    dycd: "",
+    nl: "",
+    jcj: "",
+    ysk: "",
+    bz: "",
+    yskzg: "",
+    ysqk: "",
+    remark: "",
+    ystz: [],
+  },
+});
+const MaintainComplete = () => {
+  completeMaintain({
+    maintainId: route.params.id,
+    logDes: JSON.stringify(cgscobj.value),
+  }).then((res) => {
+    showcgsc.value = false;
+    ElMessage.success("上传成功!");
+    getMaintain(Number(route.params.id)).then((res) => {
+      maintaininfo.value = res.data;
+    });
+  });
+}
+
+
+
+
+const showpf = ref(false);
+const pdobj = ref({ fzbz: [], fzr: "" });
+const Maintaindistributed = () => {
+  distributedMaintain({
+    maintainId: route.params.id,
+    logDes: JSON.stringify(pdobj.value),
+  }).then((res) => {
+    showpf.value = false;
+    ElMessage.success("派发成功!");
+    getMaintain(Number(route.params.id)).then((res) => {
+      maintaininfo.value = res.data;
+    });
+  });
+};
+
+
+
+
+
+const alldept = ref([]);
+listDept().then((response) => {
+  alldept.value = cloneDeep(response.data);
+});
+
+function setdatakey(dept) {
+  if (dept.children) {
+    dept.children = dept.children.map((i) => {
+      return setdatakey(i);
+    });
+  }
+  dept["value"] = dept.id;
+  return dept;
+}
+
+const treedept = ref([]);
+const allusers = ref([]);
+
+deptTreeselect().then((res) => {
+  treedept.value = [setdatakey(res.data[0])];
+});
+const facilitieinfo = ref({
+  addrEnd: "",
+  addrFrom: "",
+  areaAdDes: "",
+  areaDes: "",
+  createBy: null,
+  createTime: null,
+  exId: 1,
+  exId1: "",
+  ext1: null,
+  fLength: "0",
+  id: null,
+  name: "",
+  nature: "",
+  params: {},
+  remark: null,
+  roadName: "",
+  searchValue: null,
+  updateBy: null,
+  updateTime: null,
+});
+const maintaininfo = ref({
+  createBy: null,
+  createTime: null,
+  ext1: "多少v啥的",
+  ext2: null,
+  facilitiesId: 1,
+  id: 1,
+  maintainCount: 2,
+  maintainDes: "是东方闪电",
+  maintainLogs: [],
+  maintainMonth: "06",
+  maintainRemark: "是东方闪电",
+  maintainReportNp: 1,
+  maintainType: 1,
+  maintainUnit: "南宁公交集团",
+  maintainYear: "2022",
+  params: {},
+  remark: null,
+  searchValue: null,
+  status: 1,
+  updateBy: null,
+  updateTime: null,
+});
+
+const getmonth = () => {
+  var months = [];
+  for (var i = 0; i < 12; i++) {
+    if (i < 9) {
+       months.push("0"+(1 + i).toString());
+
+    } else {
+       months.push((1 + i).toString());
+    }
+  }
+  return months;
+}
+onMounted(async () => {
+  await listUser({ pageSize: 1000 }).then((res) => {
+    allusers.value = res.rows;
+  });
+  getMaintain(Number(route.params.id)).then((res) => {
+    maintaininfo.value = res.data;
+    if (Number(maintaininfo.value.status) > 1) {
+      try {
+        zxfkobj.value.gzz.fzr =
+          allusers.value.filter(
+            (i) =>
+              i.userId.toString() ===
+              JSON.parse(
+                maintaininfo.value.maintainLogs.filter(
+                  (ii) => ii.maintainStatus === 2
+                )[0].logDes
+              ).fzr.toString()
+          )[0]?.nickName ?? "-";
+      } catch (e) {}
+    }
+    getFacilities(maintaininfo.value.facilitiesId).then((rep) => {
+      facilitieinfo.value = rep.data;
+    });
+  });
+});
 </script>
+
+<style lang="scss">
+.demo-tabs {
+  width: 100%;
+}
+.el-row {
+  margin-bottom: 20px;
+}
+.maintindetail {
+  background: #fff;
+  padding: 30px 22px;
+  border-radius: 8px;
+  overflow-y: auto;
+  padding-top: 20px;
+  position: relative;
+
+  .el-select {
+    width: 100%;
+  }
+
+  .title {
+    color: #2b3551;
+    font-size: 16px;
+    font-weight: 400;
+    .btngroup {
+      position: absolute;
+      top: 13px;
+      right: 20px;
+      .el-button {
+        margin-left: 25px;
+      }
+    }
+  }
+  .card {
+    border: 1px solid #e5e9f2;
+    border-radius: 8px;
+    margin-top: 16px;
+    overflow: hidden;
+    .title {
+      background: rgba(192, 204, 218, 0.2);
+      height: 54px;
+      line-height: 54px;
+      color: #324057;
+      font-size: 14px;
+      font-weight: Bold;
+      padding-left: 22px;
+    }
+    .body {
+      padding: 20px;
+      color: #475669;
+      font-size: 14px;
+      // padding-top: 10px;
+      .el-col {
+        margin-bottom: 20px;
+      }
+      .titleheader {
+        color: #2c7de3;
+        font-weight: Bold;
+        margin-bottom: 24px;
+        margin-top: 20px;
+      }
+    }
+  }
+}
+</style>

+ 18 - 2
src/views/maintain/list/index.vue

@@ -170,7 +170,7 @@
                       ></el-input></el-form-item></el-col>
           </el-row>
           <el-row>
-            <el-col :span="12"> <el-form-item label="计划年" label-width="150px">
+            <el-col :span="8"> <el-form-item label="计划年" label-width="150px">
                 <el-select
                   v-model="maintaininfo.maintainYear"
                   filterable
@@ -182,7 +182,7 @@
                     :value="item"
                   ></el-option>
                 </el-select></el-form-item></el-col>
-             <el-col :span="12"> <el-form-item label="计划月" label-width="150px">
+             <el-col :span="8"> <el-form-item label="计划月" label-width="150px">
                <el-select
                   v-model="maintaininfo.maintainMonth"
                   filterable
@@ -194,6 +194,21 @@
                     :value="item"
                   ></el-option>
                 </el-select></el-form-item></el-col>
+                 <el-col :span="8"> <el-form-item label="报送南排" label-width="150px">
+               <el-select
+                  v-model="maintaininfo.maintainReportNp"
+                  filterable
+                  placeholder="请选择"
+                >
+                  <el-option
+                    label="是"
+                    :value="1"
+                  ></el-option>
+                  <el-option
+                    label="否"
+                    :value="0"
+                  ></el-option>
+                </el-select></el-form-item></el-col>
           </el-row>
           <el-row>
             <el-col :span="12"> <el-form-item label="计划备注" label-width="150px">
@@ -274,6 +289,7 @@ const initadd = () => {
     maintainType: "",
     maintainUnit: "",
     maintainYear: "",
+    maintainReportNp:1,
     status: 1,
   };
 }

+ 5 - 82
src/views/task/detail/index.vue

@@ -43,7 +43,11 @@
         </div>
       </div>
       <div class="card">
-        <div class="title">工单信息</div>
+        <div class="title" style="position:relative">工单信息
+          <div style="position:absolute;right:10px;top:0;color:#333;font-size:20px">{{task_status.filter(
+                  (i) => i.value.toString() === taskinfo.status.toString()
+                )[0]?.label ?? "-"}}</div>
+        </div>
         <div class="body">
           <el-row>
             <el-col :span="6"
@@ -431,7 +435,6 @@
               v-model="pdobj.fzbz"
               multiple
               :data="treedept"
-              check-strictly="true"
           /></el-form-item>
           <el-form-item label="负责人">
             <el-select
@@ -918,86 +921,6 @@ deptTreeselect().then((res) => {
   treedept.value = [setdatakey(res.data[0])];
 });
 
-const processdata = ref([
-  {
-    title: "相应信息",
-    content: [
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-    ],
-  },
-  {
-    title: "相应信息",
-    content: [
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-    ],
-  },
-  {
-    title: "相应信息",
-    content: [
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-    ],
-  },
-  {
-    title: "相应信息",
-    content: [
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-    ],
-  },
-  {
-    title: "相应信息",
-    content: [
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-    ],
-  },
-  {
-    title: "相应信息",
-    content: [
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-      "响应时间:sss",
-    ],
-  },
-]);
 
 const taskinfo = ref({
   taskName: "",