瀏覽代碼

Merge branch 'master' of http://121.41.40.202:3000/web/for_client into master

yangyj 1 年之前
父節點
當前提交
f38f83188e

+ 12 - 3
src/global/components/hc-tasks-user/index.vue

@@ -1,6 +1,6 @@
 <template>
     <div :class="ui" class="hc-tasks-user">
-        <div class="tasks-user-box">
+        <div class="tasks-user-box" :class="disabled ? 'no-check' : ''">
             <div class="tag-user-list" @click="showModalClick">
                 <template v-for="(item, index) in UserDataList" :key="index">
                     <el-tag>{{ setCheckboxUserName(item) }}</el-tag>
@@ -188,6 +188,10 @@ const props = defineProps({
         type: [String, Number],
         default: '', //上报任务ID
     },
+    disabled:{
+        type:Boolean,
+        default:false,
+    },
 
 })
 
@@ -206,7 +210,7 @@ const classifyType = ref(props.classifyType)
 const tableOwner = ref(props.tableOwner)
 const nodeId = ref(props.nodeId)
 const infoIds = ref(props.infoIds)
-
+const disabled = ref(props.disabled)
 //树数据
 const ElTreeProps = { children: 'childRoleList', label: 'roleName' }
 const ElTreeData = ref([{
@@ -227,7 +231,8 @@ watch(() => [
     props.tableOwner,
     props.nodeId,
     props.infoIds,
-], ([users, pid, cid, type, data, cla, tab, noid, infoid]) => {
+    props.disabled,
+], ([users, pid, cid, type, data, cla, tab, noid, infoid, disa]) => {
     projectId.value = pid
     contractId.value = cid
     isTypes.value = type
@@ -237,6 +242,7 @@ watch(() => [
     tableOwner.value = tab
     nodeId.value = noid
     infoIds.value = infoid
+    disabled.value = disa
 })
 
 //渲染完成
@@ -430,6 +436,9 @@ const getCheckCustomFlowUserIsEVisaPermissionsquery = async (flowJson, newUser,
 </style>
 
 <style lang="scss">
+.no-check{
+    cursor: not-allowed !important;
+}
 .hc-tasks-user .tasks-user-box .tag-user-list {
     .el-tag {
         --el-icon-size: 14px;

+ 2 - 2
src/router/modules/base.js

@@ -404,13 +404,13 @@ export default [
             {
                 path: '/patrol/add',
                 name: 'patrol-menu-add',
-                meta: { title: '安全巡检' },
+                meta: { title: '新增巡检' },
                 component: () => import('~src/views/patrol/add.vue'),
             },
             {
                 path: '/patrol/manage',
                 name: 'patrol-menu-manage',
-                meta: { title: '安全巡检' },
+                meta: { title: '整改管理' },
                 component: () => import('~src/views/patrol/manage.vue'),
             },
            

+ 455 - 2
src/views/patrol/add.vue

@@ -1,11 +1,464 @@
 <!--  -->
 <template>
-    <div>新增巡检</div>
+    <div class="hc-page-box">
+        <HcNewCard ui="bgGray">
+            <template #extra>
+                <el-button
+                    hc-btn
+                    color="rgb(154, 154, 154)"
+                    style="color: white;"
+                    @click="goBack"
+                >
+                    <HcIcon name="arrow-go-back" />
+                    <span>返回</span>
+                </el-button>
+                <el-button
+                    v-if="type !== 'view' && type !== 'review'"
+                    hc-btn
+                    color="#e54d42"
+                    style="color: white;"
+                >
+                    <HcIcon name="delete-bin-3" />
+                    <span>清空数据</span>
+                </el-button>
+                <el-button
+                    v-if="type === ''"
+                    hc-btn
+                    color="#12C060"
+                    style="color: white;"
+                >
+                    <HcIcon name="save" />
+                    <span>保存数据</span>
+                </el-button>
+                <el-button
+                    v-if="type === 'changeRow'"
+                    hc-btn
+                    color="#12C060"
+                    style="color: white;"
+                >
+                    <HcIcon name="save" />
+                    <span>提交整改记录</span>
+                </el-button>
+                <el-button
+                    v-if="type === 'confirmChange'"
+                    hc-btn
+                    color="#12C060"
+                    style="color: white;"
+                >
+                    <HcIcon name="save" />
+                    <span>确认修改</span>
+                </el-button>
+                <el-button
+                    v-if="type === 'review'"
+                    hc-btn
+                    color="#12C060"
+                    style="color: white;"
+                    @click="goList"
+                >
+                    <HcIcon name="save" />
+                    <span>复核检查通过</span>
+                </el-button>
+                <el-button
+                    v-if="type === 'review'"
+                    hc-btn
+                    color="rgb(189, 49, 36)"
+                    style="color: white;"
+                    @click="goList"
+                >
+                    <HcIcon name="save" />
+                    <span>复核检查未通过</span>
+                </el-button>
+            </template>
+            <el-form ref="addFormRef" :model="addForm" :rules="addRules" label-width="auto" size="large" label-position="left">
+                <el-row :gutter="20">
+                    <el-col :span="12">
+                        <el-form-item label="检查名称" prop="name">
+                            <el-input v-model="addForm.name" placeholder="请输入" :disabled="type === 'changeRow' || type === 'review' || type === 'view'" />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12">
+                        <el-form-item label="检查类别" prop="type">
+                            <el-select v-model="addForm.type" placeholder="请选择" clearable style="width:100%" :disabled="type === 'changeRow' || type === 'review' || type === 'view'">
+                                <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="20">
+                    <el-col :span="12">
+                        <el-form-item label="是否需要整改" prop="key3">
+                            <el-radio-group v-model="addForm.key3" class="ml-4" :disabled="type === 'view'">
+                                <el-radio label="1" size="large">需要整改</el-radio>
+                                <el-radio label="2" size="large">不要整改</el-radio>
+                            </el-radio-group>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="20">
+                    <el-col :span="12">
+                        <el-form-item label="整改日期" prop="time">
+                            <el-date-picker
+                                v-model="addForm.time"
+                                type="date"
+                              
+                                placeholder="请选择整改日期"
+                                :disabled="type === 'changeRow' || type === 'review' || type === 'view'"
+                            />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="20">
+                    <el-col :span="12">
+                        <el-form-item label="整改人" prop="key4">
+                            <HcTasksUser
+                                :disabled="type === 'changeRow' || type === 'review' || type === 'view'"
+                                :contract-id="contractId" :project-id="projectId" :users="peoples"
+                                ui="w-full" @change="tasksUserChange"
+                            />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-divider border-style="dashed" style="border: 1px dashed #cdd4e3;" />
+                <el-row :gutter="20">
+                    <el-col :span="12">
+                        <el-form-item label="检查部位" prop="key5">
+                            <el-button
+                                hc-btn
+                                type="primary"
+                                :disabled="type === 'changeRow' || type === 'review' || type === 'view'"
+                                @click="linksRelateModalClick"
+                            >
+                                <HcIcon name="add" />
+                                <span>点击选择</span>
+                            </el-button>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <div style="position: relative; height: 400px">
+                    <HcTable :column="tableColumn" :datas="tableData">
+                        <template #key1="{ row }">
+                            <hc-table-input v-model="row.key1" type="textarea" :disabled="type === 'changeRow' || type === 'review' || type === 'view'" />
+                        </template>
+                        <template #key2="{ row }">
+                            <hc-table-input v-model="row.key2" type="textarea" :disabled="type === 'changeRow' || type === 'review' || type === 'view'" />
+                        </template>
+                        <template #key3="{ row }">
+                            <hc-table-input v-model="row.key3" type="textarea" :disabled="type === 'review' || type === 'view'" />
+                        </template>
+                        <template #key11="{ row }">
+                            <hc-table-input v-model="row.key11" type="textarea" :disabled="type === 'review' || type === 'view'" />
+                        </template>
+                        <template #key12="{ row }">
+                            <el-link v-if="row.key12" type="primary" :disabled="type === 'review' || type === 'view'">{{ row.key12 }}</el-link>
+                            <el-link v-else type="primary" @click="clickUpload">上传</el-link>
+                        </template>
+                        <template #key4="{ row }">
+                            <hc-table-input v-model="row.key4" type="textarea" :disabled="type === 'review' || type === 'view'" />
+                        </template>
+                        <template #key5="{ row }">
+                            <el-link v-if="true" type="primary" :disabled="type === 'review' || type === 'view'" @click="clickUpload">上传</el-link>
+                       
+                            <el-image v-else style="width: 100px; height: 100px" src="https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg" />
+                        </template>
+                        <template #action="{ row }">
+                            <el-link type="danger">删除</el-link>
+                        </template>
+                    </HcTable>
+                </div>
+            </el-form>
+        </HcNewCard>
+        <hc-new-dialog :show="linksRelateModal" is-table save-text="确认关联" title="关联工程用途及部位" widths="50rem" @close="linksRelateModalClose" @save="linksRelateModalSave">
+            <div class="hc-tree-box">
+                <div class="hc-search-tree-val">
+                    <el-input v-model="searchTreeVal" block clearable placeholder="请输入名称关键词检索" @keyup="searchTreeKeyUp">
+                        <template #suffix>
+                            <HcIcon name="search-2" ui="text-xl iscusor" @click="searchTreeClick" />
+                        </template>
+                    </el-input>
+                </div>
+                <div id="hc-tree-scrollbar" v-loading="treeLoading" class="hc-tree-scrollbar" element-loading-text="获取数据中...">
+                    <el-scrollbar v-show="isSearchTree" class="scroll-bar-right-16">
+                        <div class=" node-many-tree">
+                            <HcDataTree
+                                :datas="searchTreeData"
+                                show-checkbox
+                                default-expand-all
+                                @nodeTap="wbsElTreeClick"
+                                @check="divisionTreeCheck"
+                            >
+                                <template #default="{ node, data }">{{ data.title }}</template>
+                            </HcDataTree>>
+                        </div>
+                    </el-scrollbar>
+                    <el-scrollbar v-show="!isSearchTree" class="scroll-bar-right-16">
+                        <div class=" node-many-tree">
+                            <HcLazyTree
+                                ref="wbstree"
+                                show-checkbox
+                                @check="divisionTreeCheck"
+                                @load="treeLoadNode"
+                                @nodeTap="wbsElTreeClick"
+                            >
+                                <template #default="{ node, data }">{{ data.title }}</template>
+                            </HcLazyTree>
+                        </div>
+                    </el-scrollbar>
+                </div>
+            </div>
+        </hc-new-dialog>
+        <HcUploadFile
+            ref="HcUploadFileRef"
+            :options="UploadFileOptions"
+            @progress="HcUploadFileProgress"
+            @success="HcUploadFileSuccess"
+            @change="HcUploadFileChange"
+        />
+    </div>
 </template>
 
 <script setup>
-import { ref, watch } from 'vue'
+import { nextTick, onActivated, ref, watch } from 'vue'
+import { useAppStore } from '~src/store'
+import queryApi from '~api/data-fill/query'
+import { getArrValue, getObjValue } from 'js-fast-way'
+import { useRoute, useRouter } from 'vue-router'
+import { getTokenHeader } from '~src/api/request/header'
+
+//初始变量
+const router = useRouter()
+const useAppState = useAppStore()
+const useRoutes = useRoute()
+const routerQuery = useRoutes?.query
+const type = ref(routerQuery?.type || '')
+const projectId = ref(useAppState.getProjectId)
+const contractId = ref(useAppState.getContractId)
+const addFormRef = ref(null)
+const addForm = ref({})
+const addRules = {
+    name: {
+        required: true,
+        trigger: 'blur',
+        message: '请输入名称',
+    },
+    type: {
+        required: true,
+        trigger: 'blur',
+        message: '请选择类别',
+    },
+    key3: {
+        required: true,
+        trigger: 'blur',
+        message: '请选择是否需要整改',
+    },
+    key4: {
+        required: true,
+        trigger: 'blur',
+        message: '请选择整改人',
+    },
+    key5: {
+        required: true,
+        trigger: 'blur',
+        message: '请选择检查部位',
+    },
+    time:{
+        required: true,
+        trigger: 'blur',
+        message: '请选择整改时间',
+    },
+
+
+}
+
+//检查类别
+const typeOptions = ref([
+    { label:'安全巡检', value:1 },
+    { label:'质量巡检', value:2 },
+])
+
+const tableColumn = ref([])
+//整改显示列
+
+const tableData = ref([
+    { id: 1, name: '名称1', text: '文本1', color: 'red', key12:'xxxxx.pdf' },
+    { id: 2, name: '名称2', text: '文本2', color: 'blue', key12:'xxxxx.pdf' },
+    { id: 3, name: '名称3', text: '文本3', color: '无', key12:'' },
+])
+
+
+onActivated(()=>{
+    const routerQuery = useRoutes?.query
+    type.value = routerQuery?.type || ''
+    console.log( type.value, ' type.value')
+    if (type.value === 'changeRow') {
+        tableColumn.value = [
+            { key: 'key1', name: '检查项目' },
+            { key: 'key2', name: '检查内容' },
+            { key: 'key11', name: '整改反馈' },
+            { key: 'key12', name: '整改附件' },
+            { key: 'key5', name: '图片', width:150 },
+            { key: 'action', name: '操作', width:100 },
+        ]
+    } else if (type.value === 'review') {
+        tableColumn.value = [
+            { key: 'key1', name: '检查项目' },
+            { key: 'key2', name: '检查内容' },
+            { key: 'key3', name: '扣分标准' },
+            { key: 'key4', name: '检查人名称' },
+            { key: 'key5', name: '图片', width:150 },
+            { key: 'key11', name: '整改反馈' },
+            { key: 'key12', name: '整改附件' },
+            { key: 'key5', name: '整改后图片', width:150 },
+         
+        ]
+    } else {
+        tableColumn.value = [
+        { key: 'key1', name: '检查项目' },
+        { key: 'key2', name: '检查内容' },
+        { key: 'key3', name: '扣分标准' },
+        { key: 'key4', name: '检查人名称' },
+        { key: 'key5', name: '图片', width:150 },
+        { key: 'action', name: '操作', width:100 },
+        ]
+    }
+})
+const HcUploadFileRef = ref(null)
+const clickUpload = ()=>{
+    HcUploadFileRef.value?.selectFile()
+}
+//上传配置
+const UploadFileOptions = {
+    //此处设置header
+    headers: getTokenHeader(),
+}
+
+// 文件上传进度
+const HcUploadFileProgress = (res) => {
+    console.log('文件上传进度', res)
+}
+// 文件上传成功的回调
+const HcUploadFileSuccess = (res) => {
+    console.log('文件上传成功', res)
+}
+
+// 文件全部上传成功
+const HcUploadFileChange = () => {
+    console.log('文件全部上传成功')
+}
+const ishowPeople = ref(false)
+//选择整改人
+const peoples = ref('')
+//任务人选择改变
+const tasksUserChange = (a, b, users) => {
+    addForm.value.key4 = users
+}
+//关联工程用途及部位
+const linksRelateModal = ref(false)
+const linksRelateModalClick = ()=>{
+    linksRelateModal.value = true
+}
+const linksRelateModalClose = ()=>{
+    linksRelateModal.value = false
+}
+const linksRelateModalSave = ()=>{
+    console.log('baocun')
+}
+const searchTreeVal = ref('')
+const isSearchTree = ref(false)
+const searchTreeHeight = ref()
+//回车
+const searchTreeKeyUp = (e) => {
+    if (e.key === 'Enter') {
+        searchTreeClick()
+    }
+}
+
+const searchTreeClick = async () => {
+    if (searchTreeVal.value) {
+        searchTreeHeight.value = document.getElementById('hc-tree-scrollbar').offsetHeight
+        isSearchTree.value = true
+        //treeLoading.value = true
+        getSearchTreeData().then()
+    } else {
+        isSearchTree.value = false
+    }
+}
+//回车
+const searchTreeData = ref([])
+const treeLoading = ref(false)
+const getSearchTreeData = async () => {
+    treeLoading.value = true
+    const { error, code, data } = await queryApi.getTreeNodeByQueryValueAndContractId({
+        contractId: contractId.value,
+        queryValue: searchTreeVal.value,
+        tableOwner:1,
+    })
+    //判断状态
+    if (!error && code === 200) {
+        let treedata = getArrValue(data)
+        searchTreeData.value = treedata
+        treeLoading.value = false
+
+    } else {
+        treeLoading.value = false
+
+        searchTreeData.value = []
+    }
+
+}
+const wbsElTreeClick = ({ node, data, keys })=>{
+    console.log(data, 'data')
+}
+const wbstree = ref(null)
+//懒加载的数据
+const treeLoadNode = async ({ node, item, level }, resolve) => {
+    let contractIdRelation = '', parentId = '', primaryKeyId = ''
+    if (level !== 0) {
+        const nodeData = getObjValue(item)
+        contractIdRelation = nodeData?.contractIdRelation || ''
+        parentId = contractIdRelation ? nodeData?.primaryKeyId : nodeData?.id
+        primaryKeyId = nodeData?.id || ''
+    }
+    //获取数据
+    const { data } = await queryApi.queryWbsTreeData({
+        contractId: contractId.value || '',
+        contractIdRelation,
+        primaryKeyId,
+        parentId,
+        // classifyType: contractTypeTabKey.value,
+         classifyType:1,
+         tableOwner:1,
+
+    })
+    resolve(getArrValue(data))
+}
+const divisionTreeItemInfo = ref({})
+const divisionTreeCheck = ({ data }) => {
+    divisionTreeItemInfo.value = data
+}
+const goList = ()=>{
+    router.push({
+        path: '/patrol/safe',
+    
+    })
+}
+const goBack = ()=>{
+    router.back()
+}
 </script>
 
 <style lang='scss' scoped>
+.bgGray{
+    background-color: rgba(32, 77, 161, 0.08);;
+}
+
+.hc-table-form-content .hc-content-box .hc-table-forem-box .hc-fixed-page {
+    .el-button {
+        display: block;
+        margin: 20px;
+    }
+}
+</style>
+
+<style  lang='scss'>
+
 </style>

+ 56 - 1
src/views/patrol/manage.vue

@@ -1,10 +1,65 @@
 <!--  -->
 <template>
-    <div>整改管理</div>
+    <div class="hc-page-box">
+        <HcNewCard>
+            <HcTable is-new :column="tableColumn" :datas="tableData">
+                <template #key3="{ row }">
+                    <span class="text-link" @click="tableRowEdit(row)">{{ row?.key3 }}</span>
+                </template>
+                <template #action="{ row }">
+                    <el-link v-if="row.isType" type="primary" @click="changeRow(row)">整改</el-link>
+                    <el-link v-else type="primary">撤回提交</el-link>
+                </template>
+            </HcTable>
+            <template #action>
+                <HcPages :pages="searchForm" @change="pageChange" />
+            </template>
+        </HcNewCard>
+    </div>
 </template>
 
 <script setup>
 import { ref, watch } from 'vue'
+import { useRouter } from 'vue-router'
+//初始变量
+const router = useRouter()
+const tableColumn = [
+    { key: 'key1', name: '项目' },
+    { key: 'key2', name: '检查类别' },
+    { key: 'key3', name: '检查名称' },
+    { key: 'key4', name: '复核检查状态' },
+    { key: 'key5', name: '是否需要整改' },
+    { key: 'key6', name: '需求整改完成日期' },
+    { key: 'key7', name: '实际整改完成日期' },
+    { key: 'action', name: '操作' },
+]
+const tableData = ref([
+    { key1: 'xx至xx高速公路-演示项(本地测试)', key2: '安全巡检', key3: '原地面检查', key4:'检查状态', key5:'需要整改', key6:'2023-09-27', key7:'2023-09-27', isType:true },
+    { key1: 'xx至xx高速公路-演示项(本地测试)', key2: '安全巡检', key3: '原地面检查', key4:'检查状态', key5:'需要整改', key6:'2023-09-27', key7:'2023-09-27', isType:false },
+    { key1: 'xx至xx高速公路-演示项(本地测试)', key2: '安全巡检', key3: '原地面检查', key4:'检查状态', key5:'需要整改', key6:'2023-09-27', key7:'2023-09-27', isType:true },
+])
+//搜索表单
+const searchForm = ref({
+    current: 1, size: 20, total: 0,
+})
+//分页被点击
+const pageChange = ({ current, size }) => {
+    searchForm.value.current = current
+    searchForm.value.size = size
+    // getTableData()
+}
+const tableRowEdit = (row)=>{
+    changeRow(row)
+}
+//提交整改
+const changeRow = (row)=>{
+    router.push({
+        path: '/patrol/add',
+        query: {
+            type: 'changeRow',
+        },
+    })
+}
 </script>
 
 <style lang='scss' scoped>

+ 27 - 3
src/views/patrol/safe.vue

@@ -7,8 +7,8 @@
                     <span class="text-link" @click="tableRowEdit(row)">{{ row?.key3 }}</span>
                 </template>
                 <template #action="{ row }">
-                    <el-link type="primary">复核</el-link>
-                    <el-link type="primary">修改</el-link>
+                    <el-link type="primary" @click="reviewRow(row)">复核</el-link>
+                    <el-link type="primary" @click="updateRow(row)">修改</el-link>
                     <el-link type="primary">删除</el-link>
                 </template>
             </HcTable>
@@ -21,6 +21,9 @@
 
 <script setup>
 import { ref, watch } from 'vue'
+import { useRouter } from 'vue-router'
+//初始变量
+const router = useRouter()
 const tableColumn = [
     { key: 'key1', name: '项目' },
     { key: 'key2', name: '检查类别' },
@@ -47,7 +50,28 @@ const pageChange = ({ current, size }) => {
     // getTableData()
 }
 const tableRowEdit = ()=>{
-    
+    router.push({
+        path: '/patrol/add',
+        query: {
+            type: 'view',
+        },
+    })
+}
+const updateRow = (row)=>{
+    router.push({
+        path: '/patrol/add',
+        query: {
+            type: 'confirmChange',
+        },
+    })
+}
+const reviewRow = (row)=>{
+    router.push({
+        path: '/patrol/add',
+        query: {
+            type: 'review',
+        },
+    })
 }
 </script>