From a2299a6d4a6f99e9c11132138f5d3e9ec68f03ea Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 06 六月 2025 19:19:34 +0800
Subject: [PATCH] 开发更新

---
 admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue |  304 +++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 237 insertions(+), 67 deletions(-)

diff --git a/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
index d4e36c0..a5e0fe1 100644
--- a/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
+++ b/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
@@ -1,74 +1,52 @@
 <template>
-  <GlobalWindow
-    :title="title"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    @confirm="confirm"
-  >
+  <GlobalWindow width="520px" :title="title" @close="close" :visible.sync="visible" :confirm-working="isWorking"
+    @confirm="confirm">
+    <div class="warnning">
+      {{ form.id ? '缂栬緫璁″垝瀵瑰凡鐢熸垚鐨勪换鍔℃棤鏁堬紝浼氬湪涓嬫鐢熸垚浠诲姟鏃剁敓鏁堬紝涓斿綋澶╀笉浼氱敓鎴愪袱涓换鍔�' : '鏂板缓宸℃璁″垝浼氫粠褰撳ぉ寮�濮嬶紝鎸夌収閰嶇疆瑙勫垯浜х敓瀵瑰簲鐨勫贰妫�浠诲姟' }}
+    </div>
     <el-form :model="form" ref="form" :rules="rules">
-      <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
-        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/>
+      <el-form-item label="璁″垝鍚嶇О" prop="title">
+        <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim />
       </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      <el-form-item label="宸℃绾胯矾" prop="lineId">
+        <el-select v-model="form.lineId" filterable clearable>
+          <el-option v-for="item in lineList" :value="item.id" :label="item.name"></el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/>
+      <el-form-item label="宸℃璐熻矗浜�" prop="userIds">
+        <el-select v-model="form.userIds" multiple filterable clearable>
+          <el-option v-for="item in staffList" :value="item.id" :label="item.realname"></el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker>
+      <el-form-item label="璁″垝寮�濮嬫棩鏈�-缁撴潫鏃ユ湡" prop="selDate">
+        <el-date-picker v-model="form.selDate" @change="changeDate" is-range range-separator="-"
+          value-format="yyyy-MM-dd" type="daterange" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" />
       </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/>
+      <el-form-item label="璁″垝鎵ц鏃堕棿">
+        <el-time-picker v-model="form.selTime" @change="changeTime" is-range range-separator="-" format="HH:mm"
+          value-format="HH:mm:ss" start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" placeholder="閫夋嫨鏃堕棿鑼冨洿" />
       </el-form-item>
-      <el-form-item label="鏍囬" prop="title">
-        <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim/>
+      <el-form-item label="閲嶅棰戠巼">
+        <el-select v-model="form.circleType" @change="changeType" filterable>
+          <el-option :value="0" label="姣忓ぉ"></el-option>
+          <el-option :value="1" label="姣忓懆"></el-option>
+          <el-option :value="2" label="姣忔湀"></el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="澶囨敞" prop="remark">
-        <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+      <el-form-item v-if="form.circleType == 1" prop="circleDays" label="閲嶅瑙勫垯">
+        <div class="weeks">
+          <div class="week" @click="weekClick(i)" :class="{ active: item.sel }" v-for="item, i in weeks">{{ item.la }}
+          </div>
+        </div>
       </el-form-item>
-      <el-form-item label="鐘舵�� 0鍚敤 1绂佺敤" prop="status">
-        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍚敤 1绂佺敤" v-trim/>
+      <el-form-item v-if="form.circleType == 2" prop="circleDays" label="閲嶅瑙勫垯">
+        <div class="weeks">
+          <div class="week" @click="monthClick(i)" :class="{ active: item.sel }" v-for="item, i in monthsList">{{
+            item.la
+            }}</div>
+        </div>
       </el-form-item>
