Administrator
2021-08-11 f5d88e4f31bec1d77721c0795afde3f3a571e9aa
Merge branch 'master' of http://192.168.0.105:10010/r/zhba_enterprises
20 files modified
2 files added
1095 ■■■■ changed files
src/api/performance/performance.js 27 ●●●●● patch | view | raw | blame | history
src/api/system/user.js 4 ●●●● patch | view | raw | blame | history
src/api/talk/talk.js 50 ●●●●● patch | view | raw | blame | history
src/router/views/index.js 16 ●●●●● patch | view | raw | blame | history
src/views/dispatch/dispatchChildoperable.vue 28 ●●●●● patch | view | raw | blame | history
src/views/dispatch/dispatchChildoperableSee.vue 31 ●●●● patch | view | raw | blame | history
src/views/people/expression.vue 39 ●●●●● patch | view | raw | blame | history
src/views/people/job.vue 8 ●●●● patch | view | raw | blame | history
src/views/resource/uploadNotice.vue 8 ●●●●● patch | view | raw | blame | history
src/views/securityEquipment/car.js 18 ●●●● patch | view | raw | blame | history
src/views/securityEquipment/car.vue 77 ●●●●● patch | view | raw | blame | history
src/views/securityEquipment/equipments.js 8 ●●●● patch | view | raw | blame | history
src/views/securityEquipment/equipments.vue 77 ●●●●● patch | view | raw | blame | history
src/views/securityEquipment/gun.js 6 ●●●● patch | view | raw | blame | history
src/views/securityEquipment/gun.vue 8 ●●●● patch | view | raw | blame | history
src/views/securityGuard/securityGuard.vue 81 ●●●●● patch | view | raw | blame | history
src/views/securityGuard/securityGuardDetail.vue 22 ●●●● patch | view | raw | blame | history
src/views/securityUnit/index.vue 67 ●●●●● patch | view | raw | blame | history
src/views/securityUnitChild/data.js 2 ●●●●● patch | view | raw | blame | history
src/views/securityUnitChild/index.vue 246 ●●●● patch | view | raw | blame | history
src/views/talk/talk.vue 266 ●●●●● patch | view | raw | blame | history
vue.config.js 6 ●●●● patch | view | raw | blame | history
src/api/performance/performance.js
@@ -11,16 +11,25 @@
        }
    })
}
// export const getPerformanceInfo = (securityid) => {
//     return request({
//         url: '/api/performance/page',
//         method: 'get',
//         params: {
//             securityid
//         }
//     })
// }
export const getPerformanceInfo = (id) => {
    return request({
        url: '/api/performance/detail',
        method: 'get',
        params: {
            id
        }
    })
}
// export const getPerformanceInfo = (securityid) => {
//     return request({
//         url: '/api/performance/detail',
//         method: 'get',
//         params: {
//             securityid
//         }
//     })
// }
export const add = (row) => {
    return request({
src/api/system/user.js
@@ -80,12 +80,12 @@
    })
}
export const getUserPractitionersInfo = (cardid) => {
export const getUserPractitionersInfo = (securityid) => {
    return request({
        url: '/api/experience/selectExperienceInfo',
        method: 'get',
        params: {
            cardid,
            securityid,
        }
    })
}
src/api/talk/talk.js
New file
@@ -0,0 +1,50 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/api/blade-talk/talk/page',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getDetail = (id) => {
  return request({
    url: '/api/blade-talk/talk/detail',
    method: 'get',
    params: {
      id
    }
  })
}
export const remove = (ids) => {
  return request({
    url: '/api/blade-talk/talk/remove',
    method: 'post',
    params: {
      ids,
    }
  })
}
export const add = (row) => {
  return request({
    url: '/api/blade-talk/talk/submit',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/blade-talk/talk/submit',
    method: 'post',
    data: row
  })
}
src/router/views/index.js
@@ -236,6 +236,20 @@
                import ( /* webpackChunkName: "views" */ '@/views/desk/notice')
        }]
    },
  {
    path: '/talk',
    component: Layout,
    redirect: '/talk/talk',
    children: [{
      path: 'index',
      name: '心里咨询',
      meta: {
        i18n: 'dict'
      },
      component: () =>
        import( /* webpackChunkName: "views" */ '@/views/talk/talk')
    }]
  },
    {
        path: '/workreport',
        component: Layout,
@@ -854,4 +868,4 @@
                import ( /* webpackChunkName: "views" */ '@/views/exam/papers')
        }]
    }
]
]
src/views/dispatch/dispatchChildoperable.vue
@@ -200,8 +200,8 @@
          {
            label: "派遣单位",
            prop: "dispatcherCompany",
            addDisplay: false,
            editDisplay: false,
            // addDisplay: false,
            // editDisplay: false,
          },
          // {
          //   label: "派遣单位",
