From 887851419d98568a815de95a6a96fbdfb3dfcf38 Mon Sep 17 00:00:00 2001
From: qx <1084500556@qq.com>
Date: 星期四, 26 六月 2025 15:21:22 +0800
Subject: [PATCH] qx

---
 src/views/reservation/roupsettlement/index.vue |  619 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 619 insertions(+), 0 deletions(-)

diff --git a/src/views/reservation/roupsettlement/index.vue b/src/views/reservation/roupsettlement/index.vue
new file mode 100644
index 0000000..5c34e59
--- /dev/null
+++ b/src/views/reservation/roupsettlement/index.vue
@@ -0,0 +1,619 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-row>
+        <el-col>
+          <el-form-item label="濮撳悕" prop="name">
+            <el-input style="width: 120px" v-model="queryParams.name" placeholder="璇疯緭鍏ュ鍚�" clearable
+              @keyup.enter.native="handleQuery" />
+          </el-form-item>
+          <el-form-item label="韬唤璇佸彿" prop="idCard">
+            <el-input v-model="queryParams.idCard" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" clearable @keyup.enter.native="handleQuery" />
+          </el-form-item>
+
+          <el-form-item label="鍗曚綅鍚嶇О" prop="company">
+            <el-select :remote-method="getRemoteData" v-model="queryParams.company" remote default-first-option
+              allow-create filterable style="width: 200px" placeholder="璇烽�夋嫨鍗曚綅鍚嶇О" clearable @change="idFn1">
+              <el-option v-for="dict in CompanyList" :key="dict.cnName" :label="dict.cnName"
+                :value="dict.drugManufacturerId" />
+            </el-select>
+            <i class="el-icon-circle-plus-outline" @click="handleAdd1"></i>
+          </el-form-item>
+
+          <el-form-item label="缁撶畻鏃堕棿">
+            <el-date-picker clearable v-model="queryParams.reservationTime" type="date" value-format="yyyy-MM-dd"
+              placeholder="璇烽�夋嫨缁撶畻鏃堕棿">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col>
+          <el-form-item label="鑱旂郴鐢佃瘽" prop="phoe">
+            <el-input v-model="queryParams.phoe" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" clearable @keyup.enter.native="handleQuery"
+              style="width: 140px" />
+          </el-form-item>
+          <el-form-item label="缁撶畻鐘舵��" prop="isExpire">
+            <el-select v-model="queryParams.isExpire" placeholder="璇烽�夋嫨鏄惁瓒呮湡" clearable style="width: 140px">
+              <el-option v-for="dict in options" :key="dict.value" :label="dict.label" :value="dict.value" />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-row :gutter="10" style="margin: 10px 15px">
+      <el-col :span="1.5">
+        <el-button type="primary"  size="mini" :disabled="multiple" @click="batch">缁撶畻</el-button>
+        <!--  v-hasPermi="['reservation:reservation:remove']" -->
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="reservationList" @selection-change="handleSelectionChange"
+      :default-sort="{ prop: 'reservationTime', order: 'descending' }" highlight-current-row style="margin-left: 15px">
+      <el-table-column type="selection" width="40px" align="center" fixed="left" :selectable="selectHandle" />
+      <el-table-column label="濮撳悕" align="center" prop="name" width="90px" :show-overflow-tooltip="true" fixed="left" />
+      <el-table-column label="鎬у埆" align="center" prop="sex" width="60px" :show-overflow-tooltip="true">
+        <template slot-scope="scope">
+          <span v-if="scope.row.sex == '0'">鐢�</span>
+          <span v-if="scope.row.sex == '1'">濂�</span>
+          <span v-if="scope.row.sex == '2'">鏈煡</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="骞撮緞" align="center" prop="age" width="60px" :show-overflow-tooltip="true" />
+      <el-table-column label="韬唤璇佸彿" align="center" prop="idCard" width="170px" :show-overflow-tooltip="true" />
+      <el-table-column label="鍑虹敓鏃ユ湡" align="center" prop="birthday" width="100px" :show-overflow-tooltip="true">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.birthday, "{y}-{m}-{d}") }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="鑱旂郴鐢佃瘽" align="center" prop="phoe" width="110px" :show-overflow-tooltip="true" />
+      <el-table-column label="鍗曚綅鍚嶇О" align="center" prop="company" :show-overflow-tooltip="true" />
+      <el-table-column label="鏀惰垂閲戦" align="center" prop="email" width="160px" />
+      <el-table-column label="鐧昏鏃堕棿" align="center" prop="reservationTime" width="100px" :show-overflow-tooltip="true"
+        sortable>
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.reservationTime, "{y}-{m}-{d}") }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="缁撶畻鏃堕棿" align="center" prop="reservationTime" width="100px" :show-overflow-tooltip="true"
+        sortable>
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.reservationTime, "{y}-{m}-{d}") }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="缁撶畻鐘舵��" align="center" prop="tjType" width="80px" :show-overflow-tooltip="true">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.dict_team" :value="scope.row.tjType" />
+        </template>
+      </el-table-column>
+      <el-table-column label="浣撴鐘舵��" align="center" prop="tjType" width="80px" :show-overflow-tooltip="true">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.dict_team" :value="scope.row.tjType" />
+        </template>
+      </el-table-column>
+
+
+
+      <el-table-column label="鎿嶄綔" align="center" width="90px" fixed="right">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-s-order" @click="handleUpdate1(scope.row)"
+            title="缁撶畻"></el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <div class="pag">
+      <div class="pag1">
+        <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
+          :limit.sync="queryParams.pageSize" @pagination="getList" />
+      </div>
+    </div>
+
+
+    <el-dialog :title="title" :visible.sync="open1" width="1000px" append-to-body>
+      <el-form ref="form1" :model="form1" :rules="rules1" label-width="100px" :inline="true">
+        <el-form-item label="鍗曚綅鍚嶇О" prop="cnName">
+          <el-input v-model="form1.cnName" placeholder="璇疯緭鍏ヤ腑鏂囧悕绉�" />
+        </el-form-item>
+        <el-form-item label="鑱旂郴浜�" prop="contactPerson">
+          <el-input v-model="form1.contactPerson" placeholder="璇疯緭鍏ヨ仈绯讳汉" />
+        </el-form-item>
+        <el-form-item label="鑱旂郴鐢佃瘽" prop="contactPhone">
+          <el-input v-model="form1.contactPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
+        </el-form-item>
+        <el-form-item label="绋庡彿" prop="taxNumber">
+          <el-input v-model="form1.taxNumber" placeholder="璇疯緭鍏ョ◣鍙�" />
+        </el-form-item>
+        <el-form-item label="娉曚汉" prop="legalPerson">
+          <el-input v-model="form1.legalPerson" placeholder="璇疯緭鍏ユ硶浜�" />
+        </el-form-item>
+        <el-form-item label="娉ㄥ唽鍦板潃" prop="registerAddress">
+          <el-input v-model="form1.registerAddress" placeholder="璇疯緭鍏ユ敞鍐屽湴鍧�" />
+        </el-form-item>
+        <el-form-item label="閫氳鍦板潃" prop="mailingAddress">
+          <el-input v-model="form1.mailingAddress" placeholder="璇疯緭鍏ラ�氳鍦板潃" />
+        </el-form-item>
+        <el-form-item label="寮�鎴烽摱琛�" prop="bankAccount">
+          <el-input v-model="form1.bankAccount" placeholder="璇疯緭鍏ュ紑鎴烽摱琛�" />
+        </el-form-item>
+        <el-form-item label="閾惰璐︽埛" prop="countNum">
+          <el-input v-model="form1.countNum" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" />
+        </el-form-item>
+        <el-form-item label="閭" prop="email">
+          <el-input v-model="form1.email" placeholder="璇疯緭鍏ラ偖绠�" />
+        </el-form-item>
+        <el-form-item label="璐熻矗浜�" prop="principal">
+          <el-input v-model="form1.principal" placeholder="璇疯緭鍏ヨ礋璐d汉" />
+        </el-form-item>
+        <el-form-item label="缃戝潃" prop="url">
+          <el-input v-model="form1.url" placeholder="璇疯緭鍏ョ綉鍧�" />
+        </el-form-item>
+        <el-form-item label="浼犵湡" prop="faxNumber">
+          <el-input v-model="form1.faxNumber" placeholder="璇疯緭鍏ヤ紶鐪�" />
+        </el-form-item>
+        <el-form-item label="琛屾斂鍖哄垝鍚嶇О" prop="areaName">
+          <el-input v-model="form1.areaName" placeholder="璇疯緭鍏ヨ鏀垮尯鍒掑悕绉�" />
+        </el-form-item>
+        <el-form-item label="鎺掑簭" prop="orderNum">
+          <el-input v-model="form1.orderNum" placeholder="璇疯緭鍏ユ帓搴�" />
+        </el-form-item>
+        <el-form-item label="鏈夋晥鏃堕棿" prop="validTime">
+          <el-date-picker clearable v-model="form1.validTime" type="date" value-format="yyyy-MM-dd"
+            placeholder="璇烽�夋嫨鏈夋晥鏃堕棿">
+          </el-date-picker> </el-form-item><br />
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input v-model="form1.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" :rows="2" label-width="400px"
+            style="width: 830px" resize="none"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer2">
+        <el-button type="primary" @click="submitFormS">纭� 瀹�</el-button>
+        <el-button @click="cancel1">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { addComp } from "@/api/system/comp";
+import {
+  listReservation,
+} from "@/api/reservation/reservation";
+import {
+  getconfigKey,
+} from "@/api/system/tijian";
+import { getCompany, queryCompany } from "@/api/team/tuanti";
+import VTreeTransfer from "../../system/tijian/TreeTransfer.vue";
+export default {
+  components: {
+    VTreeTransfer,
+  },
+  name: "Reservation",
+  dicts: [
+    "dict_user_national",
+    "dict_user_national",
+    "dict_user_marry",
+    "sys_yes_no",
+    "sys_user_sex",
+    "dict_team",
+    "tj_time_region",
+    "dict_tjtype",
+    "dict_job",
+    "dict_user_cardtype",
+    "dict_ageunit",
+  ],
+  data() {
+    let checkPhoneNum = (rule, value, callback) => {
+      let patter = new RegExp(/^1\s*[3456789]\s*(\d\s*){9}$/);
+      if (value == "" && value == undefined && !value) {
+        return callback("");
+      } else if (value != undefined && value != "") {
+        return callback();
+      } else if (!patter.test(value)) {
+        return callback("");
+      }
+    };
+    return {
+      index: 0,
+      proIds: "",
+      alue: "2",
+      pacName: "",
+      url: "",
+      list: [],
+      // 閬僵灞�
+      loading: false,
+      size: "",
+      tcShow: false,
+      // 鎼滅储濂楅鍚嶅瓧
+      name: "",
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+
+      pacId: "",
+      cusIds: [],
+      createTimeList: "",
+      startTime: "",
+      proIds: [],
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鏍戠姸褰㈢姸
+      data: [],
+      // 鏌ヨ鍙傛暟
+      queryParam: {
+        pageNum: 1,
+        pageSize: 10,
+        pacName: null,
+        pacRemark: null,
+      },
+      socket: null,
+      value: 1,
+      sendFlag: 0,
+      sector: 0,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+      },
+
+      fmobj: {},
+      // 琛ㄥ崟鏍¢獙
+      form1: {},
+      open1: false,
+      rules1: {
+        cnName: [{ required: true, trigger: "blur" }],
+        contactPerson: [{ required: true, trigger: "blur" }],
+        contactPhone: [
+          {
+            required: true,
+            trigger: "blur",
+          },
+          {
+            pattern: /^1[3-9]\d{9}$/,
+            trigger: "blur",
+          },
+        ],
+      },
+      rules: {
+        cusName: [
+          { required: true, validator: checkPhoneNum, trigger: "blur" },
+        ],
+        cusSex: [
+          { required: true, validator: checkPhoneNum, trigger: "change" },
+        ],
+        cusBrithday: [
+          { required: true, validator: checkPhoneNum, trigger: "blur" },
+        ],
+        cusPhone: [
+          { required: true, validator: checkPhoneNum, trigger: "blur" },
+        ],
+        reservationTime: [
+          { required: true, validator: checkPhoneNum, trigger: "change" },
+        ],
+        timeRegion: [
+          { required: true, validator: checkPhoneNum, trigger: "blur" },
+        ],
+      },
+      options: [
+        {
+          value: "1",
+          label: "宸茬粨绠�",
+        },
+        {
+          value: "2",
+          label: "鏈粨绠�",
+        },
+      ],
+      CompanyList: [],
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 浣撴棰勭害琛ㄦ牸鏁版嵁
+      reservationList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        orderByColumn: "reservationTime",
+        isAsc: "desc",
+        name: null,
+        reservationTime: null,
+        idCard: null,
+        phoe: null,
+        email: null,
+        tjType: null,
+        company: null,
+        reservationTime: null,
+        isExpire: null,
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        name: [
+          {
+            required: true,
+            validator: checkPhoneNum,
+            trigger: "blur",
+          },
+        ],
+        idCard: [
+          {
+            required: true,
+            validator: checkPhoneNum,
+            trigger: "blur",
+          },
+        ],
+        phoe: [
+          {
+            required: true,
+            validator: checkPhoneNum,
+            trigger: "blur",
+          },
+        ],
+
+      },
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: "鏈�杩戜竴鍛�",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date(new Date().setHours(0, 0, 0, 0));
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "鏈�杩戜竴涓湀",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date(new Date().setHours(0, 0, 0, 0));
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "鏈�杩戜笁涓湀",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date(new Date().setHours(0, 0, 0, 0));
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+        ],
+      },
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+
+    getCompanyList() {
+      this.loading = true;
+      getconfigKey("team_reservation_default_day").then((res) => {
+        this.queryParams.yxts = res.msg;
+      });
+      getCompany(this.queryParam).then((response) => {
+        this.CompanyList = response.data;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    cancel1() {
+      this.open1 = false;
+      this.reset1();
+    },
+    submitFormS() {
+      this.$refs["form1"].validate((valid) => {
+        if (valid) {
+          addComp(this.form1).then((response) => {
+            this.$modal.msgSuccess("鏂板鎴愬姛");
+            this.open1 = false;
+            this.getCompanyList();
+          });
+        }
+      });
+    },
+    reset1() {
+      this.form1 = {
+        company: "",
+        payType: "",
+        name: "",
+        phoe: "",
+        signingPic: "",
+      };
+    },
+    handleAdd1() {
+      this.reset1();
+      this.open1 = true;
+      this.title = "娣诲姞浣撴鍗曚綅淇℃伅缁存姢";
+    },
+    idFn1(value) {
+      if (value) {
+        this.form.dictCompId = value;
+        this.CompanyList.forEach((item) => {
+          if (item.drugManufacturerId == this.form.dictCompId) {
+            this.form.compName = item.cnName;
+            this.queryParams.company = item.cnName;
+          }
+        });
+      }
+    },
+    /** 鏌ヨ浣撴棰勭害鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listReservation(this.queryParams).then((response) => {
+        this.reservationList = response.rows;
+        //  response.rows.forEach((item, index) =>
+        // {item.newID =(this.queryParams.pageNum - 1) * this.queryParams.pageSize +index +1;
+        //   });
+        this.total = response.total;
+        this.loading = false;
+      });
+      // 鑾峰彇鍗曚綅淇℃伅闆嗗悎
+      getCompany(this.queryParam).then((response) => {
+        this.CompanyList = response.data;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 浣撴鍏徃鎷奸煶鎼滅储
+    getRemoteData(query) {
+      if (query) {
+        let compName = query;
+        queryCompany(compName).then((response) => {
+          this.CompanyList = response.data;
+        });
+      }
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: null,
+        name: null,
+        sex: null,
+        age: null,
+        idCard: null,
+        birthday: null,
+        phoe: null,
+        email: null,
+        address: null,
+        marriage: null,
+        nation: null,
+        tjCategory: null,
+        tjType: null,
+        proIds: null,
+        pacId: null,
+        company: null,
+        companyId: null,
+        jobNo: null,
+        department: null,
+        departmentId: null,
+        position: null,
+        createTime: null,
+        createBy: null,
+        updateTime: null,
+        updateBy: null,
+        reservationTime: null,
+        isExpire: null,
+        deleted: null,
+        payType: null,
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.startTime = [];
+      this.createTimeList = [];
+      this.resetForm("queryForm");
+      this.queryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        cusName: null,
+        cusSex: null,
+        cusBrithday: null,
+        cusAddr: null,
+        cusPhone: null,
+        yykssj: "", // 棰勭害寮�濮嬫椂闂�
+        yyjssj: "", // 棰勭害缁撴潫鏃堕棿
+        cusPostcode: null,
+        cusEmail: null,
+        indexCard: null,
+        cusNational: null,
+        cusMarryStatus: null,
+        cusIdcard: null,
+        cusIntroduce: null,
+        cusNumber: null,
+        cusIsvip: null,
+      };
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.cusIds = selection.map((item) => item.idCard);
+      selection.forEach((item) => {
+        this.fmobj = item;
+      });
+      this.ids = selection.map((item) => item.id);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+    },
+    selectHandle(row, index) {
+      if (row.isExpire === 1) {
+        return false;
+      } else {
+        return true;
+      }
+    },
+    /** 缁撶畻 */
+    handleUpdate1(row) {
+
+    },
+
+    batch() {
+
+    },
+  },
+};
+</script>
+<style scoped>
+.pag {
+  width: 100%;
+  display: flex;
+  justify-content: center;
+}
+
+.pag1 {
+  width: 30%;
+}
+
+.el-table .el-table__body tr:hover td {
+  background-color: #e5f3ff;
+}
+
+.el-table__header-wrapper .el-checkbox {
+  display: none;
+}
+
+
+.tab {
+  display: flex;
+  width: 100%;
+}
+
+.dialog-footer2 {
+  width: 960px;
+  height: 36px;
+  display: flex;
+  justify-content: center;
+}
+</style>

--
Gitblit v1.8.0