-      <el-form-item label="鎺掑簭鐮�" prop="sortnum">
-        <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="宸℃鐐圭紪鐮�(鍏宠仈yw_patrol_line)" prop="lineId">
-        <el-input v-model="form.lineId" placeholder="璇疯緭鍏ュ贰妫�鐐圭紪鐮�(鍏宠仈yw_patrol_line)" v-trim/>
-      </el-form-item>
-      <el-form-item label="宸℃璐熻矗浜虹紪鐮侀泦鍚堬紝澶氫釜浣跨敤鑻辨枃閫楀彿闅斿紑" prop="userIds">
-        <el-input v-model="form.userIds" placeholder="璇疯緭鍏ュ贰妫�璐熻矗浜虹紪鐮侀泦鍚堬紝澶氫釜浣跨敤鑻辨枃閫楀彿闅斿紑" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶勭悊浜虹紪鐮�(鍏宠仈system_user)" prop="dealUserId">
-        <el-input v-model="form.dealUserId" placeholder="璇疯緭鍏ュ鐞嗕汉缂栫爜(鍏宠仈system_user)" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶勭悊鏃堕棿" prop="dealDate">
-        <el-date-picker v-model="form.dealDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ鐞嗘椂闂�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="澶勭悊澶囨敞" prop="dealInfo">
-        <el-input v-model="form.dealInfo" placeholder="璇疯緭鍏ュ鐞嗗娉�" v-trim/>
-      </el-form-item>
-      <el-form-item label="寰幆鍛ㄦ湡  0姣忓ぉ 1姣忓懆 2姣忓ぉ" prop="circleType">
-        <el-input v-model="form.circleType" placeholder="璇疯緭鍏ュ惊鐜懆鏈�  0姣忓ぉ 1姣忓懆 2姣忓ぉ" v-trim/>
-      </el-form-item>
-      <el-form-item label="寰幆閲嶅瑙勫垯 1-31锛屽涓嫳鏂囬�楀彿闅斿紑" prop="circleDays">
-        <el-input v-model="form.circleDays" placeholder="璇疯緭鍏ュ惊鐜噸澶嶈鍒� 1-31锛屽涓嫳鏂囬�楀彿闅斿紑" v-trim/>
-      </el-form-item>
-      <el-form-item label="寮�濮嬫棩鏈�" prop="startDate">
-        <el-date-picker v-model="form.startDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ紑濮嬫棩鏈�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="缁撴潫鏃ユ湡" prop="endDate">
-        <el-date-picker v-model="form.endDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ粨鏉熸棩鏈�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="寮�濮嬫椂闂寸偣" prop="startTime">
-        <el-input v-model="form.startTime" placeholder="璇疯緭鍏ュ紑濮嬫椂闂寸偣" v-trim/>
-      </el-form-item>
-      <el-form-item label="缁撴潫鏃堕棿鐐�" prop="endTime">
-        <el-input v-model="form.endTime" placeholder="璇疯緭鍏ョ粨鏉熸椂闂寸偣" v-trim/>
-      </el-form-item>
-      <el-form-item label="鎵ц杩涘害 0寰呭紑濮� 1杩涜涓� 2瓒呮湡 3宸插畬鎴�" prop="processStatus">
-        <el-input v-model="form.processStatus" placeholder="璇疯緭鍏ユ墽琛岃繘搴� 0寰呭紑濮� 1杩涜涓� 2瓒呮湡 3宸插畬鎴�" v-trim/>
-      </el-form-item>
+
     </el-form>
   </GlobalWindow>
 </template>
