yanghao пре 14 часа
родитељ
комит
21b8672706

+ 3 - 0
src/api/pms/device/index.ts

@@ -53,6 +53,9 @@ export const IotDeviceApi = {
   getCompany: async (params: any) => {
   getCompany: async (params: any) => {
     return await request.get({ url: `/rq/iot-device/company?id=` + params })
     return await request.get({ url: `/rq/iot-device/company?id=` + params })
   },
   },
+  getDevice: async (params: any) => {
+    return await request.get({ url: `rq/iot-device/ly/device`, params })
+  },
   getCompanyByDevice: async (params: any) => {
   getCompanyByDevice: async (params: any) => {
     return await request.get({ url: `/rq/iot-device/company/` + params })
     return await request.get({ url: `/rq/iot-device/company/` + params })
   },
   },

+ 1 - 5
src/components/DeptTreeSelect/index.vue

@@ -75,11 +75,7 @@ const loadTree = async () => {
       // 检查传入的 modelValue 是否存在于当前加载的树数据中
       // 检查传入的 modelValue 是否存在于当前加载的树数据中
       const isModelValueValid = props.modelValue && res.some((item) => item.id === props.modelValue)
       const isModelValueValid = props.modelValue && res.some((item) => item.id === props.modelValue)
 
 
-      if (isModelValueValid) {
-        // A. 如果传入了值,且该值在当前树结构中,不做修改,保留原值
-        // 这里不需要 emit,因为值没变
-      } else {
-        // B. 如果没有传入值,或者传入的值不在当前树结构中,强制选中根节点
+      if (!isModelValueValid) {
         emits('update:modelValue', id)
         emits('update:modelValue', id)
       }
       }
     }
     }

+ 1 - 1
src/components/ZmTable/ZmTableColumn.vue

