From 69a1b3bf45738f048361ee4ccb6bdc64fce35720 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 12 三月 2025 11:31:46 +0800
Subject: [PATCH] 更新

---
 admin/src/components/business/operaVisitsWindow.vue |  316 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 316 insertions(+), 0 deletions(-)

diff --git a/admin/src/components/business/operaVisitsWindow.vue b/admin/src/components/business/operaVisitsWindow.vue
new file mode 100644
index 0000000..b5bdf07
--- /dev/null
+++ b/admin/src/components/business/operaVisitsWindow.vue
@@ -0,0 +1,316 @@
+<template>
+  <GlobalWindow
+    title="鏂板璁垮棰勭害"
+    width="600px"
+    :visible.sync="isShowModal"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+    @close="close"
+  >
+    <el-form :model="param" ref="paramRef" :rules="rules">
+      <div class="title_tip">璁垮淇℃伅</div>
+      <el-form-item label="璁垮濮撳悕" prop="name">
+        <el-input
+          v-model="param.name"
+          placeholder="璇疯緭鍏ヨ瀹㈢殑濮撳悕"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="璁垮鎵嬫満鍙�" prop="phone">
+        <el-input
+          v-model="param.phone"
+          maxlength="11"
+          placeholder="璇疯緭鍏ヨ瀹㈢殑鎵嬫満鍙�"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="璇佷欢绫诲瀷" prop="idcardType">
+        <el-select v-model="param.idcardType" placeholder="璇烽�夋嫨">
+          <el-option label="韬唤璇�" :value="0" />
+          <el-option label="娓境璇佷欢" :value="1" />
+          <el-option label="鎶ょ収" :value="2" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="璇佷欢鍙风爜" prop="idcardNo">
+        <el-input
+          maxlength="18"
+          v-model="param.idcardNo"
+          placeholder="璇疯緭鍏ヨ瀹㈢殑璇佷欢鍙风爜"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="鏉ヨ鍗曚綅" prop="companyName">
+        <el-input
+          v-model="param.companyName"
+          placeholder="璇疯緭鍏ユ潵璁跨殑鍗曚綅鍏ㄧО"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="浜鸿劯鐓х墖" prop="faceImgUrl">
+        <div class="upload_wrap">
+          <UploadFaceImg
+            :file="{ imgurlfull: param.faceImgUrl, imgurl: param.faceImg }"
+            :uploadData="uploadData"
+            @uploadSuccess="uploadAvatarSuccess"
+            @uploadEnd="isUploading = false"
+            @uploadBegin="isUploading = true"
+          />
+          <div class="content">
+            <div>1銆佽閫夋嫨娴呰壊鎴栦腑鎬ц儗鏅紝浣跨敤鍧囧寑鍏夌嚎鎷嶇収銆�</div>
+            <div>2銆佽淇濇寔闈㈤儴姝e闀滃ご锛屽嬁閬尅闈㈤儴锛屼繚鎸佷腑绔嬭〃鎯呫��</div>
+            <div>3銆佽閬垮厤鍚庢湡淇浘锛岀‘淇濅汉鑴歌疆寤撴竻鏅般�佸畬鏁达紝灏藉彲鑳藉噺灏戦潪鑴搁儴鍐呭鍗犳瘮銆�</div>
+          </div>
+        </div>
+      </el-form-item>
+
+      <div class="title_tip" style="margintop: 60px">璁垮棰勭害</div>
+      <el-form-item label="琚浜�" prop="receptMemberId">
+        <el-select v-model="param.receptMemberId" disabled placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in memberList"
+            :key="item.id"
+            :label="item.name + ' ' + item.companyName"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鍏ュ洯鏃堕棿" prop="starttime">
+        <el-date-picker
+          v-model="param.starttime"
+          format="yyyy-MM-dd HH:mm"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          type="datetime"
+          default-time="08:00:00"
+          :picker-options="startPickerOptions"
+          @change="changeStarttime"
+        />
+      </el-form-item>
+      <el-form-item label="绂诲洯鏃堕棿" prop="endtime">
+        <el-date-picker
+          v-model="param.endtime"
+          format="yyyy-MM-dd HH:mm"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          type="datetime"
+          :picker-options="endPickerOptions"
+          default-time="08:00:00"
+        />
+      </el-form-item>
+      <el-form-item label="鏉ヨ浜嬬敱" prop="reason">
+        <el-select v-model="param.reason" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in VisitReason"
+            :key="item.id"
+            :label="item.title"
+            :value="item.title"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鏄惁鏂藉伐浣滀笟">
+        <el-switch
+          style="width: 200px"
+          v-model="param.type"
+          :active-value="1"
+          :inactive-value="0"
+        >
+        </el-switch>
+      </el-form-item>
+      <el-form-item v-if="param.type == 1" label="鏂藉伐鍐呭">
+        <el-input
+          v-model="param.constructionReason"
+          placeholder="璇疯緭鍏ユ柦宸ュ唴瀹�"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="闅忚杞﹁締">
+        <el-input v-model.trim="param.carNos" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" placeholder="璇疯緭鍏ヨ溅鐗屽彿"></el-input>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import UploadFaceImg from '@/components/common/UploadFaceImg'
+import dayjs from 'dayjs'
+import { createFk, getVisitedVisitReason, getVisitedMember } from '@/api/business/visits'
+export default {
+  extends: BaseOpera,
+  components: {
+    GlobalWindow,
+    UploadFaceImg
+  },
+  
+  data () {
+    return {
+      isShowModal: false,
+      param: {
+        type: 0,
+        idcardType: 0,
+        starttime: '',
+        endtime: ''
+      },
+      VisitReason: [],
+      memberList: [],
+      uploadData: {
+        folder: 'member',
+        isFace: 0
+      },
+      startPickerOptions: {
+        disabledDate (time) {
+          return time.getTime() < Date.now() - 8.64e7 // 绂佺敤瓒呰繃褰撳墠鏃堕棿鐨勬棩鏈�
+        },
+        selectableRange: '00:00:00 - 23:59:59' // 杩欎釜鍔犱笂涔嬪悗锛屾椂鍒嗙涓婇潰鎵嶆湁绂佹閫夋嫨鍙樼伆锛屽鏋滀笉鍔狅紝涔熷彲浠ョ姝㈤�夋嫨锛屼絾鏄笉浼氬彉鐏�
+      },
+      endPickerOptions: {
+        disabledDate: (time) => {
+          if (this.param.starttime) {
+            return new Date(this.param.starttime).getTime() > time.getTime() + 8.64e7 // 绂佺敤瓒呰繃褰撳墠鏃堕棿鐨勬棩鏈�
+          }
+        },
+        selectableRange: '00:00:00 - 23:59:59'
+      },
+      rules: {
+        starttime: [{ required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }],
+        endtime: [{ required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }],
+        reason: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        type: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        receptMemberId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        idcardType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        faceImgUrl: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
+
+        name: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+        idcardNo: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+        companyName: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+        phone: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+        carNos: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+        constructionReason: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }]
+      }
+    }
+  },
+  created () {
+    this.$set(this.param, 'receptMemberId', this.$store.state.userInfo.memberId)
+    this.$set(this.param, 'starttime', dayjs().format('YYYY-MM-DD HH:mm:ss'))
+    this.initData()
+  },
+  watch: {
+    'param.starttime': {
+      handler (newValue, oldValue) {
+        if (newValue) {
+          const date = new Date()
+          // const min = date.getMinutes()
+          // date.setMinutes(min) // 杩欓噷鍔�1鍒嗛挓锛屾槸涓轰簡瑙e喅鍊兼敼鍙樺悗锛岀郴缁熺鏁板氨杩囨湡闄愬埗浜嗭紝鏃犳硶鐐瑰嚮鈥滄鍒烩�濇寜閽紝 濡傛灉鐩戝惉 鈥滅郴缁熸椂闂粹�濈殑鏀瑰彉锛屽垯浼氬奖鍝嶆�ц兘銆�
+          const nowDate = dayjs(date).format('HH:mm:ss')
+          let st = ''
+          if (dayjs(date).format('yyyy-MM-DD') === dayjs(newValue).format('yyyy-MM-DD')) {
+            const hh1 = dayjs(newValue).format('HH:mm:ss')
+            // if (hh1 < nowDate) {
+            //   this.param.starttime = new Date()
+            // }
+            st = nowDate
+          } else {
+            st = '00:00:00'
+          }
+          this.$set(this.startPickerOptions, 'selectableRange', st + ' - 23:59:59')
+          // this.startPickerOptions = this.startPickerOptions
+        }
+      },
+      deep: true,
+      immediate: true
+    },
+    'param.endtime': {
+      handler (newValue, oldValue) {
+        if (newValue) {
+          const nowDate = dayjs(this.param.starttime).format('HH:mm:ss')
+          let st = ''
+          if (dayjs(this.param.starttime).format('yyyy-MM-DD') === dayjs(newValue).format('yyyy-MM-DD')) {
+            st = nowDate
+          } else {
+            st = '00:00:00'
+          }
+          this.$set(this.endPickerOptions, 'selectableRange', st + ' - 23:59:59')
+          // this.startPickerOptions = this.startPickerOptions
+        }
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  methods: {
+    close () {
+      this.isShowModal = false
+      this.$emit('close')
+    },
+    initData () {
+      getVisitedVisitReason({}).then(res => {
+        this.VisitReason = res || []
+      })
+      getVisitedMember({}).then(res => {
+        this.memberList = res || []
+        console.log('memberList', this.memberList)
+      })
+    },
+    uploadAvatarSuccess (file) {
+      this.$set(this.param, 'faceImg', file.imgurl)
+      this.$set(this.param, 'faceImgUrl', file.imgurlfull)
+    },
+    changeStarttime (e) {
+      // this.$set(this.param, 'endtime', this.param.starttime)
+    },
+    // 鍚屾淇℃伅
+    confirm () {
+      this.$refs.paramRef.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        const { param } = this
+        if(param.carNos){
+          param.carNos = param.carNos.replace(/\s*/g,"")
+          param.carNos = param.carNos.replace(/[\r\n]/g, "")
+        }
+        if (param.starttime.slice(0, 10) !== param.endtime.slice(0, 10)) return this.$tip.error('鍏ュ洯鏃堕棿鍜岀鍥椂闂翠笉鍙法澶�')
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        createFk({
+          ...this.param
+        })
+          .then(() => {
+            this.visible = false
+            this.$tip.apiSuccess('鎻愪氦鎴愬姛')
+            this.$emit('success')
+            this.$emit('close')
+          })
+          .catch(e => {
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.title_tip {
+  font-size: 18px;
+  font-weight: 600;
+  margin-bottom: 10px;
+}
+.upload_wrap{
+  display: flex;
+  align-items: center;
+  .avatar-uploader{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  ::v-deep .avatar{
+    max-width: 90px;
+    max-height: 90px;
+  }
+  .content{
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    font-size: 12px;
+    color: #999999;
+    margin-left: 12px;
+    line-height: 24px;
+  }
+}
+</style>

--
Gitblit v1.9.3