@@ -229,13 +229,9 @@
          {
            label: "保安公司",
            prop: "deptId",
            labelWidth: 120,
            search: true,
            overHidden: true,
            type: "tree",
            searchSpan: 4,
            cascaderItem: ["name"],
            // cascaderItem: ["city", "area"],
            type: "select",
            cascaderItem: ["securityName"],
            props: {
              label: "title",
              value: "id",
@@ -250,19 +246,17 @@
            ],
          },
          {
            width: 120,
            label: "保安员",
            prop: "name",
            labelWidth: 120,
            type: "tree",
            prop: "securityName",
            type: "select",
            search: true,
            searchSpan: 4,
            cell: true,
            // cell: true,
            // hide: true,
            props: {
              label: "realName",
              value: "id",
            },
            dicUrl: `/api/blade-user/page-security-unit?deptId={{deptId}}`,
            dicUrl: `/api/blade-user/page-security-units?deptId={{key}}`,
            rules: [
              {
                required: true,
@@ -271,6 +265,7 @@
              },
            ],
          },
          // {
          //   width: 120,
          //   label: "保安人名称",
@@ -767,8 +762,9 @@
        const data = res.data.data;
        this.page1.total = data.total;
        this.data1 = data.records;
        console.log(this.data1, 1);
        console.log(this.data1, 1111111111111111111111111);
        this.loading1 = false;
        this.$nextTick(() => this.$refs.crudrec1.dicInit("cascader"));
      });
    },
    //派遣记录
src/views/dispatch/dispatchChildoperableSee.vue
@@ -743,21 +743,22 @@
      // console.log(page);
      console.log(this.userInfo, "userInfo");
      var values;
      const { releaseTimeRange } = this.query1;
      if (releaseTimeRange) {
        values = {
          ...params,
          beginTime: releaseTimeRange[0],
          overTime: releaseTimeRange[1],
          ...this.query,
        };
        values.releaseTimeRange = null;
      } else {
        values = {
          ...params,
          ...this.query,
        };
      }
      // const { releaseTimeRange } = this.query1;
      // if (releaseTimeRange) {
      values = {
        ...params,
        // beginTime: releaseTimeRange[0],
        // overTime: releaseTimeRange[1],
        userIds: this.userInfo.user_id,
        ...this.query,
      };
      // values.releaseTimeRange = null;
      // } else {
      //   values = {
      //     ...params,
      //     ...this.query,
      //   };
      // }
      //   values
src/views/people/expression.vue
@@ -79,8 +79,8 @@
  trackRecordColumn,
} from "./data";
import { getUserPractitionersInfo } from "@/api/system/user";
import { add, update, page, remove } from "@/api/performance/performance";
import { mapGetters } from "vuex";
import { add, update, page, remove } from "@/api/performance/performance";
export default {
  data() {
    let baseUrl = "https://cli.avuejs.com/api/area";
@@ -461,7 +461,7 @@
      return "";
    },
    //
    onLoad1(page, params = {}) {
    onLoad1(page1, params = {}) {
      this.loading1 = true;
      // params["cardid"] = this.cardid;
      // params["name"] = this.name;
@@ -486,20 +486,31 @@
      //   };
      // }
      var cardid = this.userInfo.user_id;
      console.log(this.userInfo, "111111111111");
      getPerformancePageInfo(cardid).then((res) => {
        //   // page.currentPage,
        //   // page.pageSize,
        //   // Object.assign(params, this.query)
        //   // values
        console.log(res);
        //   const data = res.data.data;
        //   this.page1.total = data.total;
        //   this.data1 = data.records;
        //   console.log(this.data1, 1);
        //   this.loading1 = false;
      // console.log(this.userInfo, "111111111111");
      // getPerformancePageInfo(cardid).then((res) => {
      //   //   // page.currentPage,
      //   //   // page.pageSize,
      //   //   // Object.assign(params, this.query)
      //   //   // values
      //   // const data = res.data.data;
      //   //   this.page1.total = data.total;
      //   // this.data1 = data;
      //   console.log(res, 1231131);
      //   //   console.log(this.data1, 1);
      //   //   this.loading1 = false;
      // });
      var param = {
        securityid: cardid,
      };
      page(this.current, this.size, param).then((res2) => {
        const data = res2.data.data;
        this.page1.total = data.total;
        this.data1 = data.records;
        console.log(this.data1, 1);
        this.loading1 = false;
      });
    },
    //派遣记录
    // saveLock(name, val) {
    //   localStorage.setItem(name, val);
src/views/people/job.vue
@@ -491,11 +491,11 @@
        //   // Object.assign(params, this.query)
        //   // values
        console.log(res);
        //   const data = res.data.data;
        const data = res.data.data;
        //   this.page1.total = data.total;
        //   this.data1 = data.records;
        //   console.log(this.data1, 1);
        //   this.loading1 = false;
        this.data1 = data;
        console.log(this.data1, 1);
        this.loading1 = false;
      });
    },
    //派遣记录
src/views/resource/uploadNotice.vue
@@ -97,6 +97,7 @@
        searchMenuSpan: 6,
        border: false,
        index: true,
        // align: center,
        stripe: true,
        viewBtn: true,
        selection: true,
@@ -148,6 +149,12 @@
                trigger: "blur",
              },
            ],
          },
          {
            label: "预览图",
            prop: "link",
            dataType: "string",
            type: "img",
          },
          {
            label: "附件拓展名",
@@ -333,6 +340,7 @@
        const data = res.data.data;
        this.page.total = data.total;
        this.data = data.records;
        console.log(this.data);
        this.loading = false;
        this.selectionClear();
      });