@@ -108,7 +108,7 @@ const getTextWidth = (text: string, fontSize = 14) => {
 
 
 const calculativeWidth = () => {
 const calculativeWidth = () => {
   const values = tableContext.data.value
   const values = tableContext.data.value
-    .map((item) => props.realValue?.(item[props.prop]) || item[props.prop])
+    .map((item) => props.realValue?.(item) || item[props.prop])
     .filter(Boolean)
     .filter(Boolean)
 
 
   let labelWidth = getTextWidth(bindProps.value.label || '') + 34
   let labelWidth = getTextWidth(bindProps.value.label || '') + 34

+ 55 - 29
src/views/oli-connection/monitoring-query/index.vue

@@ -7,24 +7,21 @@ import { formatIotValue } from '@/utils/useSocketBus'
 import { useDebounceFn } from '@vueuse/core'
 import { useDebounceFn } from '@vueuse/core'
 import { dayjs, ElMessage } from 'element-plus'
 import { dayjs, ElMessage } from 'element-plus'
 import { computed, ref } from 'vue'
 import { computed, ref } from 'vue'
-import { useI18n } from 'vue-i18n'
 
 
-const { t } = useI18n()
+defineOptions({ name: 'MonitoringQuery' })
 
 
 const id = useUserStore().getUser.deptId ?? 157
 const id = useUserStore().getUser.deptId ?? 157
 const deptId = id
 const deptId = id
 
 
 interface Query {
 interface Query {
   deptId?: number
   deptId?: number
-  deviceName?: string
   deviceCode?: string
   deviceCode?: string
   time?: string[]
   time?: string[]
 }
 }
 
 
 const query = ref<Query>({
 const query = ref<Query>({
-  deviceName: '',
   deviceCode: '',
   deviceCode: '',
-  time: []
+  time: [...rangeShortcuts[0].value().map((item) => dayjs(item).format('YYYY-MM-DD HH:mm:ss'))]
 })
 })
 
 
 const pageSize = ref(100)
 const pageSize = ref(100)
@@ -46,13 +43,46 @@ const loading = ref(false)
 
 
 const isConditionValid = computed(() => {
 const isConditionValid = computed(() => {
   const hasTime = query.value.time && query.value.time.length === 2
   const hasTime = query.value.time && query.value.time.length === 2
-  const hasIdentity = !!query.value.deviceName || !!query.value.deviceCode
+  const hasIdentity = !!query.value.deviceCode
   return hasTime && hasIdentity
   return hasTime && hasIdentity
 })
 })
 
 
 const canGoBack = computed(() => historyStack.value.length > 0)
 const canGoBack = computed(() => historyStack.value.length > 0)
 const canGoNext = computed(() => list.value.length >= pageSize.value)
 const canGoNext = computed(() => list.value.length >= pageSize.value)
 
 
+const deviceOptions = ref<{ label: string; value: string }[]>([])
+
+const optionsLoading = ref(false)
+
+const loadOptions = useDebounceFn(async function () {
+  handleReset()
+  try {
+    optionsLoading.value = true
+    const data = await IotDeviceApi.getDevice({
+      deptId: query.value.deptId
+    })
+    deviceOptions.value = data.map((item: any) => {
+      return {
+        label: item.deviceCode + '-' + item.deviceName,
+        value: item.deviceCode
+      }
+    })
+  } catch (error) {
+    console.error(error)
+  } finally {
+    optionsLoading.value = false
+  }
+}, 300)
+
+const handleNodeClick = (data: any) => {
+  query.value.deptId = data.id
+  loadOptions()
+}
+
+onMounted(() => {
+  loadOptions()
+})
+
 const loadList = useDebounceFn(async function () {
 const loadList = useDebounceFn(async function () {
   if (!isConditionValid.value) {
   if (!isConditionValid.value) {
     // list.value = []
     // list.value = []
@@ -82,8 +112,8 @@ const loadList = useDebounceFn(async function () {
 })
 })
 
 
 function handleQuery() {
 function handleQuery() {
-  if (!query.value.deviceName && !query.value.deviceCode) {
-    ElMessage.warning('请输入设备名称或设备编码')
+  if (!query.value.deviceCode) {
+    ElMessage.warning('请选择设备')
     return
     return
   }
   }
 
 
@@ -102,8 +132,7 @@ function handleQuery() {
 function handleReset() {
 function handleReset() {
   query.value = {
   query.value = {
     deviceCode: '',
     deviceCode: '',
-    deviceName: '',
-    time: []
+    time: [...rangeShortcuts[0].value().map((item) => dayjs(item).format('YYYY-MM-DD HH:mm:ss'))]
   }
   }
   list.value = []
   list.value = []
   historyStack.value = []
   historyStack.value = []
@@ -147,8 +176,8 @@ function handleSizeChange() {
 const exportLoading = ref(false)
 const exportLoading = ref(false)
 
 
 const handleExport = useDebounceFn(async function () {
 const handleExport = useDebounceFn(async function () {
-  if (!query.value.deviceName && !query.value.deviceCode) {
-    ElMessage.warning('请输入设备名称或设备编码')
+  if (!query.value.deviceCode) {
+    ElMessage.warning('请选择设备')
     return
     return
   }
   }
 
 
@@ -189,7 +218,13 @@ function formatterValue(row: ListItem) {
     class="grid grid-cols-[15%_1fr] grid-rows-[62px_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]"
     class="grid grid-cols-[15%_1fr] grid-rows-[62px_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]"
   >
   >
     <div class="p-4 bg-white dark:bg-[#1d1e1f] shadow rounded-lg row-span-2">
     <div class="p-4 bg-white dark:bg-[#1d1e1f] shadow rounded-lg row-span-2">
-      <DeptTreeSelect :top-id="156" :deptId="deptId" :init-select="false" :show-title="false" />
+      <DeptTreeSelect
+        :top-id="156"
+        :deptId="deptId"
+        :init-select="false"
+        :show-title="false"
+        @node-click="handleNodeClick"
+      />
     </div>
     </div>
 
 
     <el-form
     <el-form
@@ -197,22 +232,13 @@ function formatterValue(row: ListItem) {
       class="bg-white dark:bg-[#1d1e1f] rounded-lg shadow px-8 gap-8 flex items-center justify-between"
       class="bg-white dark:bg-[#1d1e1f] rounded-lg shadow px-8 gap-8 flex items-center justify-between"
     >
     >
       <div class="flex items-center gap-8">
       <div class="flex items-center gap-8">
-        <el-form-item :label="t('monitor.deviceName')">
-          <el-input
-            v-model="query.deviceName"
-            :placeholder="t('monitor.nameHolder')"
-            clearable
-            @keyup.enter="handleQuery()"
-            class="!w-240px"
-          />
-        </el-form-item>
-        <el-form-item :label="t('monitor.deviceCode')">
-          <el-input
+        <el-form-item label="设备">
+          <el-select
+            :loading="optionsLoading"
             v-model="query.deviceCode"
             v-model="query.deviceCode"
-            :placeholder="t('monitor.codeHolder')"
-            clearable
-            @keyup.enter="handleQuery()"
-            class="!w-240px"
+            :options="deviceOptions"
+            placeholder="请选择设备"
+            class="w-60!"
           />
           />
         </el-form-item>
         </el-form-item>
         <el-form-item label="时间">
         <el-form-item label="时间">
@@ -224,7 +250,7 @@ function formatterValue(row: ListItem) {
             end-placeholder="结束日期"
             end-placeholder="结束日期"
             :shortcuts="rangeShortcuts"
             :shortcuts="rangeShortcuts"
             :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
             :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
-            class="!w-352px"
+            class="!w-360px"
           />
           />
         </el-form-item>
         </el-form-item>
         <el-form-item>
         <el-form-item>

+ 4 - 1
src/views/oli-connection/monitoring/index.vue

@@ -5,6 +5,8 @@ import { useUserStore } from '@/store/modules/user'
 import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
 import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
 import { useDebounceFn } from '@vueuse/core'
 import { useDebounceFn } from '@vueuse/core'
 
 
+defineOptions({ name: 'MonitoringList' })
+
 const { t } = useI18n()
 const { t } = useI18n()
 
 
 const id = useUserStore().getUser.deptId ?? 157
 const id = useUserStore().getUser.deptId ?? 157
@@ -24,7 +26,8 @@ const viewMode = ref('card')
 const query = ref<Query>({
 const query = ref<Query>({
   pageNo: 1,
   pageNo: 1,
   pageSize: 12,
   pageSize: 12,
-  deptId: id
+  deptId: id,
+  ifInline: 3
 })
 })
 
 
 interface OliDevice {
 interface OliDevice {

+ 6 - 0
src/views/pms/iotprojecttask/index.vue

@@ -177,6 +177,12 @@
           prop="deptNames"
           prop="deptNames"
           :width="columnWidths.deptNames"
           :width="columnWidths.deptNames"
         />
         />
+        <el-table-column
+          label="施工状态"
+          align="center"
+          prop="statusLabel"
+          :width="columnWidths.deptNames"
+        />
         <!-- <el-table-column :label="t('project.technology')" align="center" prop="technique" :width="columnWidths.technique">
         <!-- <el-table-column :label="t('project.technology')" align="center" prop="technique" :width="columnWidths.technique">
           <template #default="scope">
           <template #default="scope">
             <dict-tag :type="DICT_TYPE.PMS_PROJECT_TECHNOLOGY" :value="scope.row.technique" />
             <dict-tag :type="DICT_TYPE.PMS_PROJECT_TECHNOLOGY" :value="scope.row.technique" />

+ 28 - 17
src/views/pms/iotrddailyreport/FillDailyReportForm.vue

@@ -148,15 +148,7 @@ const rules = ref<FormRules<Form>>({
   timeRange: [{ required: true, message: '请选择时间节点', trigger: 'change', type: 'array' }],
   timeRange: [{ required: true, message: '请选择时间节点', trigger: 'change', type: 'array' }],
   dailyFuel: [{ required: true, message: '请输入当日油耗', trigger: 'change' }],
   dailyFuel: [{ required: true, message: '请输入当日油耗', trigger: 'change' }],
   nextPlan: [{ required: true, message: '请输入下计划', trigger: 'change' }],
   nextPlan: [{ required: true, message: '请输入下计划', trigger: 'change' }],
-  reportDetails: [{ required: true, message: '请填写生产动态', type: 'array' }],
-  constructionBrief: [
-    {
-      required: formType.value === 'time',
-      message: '请填写施工简报',
-      type: 'string',
-      trigger: ['blur', 'change']
-    }
-  ]
+  reportDetails: [{ required: true, message: '请填写生产动态', type: 'array' }]
 })
 })
 
 
 function noProductionTimeRule(id: number) {
 function noProductionTimeRule(id: number) {
@@ -327,7 +319,15 @@ const submitForm = useDebounceFn(async function submitForm() {
       delete form.value[o.value]
       delete form.value[o.value]
     })
     })
 
 
-    await formRef.value?.validate()
+    if (formType.value === 'time') {
+      await formRef.value?.validateField([
+        'constructionBrief',
+        ...form.value.platformIds.flatMap((pid) => [
+          ...NON_PROD_FIELDS.map((item) => `${pid}.${item.key}`),
+          `${pid}.otherNptReason`
+        ])
+      ])
+    } else await formRef.value?.validate()
 
 
     const copyForm = cloneDeep(form.value)
     const copyForm = cloneDeep(form.value)
 
 
@@ -433,7 +433,6 @@ async function submitApprovalForm(auditStatus: number) {
 }
 }
 
 
 function handleOpenForm(id: number, type: 'edit' | 'approval' | 'detail' | 'time') {
 function handleOpenForm(id: number, type: 'edit' | 'approval' | 'detail' | 'time') {
-  console.log('id :>> ', id)
   formType.value = type
   formType.value = type
   form.value = original()
   form.value = original()
   loadDetail(id).then(() => {
   loadDetail(id).then(() => {
@@ -1324,11 +1323,11 @@ const inContent = async (attachment) => {
             class="col-span-4"
             class="col-span-4"
             label="其他非生产原因"
             label="其他非生产原因"
             :prop="`${pid}.otherNptReason`"
             :prop="`${pid}.otherNptReason`"
-            :rules="
-              form[pid].otherNptTime > 0
-                ? { required: true, message: '请填写原因', trigger: 'change' }
-                : {}
-            "
+            :rules="{
+              required: form[pid].otherNptTime > 0,
+              message: '请填写原因',
+              trigger: ['blur', 'change']
+            }"
           >
           >
             <el-input
             <el-input
               v-model="form[pid].otherNptReason"
               v-model="form[pid].otherNptReason"
@@ -1344,7 +1343,19 @@ const inContent = async (attachment) => {
         </div>
         </div>
       </template>
       </template>
 
 
-      <el-form-item class="mt-4 col-span-2" label="当日施工简报" prop="constructionBrief">
+      <el-form-item
+        class="mt-4 col-span-2"
+        label="当日施工简报"
+        prop="constructionBrief"
+        :rules="[
+          {
+            required: formType === 'time',
+            message: '请填写施工简报',
+            type: 'string',
+            trigger: ['blur', 'change']
+          }
+        ]"
+      >
         <el-input
         <el-input
           v-model="form.constructionBrief"
           v-model="form.constructionBrief"
           type="textarea"
           type="textarea"

+ 1 - 0
src/views/pms/iotrddailyreport/index.vue

@@ -415,6 +415,7 @@ onMounted(() => {
                   <span v-else class="text-gray-300">-</span>
                   <span v-else class="text-gray-300">-</span>
                 </template>
                 </template>
               </zm-table-column>
               </zm-table-column>
+              <zm-table-column prop="constructionBrief" label="当日施工简报" />
               <zm-table-column prop="nextPlan" label="下步工作计划" />
               <zm-table-column prop="nextPlan" label="下步工作计划" />
               <zm-table-column label="当日">
               <zm-table-column label="当日">
                 <zm-table-column prop="cumulativeWorkingWell" label="施工井" />
                 <zm-table-column prop="cumulativeWorkingWell" label="施工井" />

+ 1 - 1
src/views/pms/iotrydailyreport/index.vue

@@ -196,7 +196,7 @@ function handleOpenForm(id: number, type: 'edit' | 'readonly') {
           plain
           plain
           @click="handleExport"
           @click="handleExport"
           :loading="exportLoading"
           :loading="exportLoading"
-          v-hasPermi="['pms:iot-rh-daily-report:export']"
+          v-hasPermi="['pms:iot-ry-daily-report:export']"
         >
         >
           <Icon icon="ep:download" class="mr-5px" /> 导出
           <Icon icon="ep:download" class="mr-5px" /> 导出
         </el-button>
         </el-button>

+ 3 - 2
src/views/pms/iotrydailyreport/ry-table.vue

@@ -268,7 +268,7 @@ function handleCurrentChange(val: number) {
                             <div class="flex items-center">
                             <div class="flex items-center">
                               <div class="i-carbon-calendar mr-1 -translate-y-[0.5px]"></div>
                               <div class="i-carbon-calendar mr-1 -translate-y-[0.5px]"></div>
                               <div class="font-medium mr-2">{{
                               <div class="font-medium mr-2">{{
-                                dayjs(row.createTime).format('YYYY-MM-DD')
+                                dayjs(row.reportDetails[0].reportDate).format('YYYY-MM-DD')
                               }}</div>
                               }}</div>
                               <div class="flex items-center">
                               <div class="flex items-center">
                                 <span>{{ formatT(row.reportDetails[0].startTime) }}</span>
                                 <span>{{ formatT(row.reportDetails[0].startTime) }}</span>
@@ -334,7 +334,7 @@ function handleCurrentChange(val: number) {
                           <div class="flex items-center">
                           <div class="flex items-center">
                             <div class="i-carbon-calendar mr-1 -translate-y-[0.5px]"></div>
                             <div class="i-carbon-calendar mr-1 -translate-y-[0.5px]"></div>
                             <div class="font-medium mr-2">{{
                             <div class="font-medium mr-2">{{
-                              dayjs(row.createTime).format('YYYY-MM-DD')
+                              dayjs(item.reportDate).format('YYYY-MM-DD')
                             }}</div>
                             }}</div>
                             <div class="flex items-center">
                             <div class="flex items-center">
                               <span>{{ formatT(item.startTime) }}</span>
                               <span>{{ formatT(item.startTime) }}</span>
@@ -378,6 +378,7 @@ function handleCurrentChange(val: number) {
                 <span v-else class="text-gray-300">-</span>
                 <span v-else class="text-gray-300">-</span>
               </template>
               </template>
             </zm-table-column>
             </zm-table-column>
+            <zm-table-column prop="constructionBrief" label="当日施工简报" />
             <zm-table-column prop="contractName" label="项目" />
             <zm-table-column prop="contractName" label="项目" />
             <zm-table-column prop="drillingWorkingTime" label="进尺工作时间(H)" />
             <zm-table-column prop="drillingWorkingTime" label="进尺工作时间(H)" />
             <zm-table-column prop="otherProductionTime" label="其它生产时间(H)" />
             <zm-table-column prop="otherProductionTime" label="其它生产时间(H)" />

+ 3 - 2
src/views/pms/iotrydailyreport/ry-xj-table.vue

@@ -329,7 +329,7 @@ function handleCurrentChange(val: number) {
                             <div class="flex items-center">
                             <div class="flex items-center">
                               <div class="i-carbon-calendar mr-1 -translate-y-[0.5px]"></div>
                               <div class="i-carbon-calendar mr-1 -translate-y-[0.5px]"></div>
                               <div class="font-medium mr-2">{{
                               <div class="font-medium mr-2">{{
-                                dayjs(row.createTime).format('YYYY-MM-DD')
+                                dayjs(row.reportDetails[0].reportDate).format('YYYY-MM-DD')
                               }}</div>
                               }}</div>
                               <div class="flex items-center">
                               <div class="flex items-center">
                                 <span>{{ formatT(row.reportDetails[0].startTime) }}</span>
                                 <span>{{ formatT(row.reportDetails[0].startTime) }}</span>
@@ -395,7 +395,7 @@ function handleCurrentChange(val: number) {
                           <div class="flex items-center">
                           <div class="flex items-center">
                             <div class="i-carbon-calendar mr-1 -translate-y-[0.5px]"></div>
                             <div class="i-carbon-calendar mr-1 -translate-y-[0.5px]"></div>
                             <div class="font-medium mr-2">{{
                             <div class="font-medium mr-2">{{
-                              dayjs(row.createTime).format('YYYY-MM-DD')
+                              dayjs(item.reportDate).format('YYYY-MM-DD')
                             }}</div>
                             }}</div>
                             <div class="flex items-center">
                             <div class="flex items-center">
                               <span>{{ formatT(item.startTime) }}</span>
                               <span>{{ formatT(item.startTime) }}</span>
@@ -433,6 +433,7 @@ function handleCurrentChange(val: number) {
                 <span v-else class="text-gray-300">-</span>
                 <span v-else class="text-gray-300">-</span>
               </template>
               </template>
             </zm-table-column>
             </zm-table-column>
+            <zm-table-column prop="constructionBrief" label="当日施工简报" />
             <zm-table-column prop="contractName" label="项目" />
             <zm-table-column prop="contractName" label="项目" />
             <zm-table-column prop="totalStaffNum" label="全员数量" />
             <zm-table-column prop="totalStaffNum" label="全员数量" />
             <zm-table-column
             <zm-table-column

+ 1 - 1
src/views/pms/iotrydailyreport/xjindex.vue

@@ -195,7 +195,7 @@ function handleOpenForm(id: number, type: 'edit' | 'readonly') {
           plain
           plain
           @click="handleExport"
           @click="handleExport"
           :loading="exportLoading"
           :loading="exportLoading"
-          v-hasPermi="['pms:iot-rh-daily-report:export']"
+          v-hasPermi="['pms:iot-ry-daily-report:export']"
         >
         >
           <Icon icon="ep:download" class="mr-5px" /> 导出
           <Icon icon="ep:download" class="mr-5px" /> 导出
         </el-button>
         </el-button>