123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323 |
- <template>
- <basic-container>
- <el-row :gutter="20" class="h100p">
- <el-col :span="5" class="h100p">
- <div class="grid-content1">
- <el-radio-group v-model="tabPosition" @input="getRoleData" size="small">
- <el-radio-button label="1">施工</el-radio-button>
- <el-radio-button label="2">监理</el-radio-button>
- <el-radio-button label="3">业主</el-radio-button>
-
- </el-radio-group>
- <div class="flex" style="margin-top: 10px">
- <el-input
- size="small"
- placeholder="请输入岗位名称"
- clearable
- @clear="clearInput"
- v-model="postText"
- >
- </el-input>
- <el-button class="mg-l-10" @click="searchPost" type="primary" size="small"
- >搜索</el-button
- >
-
- </div>
- <div class="post-list">
- <el-scrollbar style="margin-top: 20px; height: 100%" v-loading="roleListLoading">
- <ul
- class="contextmenu"
- >
- <li v-for="item in roleData" :key="item"
- :class="{'selected': selectedItem === item}"
- @click="positionClick($event,item)">
-
- <span>{{item.roleName}}</span>
- </li>
- </ul>
- </el-scrollbar>
- </div>
- </div>
-
- </el-col>
- <el-col :span="19" class="h100p">
- <div class="grid-content2 ">
- <div class="header-btn">
-
- <el-button type="primary" size="small" @click="addEleClick">新增</el-button>
- <el-button type="info" size="small" @click="editEleClick" :disabled="checkedList.length<1">编辑</el-button>
- <el-button type="success" size="small" @click="openClick(row,1)" :loading="openLoading">启用</el-button>
- <el-button type="warning" size="small" @click="openClick(row,0)" :loading="closeLoading">停用</el-button>
- <el-button type="danger" size="small" @click="rowDel(row)" :loading="removeLoad">删除</el-button>
- </div>
- <div class="table-box">
- <el-table
- height="600"
- v-loading="tableLoading"
- ref="multipleTable"
- :data="tableData"
- tooltip-effect="dark"
- style="width: 100%"
- @selection-change="handleSelectionChange">
-
- <el-table-column
- type="selection"
- width="55">
- </el-table-column>
- <el-table-column
- label="序号"
- type="index"
- width="50">
- </el-table-column>
- <el-table-column
- label="电签元素名称"
- prop="eName"
- >
- </el-table-column>
- <el-table-column
- prop="elementTypeName"
- label="字符类型"
- >
-
- </el-table-column>
- <el-table-column
-
- label="元素来源"
- >
- <template slot-scope="scope">
- <el-link type="warning" @click="eleCheck(scope.row,scope.$index,1)">查看</el-link>
- </template>
- </el-table-column>
- <el-table-column
-
- label="绑定岗位"
- >
- <template slot-scope="scope">
- <el-link type="warning" @click="selectPost(scope.row,scope.$index,1)">查看</el-link>
- </template>
- </el-table-column>
- <el-table-column
- prop="status"
- label="状态"
- width="100"
- >
- <template slot-scope="scope">
- <i class="el-icon-success" style="font-size: 20px;color:#67C23A" v-if="scope.row.status==1"></i>
- <i class="el-icon-error" style="font-size: 20px;color:red" v-else></i>
- </template>
- </el-table-column>
- </el-table>
- </div>
- <div class="pagination-page">
- <el-pagination
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- :current-page="currentPage"
- :page-sizes="[10, 20, 30, 40,50]"
- :page-size="pageSize"
- layout="total, sizes, prev, pager, next, jumper"
- :total="total">
- </el-pagination>
- </div>
- </div>
- </el-col>
-
- </el-row>
- <el-dialog
- class="dialog-footer-center"
- append-to-body
- :title="addDialogVisibleTitle"
- :visible.sync="addDialogVisible"
- width="80%"
- :before-close="handleAddClose">
- <div>
- <el-table
- :data="tableData1"
- style="width: 100%"
- max-height="600"
- >
-
- <el-table-column
- label="电签元素名称"
- >
- <template slot-scope="scope">
-
- <el-select v-model="scope.row.eName" placeholder="请选择元素或搜索" filterable size="small" @change="changeEleType($event,scope.row)">
- <el-option
- v-for="item in eleOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- </template>
- </el-table-column>
- <el-table-column
- prop="name"
- label="字符类型"
- >
- <template slot-scope="scope">
- <el-select
- v-model="scope.row.elementType"
- disabled
- size="small"
- placeholder="请选择"
- >
- <el-option
- v-for="item in dataTypeList"
- :key="item.id"
- :label="item.dictValue"
- :value="item.dictKey"
- ></el-option>
- </el-select>
- </template>
- </el-table-column>
- <el-table-column
- prop="address"
- label="元素来源"
- >
- <template slot-scope="scope">
- <el-link type="warning" @click="eleCheck(scope.row,scope.$index)">请选择</el-link>
- </template>
- </el-table-column>
- <el-table-column
- prop="address"
- label="绑定岗位"
- > <template slot-scope="scope">
- <el-link type="warning" :underline="true" @click="selectPost(scope.row,scope.$index)">请选择</el-link>
- </template>
- </el-table-column>
- <el-table-column
- prop="tag"
- label="操作"
- width="100"
- >
- <template slot-scope="scope">
- <el-button type="text" @click="handleAdd(scope.row,scope.$index)">
- <i class="el-icon-circle-plus-outline" style="font-size: 20px;color:#67C23A"></i>
- </el-button>
- <el-button type="text" @click="handleDelete(scope.row,scope.$index)">
- <i class="el-icon-remove-outline" style="font-size: 20px;color:red"></i>
- </el-button>
- </template>
- </el-table-column>
- </el-table>
- </div>
- <span slot="footer" class="dialog-footer">
-
- <el-button type="primary" @click="saveBatch" :loading="saveBatchLoading">保存并生效</el-button>
- </span>
- </el-dialog>
- <!-- 选择元素来源 -->
- <el-dialog
- class="dialog-footer-center"
- append-to-body
- title="元素来源"
- :visible.sync="sourceDialogVisible"
- width="50%"
- :close="handleSourceClose">
- <div>
- <p class="tip-text" v-if="!isEleView" >
- 提示:配置之后会把所有元素表该元素字段都自动配置电签岗位对应关系。
- </p>
- <div class="source-radio-group">
- <el-radio-group v-model="selectedSourceOption" :disabled="isEleView">
- <el-radio :label="0">适配所有元素表</el-radio>
- <el-radio :label="1">部分元素表</el-radio>
- </el-radio-group>
- </div>
- <!-- 并行显示的下拉框 -->
- <div v-if="selectedSourceOption === 1&&!isEleView" class="dropdown-container">
- <el-select
- v-model="elementCategorySelect"
- placeholder="请选择表分类"
- style="flex: 1; margin-right: 10px;"
- clearable @change="changeSelect"
-
- >
- <el-option
- v-for="item in elementCategoryOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- <el-select
- v-loading="loadingList"
- v-model="elementTableNameSelect"
- placeholder="请输入元素表名称进行模糊检索"
- style="flex: 1;"
- filterable clearable multiple
- class="custom-multi-select"
-
-
- >
- <el-option
- v-for="item in elementTableOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- </div>
- <div v-if="selectedSourceOption === 1&&!isEleView" class="element-list-container">
- <el-scrollbar>
- <ul class="element-checkbox-list">
- <li v-for="(item, index) in elementList" :key="item.value" class="element-item">
- <el-checkbox v-model="item.checked" @change="changeEleClick($event,item)">{{ item.label }}</el-checkbox>
- </li>
- </ul>
- </el-scrollbar>
- </div>
- <el-table
- max-height="600px"
- v-loading="elementLoading"
- v-if="selectedSourceOption === 1&&isEleView"
- :data="elementList1"
- border
- style="width: 100%;margin-top: 20px;"
- :header-cell-style="{ background: '#A0B7E2', color: 'black' }"
- >
- <el-table-column
- prop="name"
- label="元素表名称"
- align="center"
- >
- </el-table-column>
-
-
- </el-table>
- </div>
- <span slot="footer" class="dialog-footer" v-if="!isEleView">
-
- <el-button type="primary" @click="confirmSourceSelection">确 定</el-button>
- </span>
- </el-dialog>
- <!-- 绑定岗位弹窗 -->
- <el-dialog
- class="dialog-footer-center"
- append-to-body
- title="绑定岗位"
- :visible.sync="bindPostDialogVisible"
- width="50%"
- :before-close="handleBindPostClose">
- <div class="bind-post-content">
- <!-- 参建方分类 + 岗位名称下拉框 -->
- <div class="dropdown-pair" v-if="!isPosView">
- <el-select v-model="partyCategorySelect" placeholder="请选择参建方分类" style="flex: 1; margin-right: 10px;" @change="changePositionName">
- <el-option
- v-for="item in partyCategoryOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- <el-select v-model="positionNameSelect" filterable multiple placeholder="请输入岗位名称进行模糊检索" class="custom-multi-select" style="flex: 1;" v-loading="positionNameLoading">
- <el-option
- v-for="item in positionNameOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- </div>
- <!-- 岗位列表 -->
- <div class="position-list-container" v-if="!isPosView">
- <el-scrollbar > <!-- 18行 * 30px = 540px -->
- <ul class="position-checkbox-list">
- <li v-for="(item, index) in positionList" :key="index" class="position-item">
- <el-checkbox v-model="item.checked" @change="changePosClick($event,item)">{{ item.label }}</el-checkbox>
- </li>
- </ul>
- </el-scrollbar>
- </div>
- <el-table
- v-loading="bindPosLoading"
- v-if="isPosView"
- :data="positionList1"
- border
- max-height="600px"
- :header-cell-style="{ background: '#A0B7E2', color: 'black' }"
- style="width: 100%;margin-top: 20px;">
-
- <el-table-column
- prop="type"
- label="所属方"
- align="center"
- >
- </el-table-column>
- <el-table-column
- prop="name"
- label="岗位名称"
- align="center"
- >
- </el-table-column>
-
- </el-table>
- </div>
- <span slot="footer" class="dialog-footer" v-if="!isPosView">
-
- <el-button type="primary" @click="confirmBindPostSelection">确 定</el-button>
- </span>
- </el-dialog>
- </basic-container>
- </template>
- <script>
- import {getRoleList,getListPage,getElementList,getTableTypeList,getTableList,queryAllRoleList,submitEle,elementDetail,roleDetail,removeEle,updateStatusEle} from "@/api/sigital/signer.js";
- import { getDictionary } from "@/api/system/dict";
- export default {
- data() {
- return {
- tabPosition: '1',
- postText: '',
- roleData:[],
- roleListLoading:false,
- multipleTable:null,
- tableData: [],
- tableLoading: false,
- selectedItem: {
- id: '',
- },
- removeLoad:false,
- openLoading:false,
- closeLoading:false,
- currentPage: 1,
- pageSize: 10,
- total: 0,
- addDialogVisible: false,
- addDialogVisibleTitle: '新增电签配置信息',
- saveBatchLoading: false,
- checkedList: [],
- tableData1: [{}],
- eleOptions: [
-
- ],
- dataTypeList: [],
- sourceDialogVisible: false, // 控制弹窗显示
- isEleView: true, // 是否查看
- eleCheckRow: {},
- eleIndex: 0,
- selectedSourceOption: 1, // 默认选中 "适配所有元素表"
- elementCategorySelect: '', // 元素分类表分类选中值
- loadingList: false,
- elementTableNameSelect: [], // 元素表名称筛选选中值
- elementCategoryOptions: [
-
- ],
- elementTableOptions: [
-
- ],
- allElementTableOptions: [],
- elementList:[],
- elementList1:[],
- elementLoading: false,
- bindPostDialogVisible: false,
- bindPosLoading: false,
- partyCategorySelect: '', // 参建方分类选中值
- positionNameSelect: [], // 岗位名称选中值
- partyCategoryOptions: [
- { value: '1', label: '施工方' },
- { value: '2', label: '监理方' },
- { value: '3', label: '业主方' }
- ],
- positionNameOptions: [],
- allPositionNameOptions : [],
- positionNameLoading: false,
- positionList: [],
- positionList1:[],
- isPosView: true, //
- // 是否查看
- selectedPostRow: {},
- selectedPostIndex: 0,
- }
- },
- watch: {
- elementTableNameSelect(newVal) {
- if (newVal) {
- let arr=[];
- this.allElementTableOptions.forEach(item => {
- newVal.forEach(tableName => {
- if (item.value === tableName) {
- arr.push(item)
- }
- });
- });
-
- // 更新 elementList 并自动选中对应的项
- this.elementList = arr.map(element => ({
- ...element,
- checked: true // 自动选中
- }))
-
- }
- },
- positionNameSelect(newVal) {
-
-
- if (newVal) {
- let arr=[];
-
- this.allPositionNameOptions.forEach(item => {
- newVal.forEach(roleName => {
- if (item.value === roleName) {
- arr.push(item)
- }
- });
- });
-
- // 更新 elementList 并自动选中对应的项
- this.positionList = arr.map(element => ({
- ...element,
- checked: true // 自动选中
- }))
-
- }
- },
-
-
-
- },
- methods: {
- clearInput() {
- this.postText = ''
- this.getRoleData();
- },
- searchPost() {
- this.getRoleData();
- },
- handleSelectionChange(val) {
- this.checkedList=val
- },
- //获取岗位列表
- getRoleData() {
- this.roleListLoading = true;
- this.selectedItem = {};
- getRoleList({
- type: this.tabPosition,
- roleName: this.postText
- }).then(res => {
- console.log(res,'res');
-
- this.roleListLoading = false;
- if (res.data.code == 200) {
- this.roleListLoading = false;
- this.roleData = res.data.data;
- }else{
- this.roleData = [];
- }
- })
- this.getTableData();
- },
- positionClick(event, item){
- this.selectedItem = item;
- this.getTableData();
-
- },
- getTableData() {
-
-
- this.$refs.multipleTable.clearSelection();
- this.tableLoading = true;
- getListPage({
- size: this.pageSize,
- current: this.currentPage,
- keyword: '',
- roleId: this.selectedItem.roleId||'',
- type: this.tabPosition
- }).then(res => {
- this.tableLoading = false;
- if (res.data.code == 200) {
-
- this.tableData = res.data.data['records'];
- this.total = res.data.data['total'];
- }else{
- this.tableData = [];
- }
- })
- },
- handleSizeChange(val) {
- this.pageSize = val;
- this.getTableData();
- },
- handleCurrentChange(val) {
- this.currentPage = val;
- this.getTableData();
- },
- addEleClick() {
- this.addDialogVisible = true;
- this.addDialogVisibleTitle = '新增电签配置信息';
- this.tableData1=[{}]
- },
- editEleClick(row) {
-
- this.addDialogVisible = true;
- this.addDialogVisibleTitle = '编辑电签配置信息';
- this.tableData1 = JSON.parse(JSON.stringify(this.checkedList));
- console.log( this.tableData1,' this.tableData1');
- this.isPosView=false
- this.isEleView=false
-
- },
- //启用
- openClick(row,type){
- if (this.checkedList.length == 0) {
- this.$message({
- type: "warning",
- message: "请选择需要操作的数据",
- });
- return;
- }
- if(type==1){
- this.openLoading=true;
- }else{
- this.closeLoading=true;
- }
- let ids = '';
- if (this.checkedList.length > 0) {
- ids = this.checkedList.map(item => item.id).join(',');
- }
- updateStatusEle({
- ids: ids,
- status: type
- })
- .then(res => {
- if(res.data.code==200){
- this.$message({
- type: 'success',
- message: '操作成功!'
- });
- this.getTableData();
- }else{
- this.$message({
- type: 'error',
- message: res.data.msg
- });
- }
- }).finally(() => {
- if(type==1){
- this.openLoading=false;
- }else{
- this.closeLoading=false;
- }
- });
- },
-
- handleAddClose(){
- this.addDialogVisible = false;
- },
- getEleOptions(){
- getElementList().then(res => {
- if (res.data.code == 200) {
- this.eleOptions = res.data.data.map(item => ({
- value: item.id,
- label: item.ename,
- etype: item.etype,
- }));
- }else{
- this.eleOptions = [];
- }
- });
- },
-
- getDataTypelist() {
- if (this.dataTypeList.length > 1) {
- return;
- }
- getDictionary({
- code: "data_type",
- }).then((res) => {
- res.data.data.forEach((element) => {
- element.dictKey = Number(element.dictKey);
- });
- this.dataTypeList = res.data.data;
- });
- },
- handleAdd(row,index) {
- this.tableData1.splice(index + 1, 0, {});
-
- // 新增操作的逻辑
- },
- handleDelete(row,index) {
- console.log('删除', row);
- if(this.tableData1.length==1&&this.addDialogVisibleTitle=='新增电签配置信息'){
- this.$message({
- type: "warning",
- message: "请至少保留一条数据",
- });
- return;
- }
- if(this.addDialogVisibleTitle=='新增电签配置信息'){
- this.tableData1.splice(index, 1);
- }else{
- let _that = this;
- let ids = row.id;
- this.$confirm("删除后,项目级表单电签信息将同步删除,请确认是否删除", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- })
- .then(() => {
- _that.remove({ ids });
- _that.tableData1.splice(index, 1);
- })
- .catch(() => {
- this.$message({
- type: "info",
- message: "已取消删除",
- });
- })
- }
-
- // 删除操作的逻辑
- },
- rowDel() {
- let ids=''
- if (this.checkedList.length == 0) {
- this.$message({
- type: "warning",
- message: "请选择需要删除的数据",
- });
- return;
- }
- if (this.checkedList.length > 0) {
- ids = this.checkedList.map(item => item.id).join(',');
- }
- let _that = this;
- this.$confirm("删除后,项目级表单电签信息将同步删除,请确认是否删除", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- })
- .then(() => {
- _that.remove({ ids });
-
- })
- .catch(() => {
- this.$message({
- type: "info",
- message: "已取消删除",
- });
- })
- },
- async remove(ids) {
- this.removeLoad = true;
- removeEle(ids).then(res => {
- console.log(res,'res');
-
- this.removeLoad = false;
- if (res.data.code == 200) {
- this.$message({
- type: "success",
- message: "删除成功!",
- });
- this.getTableData();
- this.getRoleData();
- }
- }).finally(() => {
- this.removeLoad = false;
- });
- },
- changeEleType(value,row) {
- const selectedItem = this.eleOptions.find(item => item.value === value);
- if (selectedItem && selectedItem.etype != null) {
- row.elementType = selectedItem.etype; // 假设接口返回的 eleOptions 中有 etype 字段
- row.eName=selectedItem.label;
- row.elementId=selectedItem.value;
- }
-
- },
- //选择元素来源
- eleCheck(row,index,type) {
-
- this.getAllElements()
- this.eleCheckRow=row;
- this.eleIndex=index;
- if(type===1){
- this.isEleView = true;
- this.getEleDetail(row.id)
- this.selectedSourceOption=row.tableType
- }else{
- this.isEleView = false;
-
- this.selectedSourceOption=row.tableType
-
- if(row.id){
- this.getEleDetail(row.id,1)
- getTableList({
- tableType:''
- }).then(res => {
-
- if (res.data.code == 200) {
- this.elementTableOptions = res.data.data.map(item => ({
- value: item.id,
- label: item.tabChName
- }));
- // this.elementTableNameSelect=row.tableIds
- let arr=[];
- this.elementList.forEach(item => {
- arr.push(item.value)
- // item.checked = false;
- });
- this.elementTableNameSelect=arr
- }else{
- this.elementTableOptions = [];
- this.elementTableNameSelect=[]
- }
- });
- }else{
-
-
- this.elementCategorySelect=row.eleType
- this.changeSelect(row.eleType)
- this.elementTableNameSelect=row.tableIds
-
- }
-
- this.getElementCategoryOptions();
-
- }
- this.sourceDialogVisible = true;
-
-
-
- },
- //查看详情
- getEleDetail(id,type){
- this.elementLoading = true;
- elementDetail({
- id
- }).then(res => {
-
- this.elementLoading = false;
- if (res.data.code == 200) {
- if(type==1){
- // this.elementList = res.data.data;
- this.elementList = res.data.data.map(item => ({
- value: item.id,
- label: item.name,
- checked: true
-
- }));
- console.log( this.elementList,' this.elementList');
-
-
- }else{
- this.elementList1 = res.data.data;
- }
-
- }else{
- this.elementList1 = [];
- this.elementList = [];
- }
- })
- },
- getPosDetail(id){
- this.bindPosLoading = true;
- roleDetail({
- id
- }).then(res => {
- this.bindPosLoading = false;
-
-
- if (res.data.code == 200) {
- this.positionList1 = res.data.data;
- this.positionList = res.data.data;
- this.positionNameSelect=res.data.data.map(item => item.id)
-
- this.positionList.map(item => {
- item.label = item.name;
- item.value = item.id;
- item.checked = true
- });
-
- }else{
- this.positionList1 = [];
- this.positionList = [];
- }
- })
- },
- //获取元素表分类
-
- getElementCategoryOptions(){
-
- getTableTypeList().then(res => {
- if (res.data.code == 200) {
- this.elementCategoryOptions = res.data.data.map(item => ({
- value: item.dictKey,
- label: item.dictValue,
- id:item.id
- }));
- }else{ this.elementCategoryOptions = [];}
- });
- },
- changeSelect(){
- this.getElementTableOptions();
- },
- getAllElements(){
- getTableList({
- tableType:''
- }).then(res => {
-
- if (res.data.code == 200) {
- this.allElementTableOptions = res.data.data.map(item => ({
- value: item.id,
- label: item.tabChName
- }));
- }else{ this.allElementTableOptions = [];}
- });
- },
- //获取元素表List
- getElementTableOptions(){
- this.loadingList = true;
- getTableList({
- tableType:this.elementCategorySelect
- }).then(res => {
- this.loadingList = false;
- if (res.data.code == 200) {
- this.elementTableOptions = res.data.data.map(item => ({
- value: item.id,
- label: item.tabChName
- }));
- this.slec
- }else{ this.elementTableOptions = [];}
- });
- },
- // 弹窗关闭时的回调
- handleSourceClose(done) {
- this.sourceDialogVisible = false;
-
-
- done();
- },
- changeEleClick(value,item) {
- if(!value){
- this.elementTableNameSelect.forEach((ele,index)=>{
- if(ele == item.value){
- this.elementTableNameSelect.splice(index,1);
- }
- })
-
- }
- },
- changePosClick(value,item) {
- if(!value){
- this.positionNameSelect.forEach((ele,index)=>{
- if(ele == item.value){
- this.positionNameSelect.splice(index,1);
- }
- })
-
- }
- },
- quitClose() {
- this.sourceDialogVisible = false;
- this.selectedSourceOption = 1;
- this.elementTableNameSelect = [];
- this.elementList = [];
- this.elementCategorySelect = '';
- },
- positionClose() {
- this.bindPostDialogVisible = false;
- this.partyCategorySelect=''
- this.positionNameSelect = [];
- this.positionList = [];
- this.partyCategorySelect = '';
- },
- // 确认按钮点击事件
- confirmSourceSelection() {
-
- if(this.selectedSourceOption!==0&&this.selectedSourceOption!==1){
- this.$message({
- type: 'warning',
- message: '请选择元素来源!'
- });
- return
- }
-
- if (this.selectedSourceOption === 0) {
- // 处理适配所有元素表的逻辑
- console.log("适配所有元素表");
- // this.eleCheckRow.tableType = 1;
- this.tableData1.forEach((item, index) => {
- if (item.id === this.eleCheckRow.id) {
- this.tableData1[index].tableType = 0;
- }
- })
-
-
-
- } else {
- // 处理适配部分元素表的逻辑
-
-
- this.tableData1.forEach((item, index) => {
- if (index==this.eleIndex) {
- this.tableData1[index].tableType = 1;
- }
- })
- if (this.elementTableNameSelect&&this.elementTableNameSelect.length > 0) {
- this.tableData1.forEach((item, index) => {
- if (index==this.eleIndex) {
- this.tableData1[index].tableIds = this.elementTableNameSelect
- this.tableData1[index].eleType = this.elementCategorySelect;
- }
- });
- }else{
- this.tableData1.forEach((item, index) => {
- if (index==this.eleIndex) {
- this.tableData1[index].tableIds ='';
- this.tableData1[index].eleType=''
- this.elementList1 = [];
- this.elementList = [];
- }
- });
- }
-
-
-
-
- }
-
- // 关闭弹窗
- this.sourceDialogVisible = false;
- },
- // 打开绑定岗位弹窗
- selectPost(row,index,type) {
- this.selectedPostIndex=index;
- this.getAllPositionNameOptions();
- this.positionNameOptions=this.allPositionNameOptions;
- if(type===1){
- this.isPosView=true
-
- if(row.id){
- this.getPosDetail(row.id)
- }
- }else{
- if(row.id){
- this.getPosDetail(row.id)
-
-
- }
- this.isPosView=false
- this.partyCategorySelect='1'
- this.getPositionList();
- this.selectedPostRow = row;
-
-
- // this.positionNameSelect=arr
- if(!row.id&&row.roleIds&&row.roleIds.length>0){
- this.positionNameSelect = row.roleIds;
- this.partyCategorySelect=row.partyCategory
- }else{
- this.positionNameSelect = [];
- this.partyCategorySelect = '';
- this.positionList = [];
- }
-
- }
- this.bindPostDialogVisible = true;
-
- },
- changePositionName() {
- this.getPositionList();
- },
- getAllPositionNameOptions() {
- queryAllRoleList({
- type:''
- }).then(res => {
- if (res.data.code == 200) {
- this.allPositionNameOptions = res.data.data.map(item => ({
- value: item.id,
- label: item.roleName
- }));
- }else{ this.allPositionNameOptions = [];}
- });
- },
- // 获取岗位列表
- getPositionList() {
- this.positionNameLoading = true;
- queryAllRoleList({
- type:this.partyCategorySelect
- }).then(res => {
- this.positionNameLoading = false;
- if (res.data.code == 200) {
- this.positionNameOptions = res.data.data.map(item => ({
- value: item.id,
- label: item.roleName
- }));
- }else{ this.positionNameOptions = [];}
- });
- },
- // 弹窗关闭回调
- handleBindPostClose(done) {
- this.bindPostDialogVisible = false;
- done();
- },
- // 确认选择岗位
- confirmBindPostSelection() {
- if(this.positionNameSelect.length==0){
- this.$message.error('请选择岗位')
- return
- }
- if (this.positionNameSelect.length > 0) {
- // this.selectedPostRow.roleIds = this.positionNameSelect.join(',');
- this.tableData1.forEach((item, index) => {
- if (this.selectedPostIndex == index) {
- this.tableData1[index].roleIds =this.positionNameSelect
- this.tableData1[index].partyCategory =this.partyCategorySelect
- }
- });
- }else{
- // this.selectedPostRow.roleIds = '';
- this.tableData1.forEach((item, index) => {
- if (this.selectedPostIndex == index) {
- this.tableData1[index].roleIds =[]
- this.tableData1[index].partyCategory = ''
- }
- });
- }
- console.log(this.tableData1,'this.tableData1');
- this.bindPostDialogVisible = false;
- },
- saveBatch(){
- console.log(this.tableData1,'this.tableData1');
- if(this.tableData1.length==0){
- this.$message.error('请选择数据')
- return
- }
- this.saveBatchLoading = true;
- submitEle(
- this.tableData1
- ).then((res) => {
- if(res.data.code==200){
- this.$message.success(res.data.msg)
- this.getTableData();
- this.getRoleData();
- this.addDialogVisible=false
- }else{
- this.$message.error(res.data.msg)
- }
- }).finally(() => {
- this.saveBatchLoading = false;
- });
- }
-
- },
- mounted() {
- this.getRoleData();
- this.getTableData();
- this.getEleOptions();
- this.getDataTypelist();
- },
- components: {}
- }
- </script>
- <style lang="scss" scoped>
- .h100p{
- height: 100%;
- }
- .grid-content1{
- height: 100%;
- border-right: 1px solid #D6D6D6;
- padding-right: 10px;
- .post-list{
- margin-top: -18px;
- height: calc(100% - 110px);
- // border: 1px solid red;
- }
-
- .contextmenu {
- padding: 4px 0; /* 添加适当的内边距 */
- // min-width: 120px;
- }
- .contextmenu ul {
- list-style: none; /* 移除小圆点 */
- padding: 0;
- margin: 0;
- // min-width: 80px;
- background: #fff;
- border: 1px solid #e4e7ed;
- border-radius: 4px;
- box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
- }
- .contextmenu li {
- padding: 8px 16px;
- line-height: 22px;
- display: flex;
- align-items: center;
- cursor: pointer;
- transition: all 0.3s;
- &.selected {
- background-color: #409eff;
- color: white;
- span {
- color: white;
- }
- }
- }
- .contextmenu li i {
- margin-right: 8px;
- font-size: 16px;
- }
- .contextmenu li span {
- font-size: 14px;
- color: #606266;
- }
- .contextmenu li:hover,
- .contextmenu li.active {
- background-color: #f5f7fa;
- color: #409eff;
- }
- .contextmenu li.divider {
- height: 1px;
- background-color: #e4e7ed;
- margin: 4px 0;
- padding: 0;
- }
-
- }
- .grid-content2{
- height: 100%;
- display: flex;
- flex-direction: column;
- .header-btn{
- margin-top: 10px;
- text-align: right;
- }
- .table-box {
- flex: 1;
- overflow: hidden;
-
- .el-table {
- height: 100% !important;
- }
- }
- }
- .tip-text {
- margin-top: -30px;
- color: red;
-
- }
- .source-radio-group{
- margin-top: 20px;
- text-align: center;
- }
- .dropdown-container {
- display: flex;
- margin-top: 20px;
- }
- .element-list-container {
- margin-top: 20px;
- height: 300px;
- overflow-y: auto
- }
- .element-checkbox-list {
- list-style: none;
- padding: 0;
- margin: 0;
- }
- .element-item {
- line-height: 30px;
- padding-left: 10px;
- }
- .bind-post-content {
- padding-bottom: 20px;
- }
- .dropdown-pair {
- display: flex;
- margin-bottom: 20px;
- }
- .position-list-container {
- // border: 1px solid #e4e7ed;
- border-radius: 4px;
- padding: 10px;
- height: 300px;
- overflow-y: auto;
- }
- .position-checkbox-list {
- list-style: none;
- padding: 0;
- margin: 0;
- }
- .position-item {
- line-height: 30px;
- padding-left: 10px;
- }
- .limit-height-select .el-select-dropdown__wrap {
- max-height: 30px !important;
- overflow-y: auto !important;
- }
- </style>
- <style lang="scss" >
- /* 限制已选标签容器高度并启用滚动 */
- .custom-multi-select .el-select__tags {
- max-height: 60px; /* 控制高度 */
- overflow-y: auto; /* 启用滚动 */
- white-space: normal; /* 允许换行(可选) */
- }
- /* 调整折叠标签的显示样式 */
- .custom-multi-select .el-tag {
- margin: 2px 4px 2px 0;
- }
- /* 可选:隐藏原生滚动条(更美观) */
- .custom-multi-select .el-select__tags::-webkit-scrollbar {
- width: 0;
- }
- .dialog-footer-center {
- .el-dialog__footer {
- text-align: center;
- }
- }
- .pagination-page{
- text-align: center;
- margin-top: 10px;
- }
- </style>
|