src/views/securityEquipment/car.js
@@ -9,13 +9,13 @@
]
export var column = [
    {
        label: "id",
        prop: "id",
        hide: true,
        editDisplay: false,
        addDisplay: false
    },
    // {
    //     label: "id",
    //     prop: "id",
    //     hide: true,
    //     editDisplay: false,
    //     addDisplay: false
    // },
    {
        label: "车牌号码",
        prop: "carNumber",
@@ -64,7 +64,7 @@
    },
    {
        label: "保安公司",
        prop: "tenantName",
        prop: "deptId",
        rules: [{
            required: true,
            message: "请输入保安公司",
@@ -117,7 +117,7 @@
        // search: true,
        type: "date",
        format: "yyyy-MM-dd",
        valueFormat: "timestamp",
        valueFormat: "yyyy-MM-dd",
        searchSpan: 4,
        overHidden: true,
        rules: [{
src/views/securityEquipment/car.vue
@@ -18,6 +18,14 @@
      >
        <template slot="menuLeft">
          <el-button
            type="success"
            size="small"
            plain
            icon="el-icon-upload2"
            @click="handleImport"
            >批量导入
          </el-button>
          <el-button
            type="danger"
            size="small"
            plain
@@ -27,6 +35,24 @@
          </el-button>
        </template>
      </avue-crud>
      <el-dialog
        title="车辆导入"
        append-to-body
        :visible.sync="excelBox"
        width="555px"
      >
        <avue-form
          :option="excelOption"
          v-model="excelForm"
          :upload-after="uploadAfter"
        >
          <template slot="excelTemplate">
            <el-button type="primary" @click="handleTemplate">
              点击下载<i class="el-icon-download el-icon--right"></i>
            </el-button>
          </template>
        </avue-form>
      </el-dialog>
    </div>
  </basic-container>
</template>
@@ -38,6 +64,34 @@
export default {
  data() {
    return {
      excelBox: false,
      excelForm: {},
      excelOption: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/car/import-examSubject",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      loading: true,
      selectionList: [],
      page: {
@@ -71,6 +125,18 @@
    },
  },
  methods: {
    handleImport() {
      this.excelBox = true;
    },
    uploadAfter(res, done, loading, column) {
      window.console.log(column);
      this.excelBox = false;
      this.refreshChange();
      done();
    },
    handleTemplate() {
      window.open(`/api/car/export-template`);
    },
    sizeChange(val) {
      this.page1.currentPage = 1;
      this.page1.pageSize = val;
@@ -88,8 +154,9 @@
      //   delete form.id;
      //   for (var k = 0; k < 13; k++) {
      // console.log
      form["deptId"] = form.tenantName;
      delete form.tenantName;
      // form["deptId"] = form.tenantName;
      // delete form.tenantName;
      // console.log(form);
      adddata(form).then(
        (res) => {
          this.onLoad(this.page);
@@ -117,9 +184,9 @@
      this.onLoad(this.page);
    },
    rowUpdate(row, index, done, loading) {
      console.log(row);
      row["deptId"] = row.tenantName;
      delete row.tenantName;
      // console.log(row);
      // row["deptId"] = row.tenantName;
      // delete row.tenantName;
      update(row).then(
        () => {
          this.onLoad(this.page);
src/views/securityEquipment/equipments.js
@@ -62,7 +62,7 @@
    },
    {
        label: "保安公司",
        prop: "tenantName",
        prop: "deptId",
        rules: [{
            required: true,
            message: "请输入组织机构",
@@ -112,11 +112,11 @@
    {
        label: "出厂日期",
        prop: "dateForProduction",
        // search: true,
        type: "date",
        format: "yyyy-MM-dd",
        valueFormat: "timestamp",
        format: 'yyyy-MM-dd',
        searchSpan: 4,
        // span:8,
        valueFormat: 'yyyy-MM-dd',
        overHidden: true,
        rules: [{
            required: true,
src/views/securityEquipment/equipments.vue
@@ -18,6 +18,14 @@
      >
        <template slot="menuLeft">
          <el-button
            type="success"
            size="small"
            plain
            icon="el-icon-upload2"
            @click="handleImport"
            >批量导入
          </el-button>
          <el-button
            type="danger"
            size="small"
            plain
@@ -27,6 +35,24 @@
          </el-button>
        </template>
      </avue-crud>
      <el-dialog
        title="题库导入"
        append-to-body
        :visible.sync="excelBox"
        width="555px"
      >
        <avue-form
          :option="excelOption"
          v-model="excelForm"
          :upload-after="uploadAfter"
        >
          <template slot="excelTemplate">
            <el-button type="primary" @click="handleTemplate">
              点击下载<i class="el-icon-download el-icon--right"></i>
            </el-button>
          </template>
        </avue-form>
      </el-dialog>
    </div>
  </basic-container>
</template>
@@ -38,6 +64,34 @@
export default {
  data() {
    return {
      excelBox: false,
      excelForm: {},
      excelOption: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/examSubjectChoices/import-examSubject",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      loading: true,
      selectionList: [],
      page: {
@@ -71,6 +125,18 @@
    },
  },
  methods: {
    handleImport() {
      this.excelBox = true;
    },
    uploadAfter(res, done, loading, column) {
      window.console.log(column);
      this.excelBox = false;
      this.refreshChange();
      done();
    },
    handleTemplate() {
      window.open(`/api/examSubjectChoices/export-template`);
    },
    sizeChange(val) {
      this.page1.currentPage = 1;
      this.page1.pageSize = val;
@@ -87,8 +153,9 @@
      //   var form = this.data[0];
      //   delete form.id;
      //   for (var k = 0; k < 13; k++) {
      form["deptId"] = form.tenantName;
      delete form.tenantName;
      console.log(form, "12135");
      // form["deptId"] = form.tenantName;
      // delete form.tenantName;
      adddata(form).then(
        (res) => {
          this.onLoad(this.page);
@@ -116,9 +183,9 @@
      this.onLoad(this.page);
    },
    rowUpdate(row, index, done, loading) {
      // console.log(row);
      row["deptId"] = row.tenantName;
      delete row.tenantName;
      // row["deptId"] = row.tenantName;
      // delete row.tenantName;
      console.log(row.deptId);
      update(row).then(
        () => {
          this.onLoad(this.page);
src/views/securityEquipment/gun.js
@@ -70,7 +70,7 @@
    },
    {
        label: "保安公司",
        prop: "tenantName",
        prop: "deptId",
        labelWidth: 160,
        rules: [{
            required: true,
@@ -112,7 +112,7 @@
        // search: true,
        type: "date",
        format: "yyyy-MM-dd",
        valueFormat: "timestamp",
        valueFormat: "yyyy-MM-dd",
        // width: 110,
        // overHidden: true,
        // search: true,
@@ -129,7 +129,7 @@
        // search: true,
        type: "date",
        format: "yyyy-MM-dd",
        valueFormat: "timestamp",
        valueFormat: "yyyy-MM-dd",
        searchSpan: 4,
        overHidden: true,
        rules: [{
src/views/securityEquipment/gun.vue
@@ -87,8 +87,8 @@
      //   var form = this.data[0];
      //   delete form.id;
      //   for (var k = 0; k < 13; k++) {
      form["deptId"] = form.tenantName;
      delete form.tenantName;
      // form["deptId"] = form.tenantName;
      // delete form.tenantName;
      adddata(form).then(
        (res) => {
          this.onLoad(this.page);
@@ -117,8 +117,8 @@
    },
    rowUpdate(row, index, done, loading) {
      // console.log(row);
      row["deptId"] = row.tenantName;
      delete row.tenantName;
      // row["deptId"] = row.tenantName;
      // delete row.tenantName;
      update(row).then(
        () => {
          this.onLoad(this.page);
src/views/securityGuard/securityGuard.vue
@@ -39,6 +39,14 @@
        >
          <template slot="menuLeft">
            <el-button
              type="success"
              size="small"
              plain
              icon="el-icon-upload2"
              @click="handleImport1"
              >批量导入
            </el-button>
            <el-button
              type="danger"
              style="display: none"
              size="small"
@@ -208,6 +216,24 @@
            </template>
          </avue-crud>
        </el-dialog>
        <el-dialog
          title="保安员导入"
          append-to-body
          :visible.sync="excelBox1"
          width="555px"
        >
          <avue-form
            :option="excelOption1"
            v-model="excelForm1"
            :upload-after="uploadAfter1"
          >
            <template slot="excelTemplate">
              <el-button type="primary" @click="handleTemplate1">
                点击下载<i class="el-icon-download el-icon--right"></i>
              </el-button>
            </template>
          </avue-form>
        </el-dialog>
      </basic-container>
    </el-col>
  </el-row>
@@ -254,6 +280,34 @@
      }
    };
    return {
      excelBox1: false,
      excelForm1: {},
      excelOption1: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/examSubjectChoices/import-examSubject",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      form: {},
      search: {},
      roleBox: false,
@@ -871,6 +925,19 @@
    }
  },
  methods: {
    handleImport1() {
      this.excelBox1 = true;
    },
    uploadAfter1(res, done, loading, column) {
      window.console.log(column);
      this.excelBox1 = false;
      // this.refreshChange();
      done();
    },
    handleTemplate1() {
      window.open(`/api/examSubjectChoices/export-template`);
    },
    //行点击事件
    rowClick(row) {
      this.$router.push({
@@ -929,18 +996,18 @@
            entryTime: item.entryTime,
            name: row.realName,
            leaving: item.leaving,
            cardid: row.cardid,
            securityid: row.id,
            post: item.post,
            responsibilities: item.responsibilities,
          };
          userPractitionersList.push(info);
        });
      }
      var IdCardNo = row.cardid;
      var IdCardNo = row.id;
      add(row).then(
        () => {
          const experience = {
            cardid: IdCardNo,
            securityid: IdCardNo,
            userPractitionersInfo: userPractitionersList,
          };
          //新增从业信息
@@ -979,20 +1046,20 @@
            entryTime: item.entryTime,
            name: row.realName,
            leaving: item.leaving,
            cardid: row.cardid,
            securityid: row.id,
            post: item.post,
            responsibilities: item.responsibilities,
          };
          userPractitionersList.push(info);
        });
      }
      var IdCardNo = row.cardid;
      var IdCardNo = row.id;
      //值替换,education 放在页面会卡死
      row.education = row.education1;
      update(row).then(
        () => {
          const experience = {
            cardid: IdCardNo,
            securityid: IdCardNo,
            userPractitionersInfo: userPractitionersList,
          };
          //更新从业信息
@@ -1167,7 +1234,7 @@
          }
          var userInfo = res.data.data;
          //获取用户从业信息
          getUserPractitionersInfo(userInfo.cardid).then((res1) => {
          getUserPractitionersInfo(userInfo.id).then((res1) => {
            that.form.UserPractitionersInfo = res1.data.data;
          });
        });
src/views/securityGuard/securityGuardDetail.vue
@@ -37,7 +37,13 @@
  trackRecordColumn,
} from "./data";
import { getUserPractitionersInfo } from "@/api/system/user";
import { add, update, page, remove } from "@/api/performance/performance";
import {
  getPerformanceInfo,
  add,
  update,
  page,
  remove,
} from "@/api/performance/performance";
export default {
  data() {
    return {
@@ -154,16 +160,20 @@
    getPractitionersPageInfo() {
      var that = this;
      //获取用户从业信息
      console.log(this.cardid, "cid");
      getUserPractitionersInfo(this.cardid).then((res1) => {
      console.log(this.id, "cid");
      getUserPractitionersInfo(this.id).then((res1) => {
        that.data1 = res1.data.data;
      });
    },
    //查询当前保安员的现实表现记录信息
    getPerformancePageInfo() {
      //获取现实表现信息
      // getPerformanceInfo(this.id).then((res) => {
      //   that.data2 = res1.data.data;
      //   console.log(that.data2, 1);
      // });
      var param = {
        cardid: this.cardid,
        securityid: this.id,
      };
      page(this.current, this.size, param).then((res2) => {
        const data = res2.data.data;
@@ -174,7 +184,7 @@
      });
    },
    rowSave2(form, done, loading) {
      form.cardid = this.cardid;
      form.securityid = this.id;
      add(form).then(
        (res) => {
          this.getPerformancePageInfo(this.page2);
@@ -192,7 +202,7 @@
      // }
    },
    rowUpdate2(row, index, done, loading) {
      row.cardid = this.cardid;
      row.securityid = this.id;
      update(row).then(
        () => {
          this.getPerformancePageInfo(this.page2);
src/views/securityUnit/index.vue
@@ -35,6 +35,14 @@
            @click.stop="rowSave"
            >新增</el-button
          >
          <el-button
            type="success"
            size="small"
            plain
            icon="el-icon-upload2"
            @click="handleImport1"
            >批量导入
          </el-button>
        </template>
        <template slot="menuLeft">
          <el-button
@@ -100,6 +108,24 @@
        </div>
      </div>
    </div>
    <el-dialog
      title="保安单位导入"
      append-to-body
      :visible.sync="excelBox1"
      width="555px"
    >
      <avue-form
        :option="excelOption1"
        v-model="excelForm1"
        :upload-after="uploadAfter1"
      >
        <template slot="excelTemplate">
          <el-button type="primary" @click="handleTemplate1">
            点击下载<i class="el-icon-download el-icon--right"></i>
          </el-button>
        </template>
      </avue-form>
    </el-dialog>
  </basic-container>
</template> 
@@ -120,6 +146,34 @@
    var w = 160,
      s = 12;
    return {
      excelBox1: false,
      excelForm1: {},
      excelOption1: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/examSubjectChoices/import-examSubject",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      loading: true, //保安单位基本信息
      selectionList: [],
      page: {
@@ -266,6 +320,19 @@
    },
  },
  methods: {
    handleImport1() {
      this.excelBox1 = true;
    },
    uploadAfter1(res, done, loading, column) {
      window.console.log(column);
      this.excelBox1 = false;
      // this.refreshChange();
      done();
    },
    handleTemplate1() {
      window.open(`/api/examSubjectChoices/export-template`);
    },
    // handleChangeTABS(column) {
    //   this.typeTABS = column;
    //   // this.$message.success(JSON.stringify(column));
src/views/securityUnitChild/data.js
@@ -155,6 +155,7 @@
    }, {
        label: "股东",
        prop: "shareholder",
        searchLabelWidth: 55,
        search: true,
        labelWidth: w,
        span: s,
@@ -224,6 +225,7 @@
        prop: "name",
        search: true,
        labelWidth: w,
        searchLabelWidth: 55,
        span: s,
    }, {
        label: "职务",
src/views/securityUnitChild/index.vue
@@ -29,67 +29,127 @@
        </template>
      </avue-crud>-->
      <!-- 表单组件 -->
      <avue-form ref="form" v-model="obj0" :option="option0">
        <!-- <template slot-scope="scope" slot="menuForm">
      <basic-container>
        <avue-form ref="form" v-model="obj0" :option="option0">
          <!-- <template slot-scope="scope" slot="menuForm">
          <el-button @click="tip">自定义按钮</el-button>
        </template> -->
      </avue-form>
        </avue-form>
      </basic-container>
    </span>
    <span v-else-if="typeTABS.prop === 'tab2'">
      <!-- <span v-if="typeTABS.prop === 'tab2'"> -->
      <avue-crud
        :option="option1"
        :data="data1"
        :page.sync="page1"
        ref="crudrec1"
        :table-loading="loading1"
        @row-save="rowSave1"
        @search-change="searchChange1"
        @search-reset="searchReset1"
        @row-update="rowUpdate1"
        @row-del="rowDel1"
        @selection-change="selectionChange1"
        @refresh-change="refreshChange1"
      >
        <template slot="menuLeft">
          <el-button
            type="danger"
            size="small"
            plain
            icon="el-icon-delete"
            @click="handleDelete1"
            >删 除
          </el-button>
        </template>
      </avue-crud>
      <basic-container>
        <avue-crud
          :option="option1"
          :data="data1"
          :page.sync="page1"
          ref="crudrec1"
          :table-loading="loading1"
          @row-save="rowSave1"
          @search-change="searchChange1"
          @search-reset="searchReset1"
          @row-update="rowUpdate1"
          @row-del="rowDel1"
          @selection-change="selectionChange1"
          @refresh-change="refreshChange1"
        >
          <template slot="menuLeft">
            <el-button
              type="success"
              size="small"
              plain
              icon="el-icon-upload2"
              @click="handleImport"
              >批量导入
            </el-button>
            <el-button
              type="danger"
              size="small"
              plain
              icon="el-icon-delete"
              @click="handleDelete1"
              >删 除
            </el-button>
          </template>
        </avue-crud>
      </basic-container>
    </span>
    <span v-else-if="typeTABS.prop === 'tab3'">
      <avue-crud
        :option="option2"
        :data="data2"
        :page.sync="page2"
        ref="crudrec2"
        :table-loading="loading2"
        @row-save="rowSave2"
        @search-change="searchChange2"
        @search-reset="searchReset2"
        @row-update="rowUpdate2"
        @row-del="rowDel2"
        @selection-change="selectionChange2"
        @refresh-change="refreshChange2"
      <basic-container>
        <avue-crud
          :option="option2"
          :data="data2"
          :page.sync="page2"
          ref="crudrec2"
          :table-loading="loading2"
          @row-save="rowSave2"
          @search-change="searchChange2"
          @search-reset="searchReset2"
          @row-update="rowUpdate2"
          @row-del="rowDel2"
          @selection-change="selectionChange2"
          @refresh-change="refreshChange2"
        >
          <template slot="menuLeft">
            <el-button
              type="success"
              size="small"
              plain
              icon="el-icon-upload2"
              @click="handleImport1"
              >批量导入
            </el-button>
            <el-button
              type="danger"
              size="small"
              plain
              icon="el-icon-delete"
              @click="handleDelete2"
              >删 除
            </el-button>
          </template>
        </avue-crud>
      </basic-container>
    </span>
    <el-dialog
      title="出资人导入"
      append-to-body
      :visible.sync="excelBox"
      width="555px"
    >
      <avue-form
        :option="excelOption"
        v-model="excelForm"
        :upload-after="uploadAfter"
      >
        <template slot="menuLeft">
          <el-button
            type="danger"
            size="small"
            plain
            icon="el-icon-delete"
            @click="handleDelete2"
            >删 除
        <template slot="excelTemplate">
          <el-button type="primary" @click="handleTemplate">
            点击下载<i class="el-icon-download el-icon--right"></i>
          </el-button>
        </template>
      </avue-crud>
    </span>
      </avue-form>
    </el-dialog>
    <el-dialog
      title="管理人导入"
      append-to-body
      :visible.sync="excelBox1"
      width="555px"
    >
      <avue-form
        :option="excelOption1"
        v-model="excelForm1"
        :upload-after="uploadAfter1"
      >
        <template slot="excelTemplate">
          <el-button type="primary" @click="handleTemplate1">
            点击下载<i class="el-icon-download el-icon--right"></i>
          </el-button>
        </template>
      </avue-form>
    </el-dialog>
  </div>
</template> 
@@ -137,6 +197,62 @@
      ],
    };
    return {
      excelBox: false, //出资人
      excelForm: {},
      excelOption: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/car/import-examSubject",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      excelBox1: false, //管理人
      excelForm1: {},
      excelOption1: {
        submitBtn: false,
        emptyBtn: false,
        column: [
          {
            label: "文件上传",
            prop: "excelFile",
            type: "upload",
            drag: true,
            loadText: "文件上传中,请稍等",
            span: 24,
            propsHttp: {
              res: "data",
            },
            tip: "请上传 .xls,.xlsx 标准格式文件",
            action: "/api/examSubjectChoices/import-examSubject",
          },
          {
            label: "模板下载",
            prop: "excelTemplate",
            formslot: true,
            span: 24,
          },
        ],
      },
      typeTABS: {}, //标签页
      optionTABS: {
        column: [
@@ -262,6 +378,34 @@
    },
  },
  methods: {
    handleImport() {
      //出资人
      this.excelBox = true;
    },
    uploadAfter(res, done, loading, column) {
      window.console.log(column);
      this.excelBox = false;
      this.refreshChange();
      done();
    },
    handleTemplate() {
      window.open(`/api/car/export-template`);
    },
    handleImport1() {
      //管理人
      this.excelBox1 = true;
    },
    uploadAfter1(res, done, loading, column) {
      window.console.log(column);
      this.excelBox1 = false;
      // this.refreshChange();
      done();
    },
    handleTemplate1() {
      window.open(`/api/examSubjectChoices/export-template`);
    },
    handleChangeTABS(column) {
      this.typeTABS = column;
      // this.$message.success(JSON.stringify(column));
src/views/talk/talk.vue
New file
@@ -0,0 +1,266 @@
<template>
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               :page.sync="page"
               :permission="permissionList"
               :before-open="beforeOpen"
               v-model="form"
               ref="crud"
               @row-update="rowUpdate"
               @row-save="rowSave"
               @row-del="rowDel"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad">
      <template slot="menuLeft">
        <el-button type="danger"
                   size="small"
                   icon="el-icon-delete"
                   plain
                   v-if="permission.talk_delete"
                   @click="handleDelete">删 除
        </el-button>
      </template>
    </avue-crud>
  </basic-container>
</template>
<script>
  import {getList, getDetail, add, update, remove} from "@/api/talk/talk";
  import {mapGetters} from "vuex";
  export default {
    data() {
      return {
        form: {},
        query: {},
        loading: true,
        page: {
          pageSize: 10,
          currentPage: 1,
          total: 0
        },
        selectionList: [],
        option: {
          height:'auto',
          calcHeight: 30,
          tip: false,
          searchShow: true,
          searchMenuSpan: 6,
          border: true,
          index: true,
          viewBtn: true,
          selection: true,
          dialogClickModal: false,
          column: [
            {
              label: "标题",
              prop: "title",
              search: true,
              rules: [{
                required: true,
                message: "请输入标题",
                trigger: "blur"
              }]
            },
            {
              label: "谈话对象",
              search: true,
              prop: "realName",
              type: "tree",
              props: {
                label: "realName",
                value: "id",
              },
              dicUrl: `/api/blade-user/selectInr?deptid=`+this.$store.getters.userInfo.dept_id,
              rules: [{
                required: true,
                message: "请输入谈话对象",
                trigger: "blur"
              }]
            },
            {
              label: "谈话内容",
              prop: "talkcontent",
              rules: [{
                required: true,
                message: "请输入谈话内容",
                trigger: "blur"
              }]
            },
            {
              label: "谈话时间",
              prop: "talktime",
              type: "date",
              format: "yyyy-MM-dd hh:mm:ss",
              valueFormat: "yyyy-MM-dd hh:mm:ss",
              rules: [{
                required: true,
                message: "请输入谈话时间",
                trigger: "blur"
              }]
            },
            {
              label: "结论",
              prop: "conclusion",
              rules: [{
                required: true,
                message: "请输入结论",
                trigger: "blur"
              }]
            },
            {
              label: "评价",
              prop: "evaluate",
              rules: [{
                required: true,
                message: "请输入评价",
                trigger: "blur"
              }]
            },
          ]
        },
        data: []
      };
    },
    computed: {
      ...mapGetters(["permission", "userInfo"]),
      permissionList() {
        return {
          addBtn: this.vaildData(this.permission.talk_add, false),
          viewBtn: this.vaildData(this.permission.talk_view, false),
          delBtn: this.vaildData(this.permission.talk_delete, false),
          editBtn: this.vaildData(this.permission.talk_edit, false)
        };
      },
      ids() {
        let ids = [];
        this.selectionList.forEach(ele => {
          ids.push(ele.id);
        });
        return ids.join(",");
      }
    },
    methods: {
      rowSave(row, done, loading) {
        add(row).then(() => {
          row.deptid=this.$store.getters.userInfo.dept_id
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          done();
        }, error => {
          loading();
          window.console.log(error);
        });
      },
      rowUpdate(row, index, done, loading) {
        update(row).then(() => {
          this.onLoad(this.page);
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          done();
        }, error => {
          loading();
          console.log(error);
        });
      },
      rowDel(row) {
        this.$confirm("确定将选择数据删除?", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
          .then(() => {
            return remove(row.id);
          })
          .then(() => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          });
      },
      handleDelete() {
        if (this.selectionList.length === 0) {
          this.$message.warning("请选择至少一条数据");
          return;
        }
        this.$confirm("确定将选择数据删除?", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
          .then(() => {
            return remove(this.ids);
          })
          .then(() => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            this.$refs.crud.toggleSelection();
          });
      },
      beforeOpen(done, type) {
        if (["edit", "view"].includes(type)) {
          getDetail(this.form.id).then(res => {
            this.form = res.data.data;
          });
        }
        done();
      },
      searchReset() {
        this.query = {};
        this.onLoad(this.page);
      },
      searchChange(params, done) {
        this.query = params;
        this.page.currentPage = 1;
        this.onLoad(this.page, params);
        done();
      },
      selectionChange(list) {
        this.selectionList = list;
      },
      selectionClear() {
        this.selectionList = [];
        this.$refs.crud.toggleSelection();
      },
      currentChange(currentPage){
        this.page.currentPage = currentPage;
      },
      sizeChange(pageSize){
        this.page.pageSize = pageSize;
      },
      refreshChange() {
        this.onLoad(this.page, this.query);
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      }
    }
  };
</script>
<style>
</style>
vue.config.js
@@ -28,10 +28,10 @@
      '/api': {
        //本地服务接口地址
        // target: 'http://localhost',
        // target: 'http://192.168.0.114:81',//钟W
        target: 'http://192.168.0.114:81',//钟W
        // target: 'http://localhost:81',//原W
        target: 'http://192.168.0.108:81',//原W
        // target: 'http://192.168.0.104:80',//唐N
        // target: 'http://192.168.0.108:81',//原W
        // target: 'http://192.168.0.109:81',//唐N
        //远程演示服务地址,可用于直接启动项目
        // target: 'https://saber.bladex.vip/api',
        ws: true,