From cfdafcf22dbd868c9876d37efbd92b97ba014bef Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 26 三月 2025 09:17:01 +0800
Subject: [PATCH] 优化

---
 company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue |  647 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 647 insertions(+), 0 deletions(-)

diff --git a/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue b/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue
new file mode 100644
index 0000000..15fb687
--- /dev/null
+++ b/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue
@@ -0,0 +1,647 @@
+<template>
+  <GlobalWindow
+      :title="title"
+      width="100%"
+      text="鎶曚繚鐢宠"
+      :visible.sync="visible"
+      :confirm-working="isWorking"
+      @confirm="confirm"
+  >
+    <div class="list">
+      <el-form :inline="true" ref="form" :model="form" :rules="rules" class="demo-form-inline">
+        <el-form-item label="淇濋櫓鏂规" prop="solutionId">
+          <el-select v-model="form.solutionId" @change="changeSolution" placeholder="璇烽�夋嫨">
+            <el-option
+                v-for="item in company"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鏈熸湜淇濋櫓鐢熸晥璧锋湡" prop="applyStartTime">
+          <div style="display: flex; flex-direction: column;">
+            <el-date-picker
+                @change="getTimeVal"
+                v-model="form.applyStartTime"
+                type="date"
+                class="date_picker"
+                :clearable="false"
+                :disabled="!form.solutionId"
+                :picker-options="pickerOptions"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                format="yyyy-MM-dd HH:mm:ss"
+                placeholder="閫夋嫨鏃ユ湡">
+            </el-date-picker>
+            <span style="color: #F95601; font-size: 14px;">锛堟鏃ョ敓鏁堟姇淇濊浜�17:30鍓嶆彁浜わ紝瓒呮椂鎻愪氦浠ヤ繚闄╁崟涓哄噯锛�</span>
+          </div>
+        </el-form-item>
+        <el-form-item label="淇濋櫓鐢熸晥姝㈡湡" prop="applyEndTime">
+          <el-date-picker
+              disabled
+              v-model="form.applyEndTime"
+              type="date"
+              class="date_picker"
+              :picker-options="pickerOptions"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              format="yyyy-MM-dd HH:mm:ss"
+              placeholder="閫夋嫨鏃ユ湡">
+          </el-date-picker>
+        </el-form-item>
+<!--        <el-form-item label="鎶曚繚骞撮緞" v-if="item && item.id !=null">
+          <span>{{item.minAge}} 鑷� {{item.maxAge}}</span>
+        </el-form-item>
+        <el-form-item label="璐圭敤" v-if="item && item.id !=null">
+          <span>{{item.price}}鍏�</span>
+          <span v-if="item.timeUnit === 0">/澶�</span>
+          <span v-if="item.timeUnit === 1">/鍗婃湀</span>
+          <span v-if="item.timeUnit === 2">/鏈�</span>
+          <span v-if="item.timeUnit === 3">/骞�</span>
+          <span>/浜�</span>
+        </el-form-item>-->
+      </el-form>
+    </div>
+    <div class="btns">
+      <div class="btns_item">
+        <el-button type="primary" @click="seleUser">閫夊彇鍛樺伐</el-button>
+        <el-button type="primary" @click="uploadUser">瀵煎叆鍛樺伐</el-button>
+        <el-button type="primary" @click="addUser">娣诲姞鍛樺伐</el-button>
+        <el-button type="danger" @click="deleItem">鍒犻櫎</el-button>
+      </div>
+      <div class="btns_item">
+        <div style="display: inline-block;margin-right: 30px;font-size: 14px" v-if="item && item.id !=null">
+          <span>鎶曚繚骞撮緞锛�</span>
+          <span>{{item.minAge}} 鑷� {{item.maxAge}}鍛ㄥ瞾</span>
+          <span style="margin-left: 20px">璐圭敤锛�</span>
+          <span>{{item.price}}鍏�</span>
+          <span v-if="item.timeUnit === 0">/澶�</span>
+          <span v-if="item.timeUnit === 1">/鍗婃湀</span>
+          <span v-if="item.timeUnit === 2">/鏈�</span>
+          <span v-if="item.timeUnit === 3">/骞�</span>
+          <span>/浜�</span>
+        </div>
+        <div style="display: inline-block;margin-right: 30px;font-size: 14px"><span>鍚堣璐圭敤锛�</span>
+        <span style="font-weight: bold;color: red">{{sumFee}}</span>鍏�
+        </div>
+        <el-button type="primary" @click="sele">閫夊彇娲鹃仯鍗曚綅</el-button>
+      </div>
+    </div>
+<!--    show-summary
+    :summary-method="getSummaries"-->
+    <u-table
+        :data="tableData"
+        border
+        use-virtual
+        :row-height="30"
+        :height="680"
+        ref="multipleTable"
+        @selection-change="handleSelectionChange"
+        style="width: 100%;margin-bottom: 15px;">
+      <u-table-column
+          type="selection"
+          width="55">
+      </u-table-column>
+      <u-table-column label="搴忓彿" width="80px">
+        <template slot-scope="scope">
+          <span>{{scope.$index + 1}}</span>
+        </template>
+      </u-table-column>
+      <u-table-column
+          prop="memberName"
+          label="濮撳悕">
+      </u-table-column>
+      <u-table-column
+          prop="idCard"
+          label="韬唤璇佸彿">
+      </u-table-column>
+      <u-table-column
+          label="骞撮緞">
+        <template slot-scope="{row}">
+          <template v-if="item">
+            <span style="color: red;" v-if="row.idCard && (getAgeByIdCard(row.idCard) < item.minAge || getAgeByIdCard(row.idCard) > item.maxAge)">{{ getAgeByIdCard(row.idCard) }}</span>
+            <span v-else>{{ getAgeByIdCard(row.idCard) }}</span>
+          </template>
+        </template>
+      </u-table-column>
+      <u-table-column
+          prop="duName"
+          label="娲鹃仯鍗曚綅">
+      </u-table-column>
+      <u-table-column
+          prop="workTypeName"
+          label="鎵�灞炲伐绉�">
+      </u-table-column>
+      <u-table-column
+          prop="fee"
+          label="璐圭敤">
+        <template slot-scope="{row}">
+          {{row.fee}}
+        </template>
+      </u-table-column>
+      <u-table-column
+          prop="remark"
+          align="center"
+          label="澶囨敞">
+        <template slot-scope="{row}">
+          <el-input v-model="row.remark" placeholder="璇疯緭鍏�"></el-input>
+        </template>
+      </u-table-column>
+      <u-table-column
+          label="鎿嶄綔">
+        <template slot-scope="scope">
+          <el-button type="text" style="color: red;" @click="dele(scope.$index)">鍒犻櫎</el-button>
+        </template>
+      </u-table-column>
+    </u-table>
+    <div class="info" v-if="item">
+      <span v-if="item.specialAgreement"  v-html="item.specialAgreement"></span>
+      <span v-if="item.specialInfo" v-html="item.specialInfo"> </span>
+      <span v-if="item.ortherInfo" v-html="item.ortherInfo"></span>
+    </div>
+    <!--    閫夋嫨鍛樺伐    -->
+    <selectEmployees ref="selectEmployees" @result="getValue" />
+    <!--    娣诲姞鍛樺伐    -->
+    <addEmployee ref="addEmployee" @result="getValue" />
+    <!--    瀵煎叆鍚嶅崟    -->
+    <importEmployees ref="importEmployees" @result="getValue" />
+    <!--    纭宸ョ    -->
+    <confirmJobType ref="confirmJobType" @result="getUser" />
+    <!--    鏌ョ湅璇﹀崟    -->
+    <detailsPolicyholder ref="detailsPolicyholder" @success="successEvent" />
+<!--    &lt;!&ndash;    鐩翠繚鎶曚繚璇︽儏    &ndash;&gt;
+    <OperaInsuranceApplyDetails ref="OperaInsuranceApplyDetails" />
+    &lt;!&ndash;    濮旀墭鎶曚繚璇︽儏    &ndash;&gt;
+    <OperaWtbApplyShopWindow ref="OperaWtbApplyShopWindow" />-->
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import selectEmployees from '@/components/enterprise/selectEmployees'
+import addEmployee from '@/components/enterprise/addEmployeeWithDu'
+import importEmployees from '@/components/enterprise/importEmployees'
+import confirmJobType from '@/components/enterprise/confirmJobType'
+import detailsPolicyholder from '@/components/business/detailsPolicyholder'
+import { all, getNewVersion } from '@/api/business/solutions'
+import { mapState } from 'vuex'
+import { create, getCountCyclePriceVO, getDetail, findList } from '@/api/business/insuranceApply'
+import { UTable, UTableColumn } from 'umy-ui'
+export default {
+  name: 'OperaInsuranceApplyAddWindowNew',
+  extends: BaseOpera,
+  components: {
+    GlobalWindow,
+    selectEmployees,
+    addEmployee,
+    importEmployees,
+    confirmJobType,
+    detailsPolicyholder,
+    UTable,
+    UTableColumn
+  },
+  data () {
+    return {
+      sumFee: 0,
+      form: {
+        id: null,
+        ID: null,
+        solutionId: '',
+        applyStartTime: '',
+        applyEndTime: ''
+      },
+      solutionName: '',
+      type: '',
+      pickerOptions: {}, // 瀛樻斁picker options鐨勫彉閲�
+      price: '',
+      company: [],
+      seleData: [],
+      item: null,
+      // 楠岃瘉瑙勫垯
+      rules: {
+        solutionId: [
+          { required: true, message: '璇烽�夋嫨淇濋櫓鏂规' }
+        ],
+        applyStartTime: [
+          { required: true, message: '璇烽�夋嫨鏈熸湜淇濋櫓鐢熸晥璧锋湡' }
+        ]
+      },
+      tableData: []
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/insuranceApply',
+      'field.id': 'id'
+    })
+  },
+  computed: {
+    ...mapState(['userInfo'])
+  },
+  watch: {
+    // 鐩戝惉tableData鐨勫彉鍖�
+    tableData: {
+      deep: true,
+      handler (newVal, oldVal) {
+        // 鏁版嵁鍙樺寲鏃剁殑澶勭悊閫昏緫
+        this.getSummaries2()
+        console.log(this.tableData.length)
+      }
+    }
+  },
+  methods: {
+    successEvent () {
+      const arr = JSON.parse(JSON.stringify(this.tableData))
+      arr.forEach(item => {
+        item.idcardNo = item.idCard
+      })
+      this.isWorking = true
+      // if (!this.form.id) {
+      create({
+        applyDetailList: arr,
+        applyStartTime: this.form.applyStartTime,
+        applyEndTime: this.form.applyEndTime,
+        solutionId: this.form.solutionId
+      }).then(res => {
+        console.log(res)
+        this.$emit('success', 1, { id: res,godetail:true,type:this.item.type})
+        this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+        this.visible = false
+        // this.$emit('success','濮旀墭鎶曚繚璇︽儏', { id: res })
+      })
+        .catch(e => {
+          this.$tip.apiFailed(e)
+        })
+        .finally(() => {
+          this.isWorking = false
+        })
+      // } else {
+      //     updateData({
+      //         id: this.form.id,
+      //         applyDetailList: arr,
+      //         applyStartTime: this.form.applyStartTime,
+      //         applyEndTime: this.form.applyEndTime,
+      //         solutionId: this.form.solutionId
+      //     }).then(() => {
+      //         this.visible = false
+      //         this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+      //         this.$emit('success')
+      //     }).catch(e => {
+      //         this.$tip.apiFailed(e)
+      //     })
+      //         .finally(() => {
+      //             this.isWorking = false
+      //         })
+      // }
+    },
+    open (title, target) {
+      this.title = title
+      this.tableData = []
+      this.form.id = null
+      this.item = {}
+      if (target.type) {
+        this.type = target.type
+      }
+      this.form.solutionId = ''
+      this.form.applyStartTime = ''
+      this.form.applyEndTime = ''
+      if (target && target.id) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form.id = target.id
+          this.getDetails()
+        })
+      } else {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+      }
+      this.getCompany()
+      this.visible = true
+      this.updatePickerOptions()
+    },
+    // 鑾峰彇鎶曚繚璇︽儏
+    getDetails () {
+      findList({ applyId: this.form.id })
+        .then(res => {
+          res.forEach(item => {
+            console.log(item)
+            item.idCard = item.idcardNo
+            item.fee = ''
+            if (this.type === 1) {
+              // item.duName = ''
+              // item.duId = ''
+              // item.worktypeId = ''
+              // item.workTypeName = ''
+            }
+          })
+          this.tableData = res
+        })
+      getDetail(this.form.id)
+        .then(res => {
+          // this.form.solutionId = res.solutionId
+          this.changeSolution1(res.solutionId)
+        })
+    },
+    getSummaries ({ columns, data }) {
+      const sums = []
+      // this.currentData = data; //璁板綍褰撳墠椤垫暟鎹�;
+      columns.forEach((column, index) => {
+        if (index == 0) {
+          sums[index] = '鎬讳环'
+        } else if (index == 7) {
+          // if (this.item || this.item.type == 1) {
+          //   sums[index] = '-'
+          // } else {
+          let total = 0
+          this.tableData.forEach(item => {
+            total += item.fee
+          })
+          sums[index] = total.toFixed(2)
+          // }
+        } else {
+          sums[index] = ''
+        }
+      })
+      console.log(sums)
+      return sums
+    },
+    getSummaries2 () {
+      this.sumFee = 0
+      if (this.tableData && this.tableData.length) {
+        this.tableData.forEach((column, index) => {
+          this.sumFee = parseFloat(this.sumFee) + parseFloat(column.fee)
+        })
+        this.sumFee = (this.sumFee || 0).toFixed(2)
+      }
+    },
+    deleItem () {
+      if (this.seleData.length === 0) {
+        this.$message.warning('鑷冲皯閫夋嫨涓�椤瑰唴瀹�')
+        return
+      }
+      this.seleData.forEach(item => {
+        this.tableData.forEach((row, index) => {
+          if (item === row.idCard) {
+            this.tableData.splice(index, 1)
+          }
+        })
+      })
+      // this.getSummaries2()
+    },
+    confirm () {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          if (this.tableData.length === 0) {
+            this.$message.warning('鑷冲皯娣诲姞涓�椤瑰憳宸�')
+            return
+          }
+          for (let i = 0; i < this.tableData.length; i++) {
+            console.log(this.tableData[i].worktypeId)
+            console.log(this.tableData[i].duId)
+            if (!this.tableData[i].worktypeId || !this.tableData[i].duId) {
+              this.$message.warning('璇峰畬鍠勬淳閬e崟浣嶅拰宸ョ淇℃伅')
+              return
+            }
+          }
+
+          let price = 0
+          // if (this.item && this.item.type != 1) {
+          this.tableData.forEach(item => {
+            price = price + item.fee
+          })
+          // }
+          this.$refs.detailsPolicyholder.open('鎶曚繚璇︽儏鍗�', {
+            companyName: this.userInfo.company.name,
+            solutionName: this.item.name,
+            solutionType: this.item.type,
+            applyStartTime: this.form.applyStartTime,
+            applyEndTime: this.form.applyEndTime,
+            insureNum: this.tableData.length,
+            totalPrice: price,
+            detailList: this.tableData
+          })
+        }
+      })
+    },
+    // 鑾峰彇缁撴潫鏃堕棿鍜屼环鏍�
+    getTimeVal (time) {
+      getCountCyclePriceVO({
+        solutionsId: this.form.solutionId,
+        startDate: time
+      }).then(res => {
+        this.price = res.cyclePrice
+        this.form.applyEndTime = res.endDate
+        this.tableData.forEach(item => {
+          item.fee = res.cyclePrice
+        })
+        this.$forceUpdate()
+      })
+    },
+    getDate (n) { // n涓哄灏戝ぉ锛�-浠h〃寰�鍓嶏紝+浠h〃寰�鍚�
+      const date1 = new Date()
+      const time1 = date1.getFullYear() + '-' + (date1.getMonth() + 1) + '-' + date1.getDate()// time1琛ㄧず褰撳墠鏃堕棿
+      const date2 = new Date(date1)
+      date2.setDate(date1.getDate() + n)
+      const time2 = date2.getFullYear() + '-' + ('0' + (date2.getMonth() + 1)).slice(-2) + '-' + ('0' + date2.getDate()).slice(-2)
+      return time2
+    },
+    updatePickerOptions () {
+      var that = this
+      this.pickerOptions = {
+        disabledDate (time) {
+          if (!that.item) return
+          if (that.item.validType === 1) {
+            // 娆℃湀
+            const currentDate = new Date()
+            currentDate.setMonth(currentDate.getMonth() + 1)
+            currentDate.setDate(1)
+            return time.getTime() <= new Date(currentDate.toLocaleString()).getTime() - 8.64e7
+          } else if (that.item.validType === 0) {
+            // 澶氬皯鏃ュ悗鐢熸晥
+            return time.getTime() <= new Date(that.getDate(that.item.validTypeNum - 1)).getTime()
+          }
+        }
+      }
+    },
+    seleUser () {
+      if (!this.form.solutionId) {
+        this.$message.warning('璇峰厛閫夋嫨淇濋櫓鏂规')
+        return
+      }
+      this.$refs.selectEmployees.open('閫夊彇鍛樺伐', { arr: this.tableData, price: this.price, type: 1 })
+    },
+    addUser () {
+      if (!this.form.solutionId) {
+        this.$message.warning('璇峰厛閫夋嫨淇濋櫓鏂规')
+        return
+      }
+      this.$refs.addEmployee.open('娣诲姞鍛樺伐', { arr: this.tableData, price: this.price, solutionId: this.form.solutionId })
+    },
+    uploadUser () {
+      if (!this.form.solutionId) {
+        this.$message.warning('璇峰厛閫夋嫨淇濋櫓鏂规')
+        return
+      }
+      this.$refs.importEmployees.open('涓婁紶鍚嶅崟', { arr: this.tableData, solutionId: this.form.solutionId, type: 1, price: this.price })
+    },
+    // 鍒囨崲鏂规
+    changeSolution (e) {
+      this.sumFee = 0
+      this.form.applyEndTime = ''
+      this.form.applyStartTime = ''
+      if (!this.form.id) {
+        this.tableData = []
+      } else {
+        this.price = 0
+        this.tableData.forEach(item => {
+          item.fee = 0
+          item.duName = ''
+          item.duId = ''
+          item.workTypeName = ''
+          item.workTypeId = ''
+        })
+      }
+      this.company.forEach(item => {
+        if (item.id === e) {
+          this.price = item.price
+          this.item = item
+          // if (this.item && this.item.type == 1) {
+          //   this.item.fee = 0
+          // }
+          this.updatePickerOptions()
+        }
+      })
+      this.tableData.forEach(item => {
+        item.fee = this.price
+      })
+    },
+    // 鍒囨崲鏂规
+    changeSolution1 (e) {
+      getNewVersion(e)
+        .then(res => {
+          this.form.solutionId = res.id
+          this.company.forEach(item => {
+            if (item.id === res.id) {
+              this.price = item.price
+              this.item = item
+              this.updatePickerOptions()
+            }
+          })
+        })
+      this.tableData.forEach(item => {
+        // if (this.item.type != 0) {
+        item.fee = this.price
+        // }
+      })
+    },
+    dele (index) {
+      this.tableData.splice(index, 1)
+      // this.getSummaries2()
+    },
+    getUser (obj) {
+      this.seleData.forEach(id => {
+        this.tableData.forEach(row => {
+          if (id === row.idCard) {
+            row.workTypeName = obj.workTypeName
+            row.worktypeId = obj.worktypeId
+            row.duName = obj.duName
+            row.duId = obj.duId
+          }
+        })
+      })
+      this.seleData = []
+      this.$refs.multipleTable.clearSelection()
+    },
+    // 閫夋嫨鍛樺伐
+    sele () {
+      if (!this.form.solutionId) {
+        this.$message.warning('璇烽�夋嫨淇濋櫓鏂规')
+        return
+      }
+      if (this.seleData.length === 0) {
+        this.$message.warning('璇烽�夋嫨鍛樺伐')
+        return
+      }
+      this.$refs.confirmJobType.open('纭宸ョ', { solutionId: this.form.solutionId })
+    },
+    // 鏌ヨ鍏ㄩ儴鏂规
+    getCompany () {
+      all({})
+        .then(res => {
+          this.company = res
+        })
+    },
+    getAgeByIdCard (idCard) {
+      const sexAndAge = {}
+      // 鑾峰彇鐢ㄦ埛韬唤璇佸彿鐮�
+      const userCard = idCard
+      // 濡傛灉鐢ㄦ埛韬唤璇佸彿鐮佷负undefined鍒欒繑鍥炵┖
+      if (!userCard) {
+        return sexAndAge
+      }
+      // 鑾峰彇鍑虹敓鏃ユ湡
+      const yearBirth = userCard.substring(6, 10)
+      const monthBirth = userCard.substring(10, 12)
+      const dayBirth = userCard.substring(12, 14)
+      // 鑾峰彇褰撳墠骞存湀鏃ュ苟璁$畻骞撮緞
+      const myDate = new Date()
+      const monthNow = myDate.getMonth() + 1
+      const dayNow = myDate.getDate()
+      let age = myDate.getFullYear() - yearBirth
+      if (monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)) {
+        age--
+      }
+      // 寰楀埌骞撮緞
+      sexAndAge.age = age
+      return sexAndAge.age
+    },
+    handleSelectionChange (e) {
+      this.seleData = e.map(item => item.idCard)
+    },
+    getValue (list) {
+      this.tableData.push(...list)
+      this.getSummaries2()
+    }
+  }
+}
+</script>
+
+<style>
+.el-picker-panel__footer .el-button--text.el-picker-panel__link-btn {
+  display: none;
+}
+</style>
+
+<style lang="scss" scoped>
+.list {
+  width: 100%;
+}
+.btns {
+  width: 100%;
+  margin-bottom: 15px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  .btns_item {
+    display: flex;
+    align-items: center;
+  }
+}
+.submit {
+  width: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin-bottom: 15px;
+}
+.info {
+  width: 100%;
+  font-size: 14px;
+  color: black;
+  span{
+    display: block;
+  }
+}
+</style>

--
Gitblit v1.9.3