@@ -76,11 +54,14 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
+import { fetchList as getLineList } from '@/api/Inspection/ywPatrolLine'
+import { detailById } from '@/api/Inspection/ywPatrolScheme'
+import { getUserList } from '@/api/system/user'
 export default {
   name: 'OperaYwPatrolSchemeWindow',
   extends: BaseOpera,
   components: { GlobalWindow },
-  data () {
+  data() {
     return {
       // 琛ㄥ崟鏁版嵁
       form: {
@@ -95,28 +76,217 @@
         status: '',
         sortnum: '',
         lineId: '',
-        userIds: '',
+        userIds: [],
         dealUserId: '',
         dealDate: '',
         dealInfo: '',
-        circleType: '',
+        circleType: 0,
         circleDays: '',
         startDate: '',
         endDate: '',
         startTime: '',
         endTime: '',
-        processStatus: ''
+        processStatus: '',
+        selDate: [],
       },
-      // 楠岃瘉瑙勫垯
+      lineList: [],
+      staffList: [],
+      weeks: [
+        { la: '鍛ㄤ竴', va: 1, sel: false },
+        { la: '鍛ㄤ簩', va: 2, sel: false },
+        { la: '鍛ㄤ笁', va: 3, sel: false },
+        { la: '鍛ㄥ洓', va: 4, sel: false },
+        { la: '鍛ㄤ簲', va: 5, sel: false },
+        { la: '鍛ㄥ叚', va: 6, sel: false },
+        { la: '鍛ㄦ棩', va: 7, sel: false },
+      ],
+      monthsList: [],
+      selCircleDays: [],
       rules: {
+        title: [{ required: true, message: '璇疯緭鍏�' }],
+        lineId: [{ required: true, message: '璇烽�夋嫨' }],
+        userIds: [{ required: true, message: '璇烽�夋嫨' }],
+        selDate: [{ type: 'array', required: true, message: '璇烽�夋嫨' }],
+        circleDays: [{ required: true, message: '璇烽�夋嫨' }],
       }
     }
   },
-  created () {
+  created() {
     this.config({
       api: '/Inspection/ywPatrolScheme',
       'field.id': 'id'
     })
+  },
+  methods: {
+    open(title) {
+      this.title = title
+      this.visible = true
+    },
+    __confirmCreate () {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        let obj = JSON.parse(JSON.stringify(this.form))
+        obj.userIds = obj.userIds.join(',')
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        this.api.create(obj)
+          .then(() => {
+            this.visible = false
+            this.$tip.apiSuccess('鏂板缓鎴愬姛')
+            this.$emit('success')
+          })
+          .catch(e => {
+            // this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    },
+    __confirmEdit () {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        let obj = JSON.parse(JSON.stringify(this.form))
+        obj.userIds = obj.userIds.join(',')
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        this.api.updateById(obj)
+          .then(() => {
+            this.visible = false
+            this.$tip.apiSuccess('淇敼鎴愬姛')
+            this.$emit('success')
+          })
+          .catch(e => {
+            // this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    },
+    weekClick(i) {
+      this.weeks.forEach((item, index) => {
+        if (i == index) { item.sel = !item.sel }
+      })
+      this.$set(this.form, 'circleDays', this.weeks.filter(j => j.sel).map(a => a.va).join(','))
+    },
+    monthClick(i) {
+      this.monthsList.forEach((item, index) => {
+        if (i == index) { item.sel = !item.sel }
+      })
+      this.$set(this.form, 'circleDays', this.monthsList.filter(j => j.sel).map(a => a.va).join(','))
+    },
+    changeTime(e) {
+      if (e && e.length > 0) {
+        this.$set(this.form, 'startTime', e[0])
+        this.$set(this.form, 'endTime', e[1])
+      } else {
+        this.$set(this.form, 'startTime', '')
+        this.$set(this.form, 'endTime', '')
+      }
+    },
+    changeDate(e) {
+      if (e && e.length > 0) {
+        this.$set(this.form, 'startDate', e[0])
+        this.$set(this.form, 'endDate', e[1])
+      } else {
+        this.$set(this.form, 'startDate', '')
+        this.$set(this.form, 'endDate', '')
+      }
+    },
+    changeType() {
+      this.$set(this.form, 'circleDays', '')
+    },
+    getDetail(id) {
+      detailById(id).then(res => {
+        this.form = res
+        if (res.userIds) {
+          this.$set(this.form, 'userIds', [...res.userIds.split(',').map(item => Number(item))])
+        }
+        if (res.startTime) {
+          this.$set(this.form, 'selTime', [res.startTime, res.endTime])
+        }
+        if (res.circleDays) {
+          const circleDays = res.circleDays.split(',')
+          if (res.circleType == 1) {
+            circleDays.forEach(i => {
+              this.weeks.forEach(j => {
+                if (i == j.va) {
+                  j.sel = true
+                }
+              })
+            })
+          } else {
+            setTimeout(() => {
+              circleDays.forEach(i => {
+                this.monthsList.forEach(j => {
+                  if (i == j.va) {
+                    j.sel = true
+                  }
+                })
+              })
+            }, 500)
+          }
+        }
+        this.$set(this.form, 'selDate', [res.startDate, res.endDate])
+      })
+    },
+    initData() {
+      getLineList({
+        model: {},
+        capacity: 9999,
+        page: 1,
+      }).then(res => {
+        this.lineList = res.records
+      })
+      getUserList({}).then(res => {
+        this.staffList = res
+      })
+      this.monthsList = []
+      for (let i = 1; i < 32; i++) {
+        this.monthsList.push({ la: i, va: i, sel: false })
+      }
+    },
+    close() {
+      this.$refs.form.resetFields()
+      this.visible = false
+    }
   }
+
 }
 </script>
+<style lang="scss" scoped>
+@import '@/assets/style/variables.scss';
+.warnning{
+  padding: 6px 10px;
+  background-color: #fcf3e6;
+  font-size: 12px;
+  color: #333333;
+}
+.weeks {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+
+  .week {
+    border: 1px solid #999999;
+    width: 40px;
+    height: 18px;
+    text-align: center;
+    line-height: 18px;
+    font-size: 12px;
+    margin-right: 8px;
+    cursor: pointer;
+    margin-bottom: 6px;
+  }
+
+  .active {
+    color: $primary-color;
+    border: 1px solid $primary-color;
+  }
+}
+</style>

--
Gitblit v1.9.3