123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700 |
- <template>
- <!-- 关联公共WBS模板 -->
- <el-dialog
- title="关联公共WBS模板"
- class="excelBox"
- :visible.sync="AssociatedPublicTap"
- modal-append-to-body
- append-to-body
- :close-on-click-modal="false"
- >
- <el-row :gutter="20">
- <el-col :span="12">
- <el-select
- style="width: 100%"
- v-model="GLExcelFrom.name"
- placeholder="请选择"
- @change="changetherr()"
- >
- <el-option
- v-for="(item, key) in GLExcelData"
- :key="key"
- :label="item.wbsName"
- :value="item.id"
- >
- </el-option>
- </el-select>
- <el-scrollbar style="height: 50vh">
- <div class="flex" style="margin-top: 10px" v-if="isShowInput">
- <el-input
- size="small"
- placeholder="输入关键字搜索"
- clearable
- @clear="clearInput"
- v-model="filterText1"
- >
- </el-input>
- <el-button size="small" class="mg-l-10" @click="treeFilter1"
- >搜索</el-button
- >
- </div>
- <el-tree
- v-if="GLExcelFromtag"
- @node-click="handleNodeClickExcel"
- ref="tree"
- class="filter-tree"
- style="margin-top: 10px"
- :props="GLExcelProps"
- :data="exceldata"
- :load="loadNodeTan"
- lazy
- node-key="id"
- accordion
- :show-checkbox="activeName == 'add'"
- :check-strictly="true"
- :default--checked-keys="selectNodeIds"
- >
- </el-tree>
- <el-tree
- style="width: 100%"
- ref="treeall1"
- v-loading="treeloading1"
- :data="allTreeData1"
- :props="treeProps1"
- @node-click="handleNodeClickExcel"
- node-key="id"
- :expand-on-click-node="false"
- :filter-node-method="filterNode1"
- v-show="GLExcelFromtag1"
- :show-checkbox="activeName == 'add'"
- :default--checked-keys="selectNodeIds"
- :check-strictly="true"
- >
- </el-tree>
- </el-scrollbar>
- </el-col>
- <el-col :span="12" v-if="addElementForm.wbsId">
- <el-tabs v-model="activeName" type="card">
- <el-tab-pane label="关联元素表" name="link">
- <el-table
- :data="addTableData"
- border
- style="width: 100%"
- class="martop20"
- >
- <el-table-column
- prop="tableName"
- label="已有元素表名称"
- align="center"
- >
- </el-table-column>
- <el-table-column prop="name" label="操作" align="center">
- <template slot-scope="scope">
- <el-button
- type="primary"
- size="mini"
- style="margin: 0px"
- @click="relationMD(scope.row, '关联')"
- v-show="!scope.row.checknd"
- :loading="scope.row.loading"
- >选择关联</el-button
- >
- <el-button
- type="danger"
- size="mini"
- style="margin: 0px"
- @click="relationMD(scope.row, '取消关联')"
- v-show="scope.row.checknd"
- :loading="scope.row.loading"
- >取消关联</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- </el-tab-pane>
- <el-tab-pane label="新增元素表" name="add">
- <div>
- <div class="flexBetween martop20">
- <el-input
- v-model="addElementForm.nodeName"
- placeholder="请输入表名"
- ></el-input>
- <el-select
- class="marleft10"
- v-model="addElementForm.tableType"
- placeholder="请选择表类型"
- >
- <el-option
- v-for="(item, index) in exceltypeData"
- :key="index"
- :label="item.dictValue"
- :value="item.dictKey"
- ></el-option>
- </el-select>
- </div>
- <el-select
- style="width: 100%"
- class="martop20"
- v-model="addElementForm.tableOwner"
- placeholder="请选择所属方"
- >
- <el-option
- v-for="(item, index) in ownerTypeList"
- :key="index"
- :label="item.dictValue"
- :value="item.dictKey"
- ></el-option>
- </el-select>
- </div>
- </el-tab-pane>
- </el-tabs>
- </el-col>
- </el-row>
- <span
- slot="footer"
- class="dialog-footer"
- style="display: flex; justify-content: center; align-items: center"
- >
- <el-button @click="AssociatedPublicClose()">取 消</el-button>
- <el-button
- style="margin-left: 30px"
- type="primary"
- @click="saveElementMD()"
- >确 定</el-button
- >
- </span>
- </el-dialog>
- </template>
- <script>
- import { getAlltree } from "@/api/manager/wbstree";
- import { getDictionary } from "@/api/system/dict";
- import { dictionarydataType } from "@/api/exctab/editelement";
- import {
- excelType,
- excelType1,
- submitExcelRelationWbsTreeAndElement,
- getWbsTypeList,
- getLazytree,
- cancelRelation,
- saveRelation,
- searchNodeTables,
- savelinktableInfo,
- } from "@/api/exctab/excelmodel";
- import { getColByTabId } from "@/api/manager/AdjustForm";
- export default {
- props: {
- from: Object,
- },
- data() {
- return {
- AssociatedPublicTap: false,
- //#region 弹框属性
- GLExcelFrom: {
- id: "",
- name: "",
- search: "", //搜素框舒服的值
- },
- GLExcelData: [], //
- isShowInput: false,
- filterText1: "",
- GLExcelFromtag1: false,
- GLExcelFromtag: false,
- GLExcelProps: {
- label: "title",
- children: "children",
- isLeaf: function (data) {
- if (data.hasChildren && data.isExistForm != 1) {
- return false;
- } else if (data.hasChildren && data.isExistForm == 1) {
- return true;
- } else {
- return true;
- }
- },
- disabled: function (data) {
- if (data.hasChildren && data.isExistForm != 1) {
- return true;
- } else if (data.hasChildren && data.isExistForm == 1) {
- return false;
- } else {
- return false;
- }
- },
- },
- exceldata: [],
- selectNodeIds: [],
- treeloading1: false,
- allTreeData1: [],
- treeProps1: {
- label: "title",
- children: "children",
- isLeaf: "hasChildren",
- disabled: function (data) {
- if (data.hasChildren && data.isExistForm != 1) {
- return true;
- } else if (data.hasChildren && data.isExistForm == 1) {
- return false;
- } else {
- return false;
- }
- },
- },
- addElementForm: {
- id: "",
- initTableName: "",
- nodeName: "",
- tableType: "",
- tableOwner: "",
- wbsId: "",
- parentId: "",
- },
- nodeTypelist: [],
- ownerTypeList: [],
- addTableData: [], //新增元素信息表
- activeName: "link",
- dataType: [],
- addElement: false,
- exceltypeData: [],
- };
- },
- methods: {
- show() {
- console.log(this.from, "from");
- this.AssociatedPublicTap = true;
- this.addElementForm.nodeName = this.from.title;
- this.addElementForm.tableType = this.from.tableType + "";
- this.addElementForm.tableOwner = this.from.tableOwner;
- //清除数据
- this.filterText1 = "";
- this.exceldata = [];
- this.allTreeData1 = [];
- this.selectedId = "";
- this.GLExcelFrom.name = "";
- this.isShowInput = false;
- //清理之前填写的数据
- this.addElementForm.wbsId = "";
- // this.addElementForm.tableOwner = "";
- this.getWbsTypeList();
- this.getOwnerTypelist();
- this.getColByTabId();
- },
- addElementMD() {
- //新增元素信息表按钮
- this.excelType();
- this.addElement = true;
- },
- async excelType(type) {
- //清表类型
- // const { data: res } = await excelType({ code: "sys_excltab_type" });
- const { data: res } = await excelType1({ code: type });
- console.log(res);
- if (res.code === 200) {
- this.exceltypeData = res.data;
- }
- },
- async getWbsTypeList() {
- //获取清表模板信息
- const { data: res } = await getWbsTypeList({ wbstype: 1 });
- if (res.code === 200 && res.msg === "操作成功") {
- this.GLExcelData = res.data;
- }
- },
- changetherr(item) {
- console.log(item, "关联item");
- console.log(this.GLExcelFrom.name, "name");
- //下拉框change事件
- this.GLExcelFromtag = false;
- this.GLExcelFromtag1 = false;
- this.filterText1 = "";
- if (this.GLExcelFrom.name != "") {
- this.GLExcelFrom.search = "";
- this.exceldata = [];
- this.addTableData = [];
- this.isShowInput = false;
- this.addElementForm.wbsId = "";
- this.$nextTick(() => {
- this.GLExcelFromtag = true;
- });
- }
- },
- clearInput() {
- (this.selectedId = ""),
- (this.GLExcelFromtag1 = false),
- (this.GLExcelFromtag = true);
- if (this.$refs.tree) {
- this.nodeIds = this.$refs.tree.getCheckedKeys();
- }
- if (this.$refs.treeall1) {
- this.nodeIds1 = this.$refs.treeall1.getCheckedKeys();
- }
- this.selectNodeIds = this.uniqueArr(this.nodeIds, this.nodeIds1);
- console.log(this.selectNodeIds, "this.selectNodeIds111111");
- // this.$refs.tree.setCheckedKeys(this.selectNodeIds)
- this.$nextTick(() => {
- this.$refs.tree.setCheckedKeys(this.selectNodeIds);
- });
- },
- treeFilter1() {
- if (this.filterText1) {
- if (this.$refs.tree) {
- this.nodeIds = this.$refs.tree.getCheckedKeys();
- }
- if (this.$refs.treeall1) {
- this.nodeIds1 = this.$refs.treeall1.getCheckedKeys();
- }
- this.selectNodeIds = this.uniqueArr(this.nodeIds, this.nodeIds1);
- this.$refs.treeall1.setCheckedKeys(this.selectNodeIds);
- console.log(this.selectNodeIds, "this.selectNodeIds");
- this.GLExcelFromtag1 = true;
- this.GLExcelFromtag = false;
- this.treeloading1 = true;
- console.log(this.selectedId, "selectedId");
- console.log(this.GLExcelFrom.name, "this.GLExcelFrom.name");
- // tabLazytreeAll({
- // modeId: this.GLExcelFrom.name,
- // name: "",
- // })
- getAlltree("000000", 1, this.GLExcelFrom.name).then((res) => {
- this.treeloading1 = false;
- this.allTreeData1 = res.data.data;
- console.log(this.exceldata, "this.exceldata");
- console.log(this.GLExcelFromtag, "this.GLExcelFromtag");
- this.$nextTick(() => {
- console.log("过滤2", this.filterText1);
- this.$refs.treeall1.filter(this.filterText1);
- });
- });
- }
- },
- handleNodeClickExcel(data) {
- this.excelType("table_type");
- // if(data.wbsType===2){
- // this.excelType('trial_table_type');
- // }else{
- // this.excelType('table_type');
- // }
- //点击节点事件
- this.addElementForm.wbsId = this.GLExcelFrom.name;
- this.addElementForm.parentId = data.id;
- //this.selectByNodeTable(data.id)
- this.searchNodeTables(data.id);
- },
- //#region
- async loadNodeTan(node, resolve) {
- //懒加载
- console.log(node);
- this.selectedId = node.data.id;
- if (node.level === 0) {
- return resolve(await this.getLazytree(0));
- } else {
- return resolve(await this.getLazytree(node.data.id));
- }
- },
- // filterNode1(value, data) {
- // if (!value) return true;
- // return data.title.indexOf(value) !== -1;
- // },
- getReturnNode(node, _array, value) {
- let isPass =
- node.data && node.data.title && node.data.title.indexOf(value) !== -1;
- isPass ? _array.push(isPass) : "";
- if (!isPass && node.level != 1 && node.parent) {
- this.getReturnNode(node.parent, _array, value);
- }
- },
- filterNode1(value, data, node) {
- if (!value) {
- return true;
- }
- let level = node.level;
- let _array = []; //这里使用数组存储 只是为了存储值。
- this.getReturnNode(node, _array, value);
- let result = false;
- _array.forEach((item) => {
- result = result || item;
- });
- return result;
- },
- getOwnerTypelist() {
- if (this.ownerTypeList.length > 1) {
- return;
- }
- getDictionary({
- code: "owner_type",
- }).then((res) => {
- res.data.data.forEach((element) => {
- element.dictKey = Number(element.dictKey);
- });
- this.ownerTypeList = res.data.data;
- });
- },
- relationMD(row, type) {
- console.log("关联元素表", row);
- //关联取消关联
- row.loading = true;
- if (type == "关联") {
- // saveRelation(row.id, this.from.id, this.tableData)
- this.savelinktableInfo1({
- linkids: row.id,
- tabId: this.from.id,
- type: 1,
- wbsId: this.GLExcelFrom.name,
- })
- .then(() => {
- row.checknd = true;
- row.isLinkTable = 2;
- })
- .finally(() => {
- row.loading = false;
- });
- } else {
- this.savelinktableInfo1({
- linkids: row.id,
- tabId: this.from.id,
- type: 4,
- wbsId: this.GLExcelFrom.name,
- })
- .then(() => {
- row.checknd = false;
- row.isLinkTable = 1;
- })
- .finally(() => {
- row.loading = false;
- });
- }
- },
- AssociatedPublicClose() {
- console.log("AssociatedPublicClose");
- //关联公共WBS模板关闭事件
- this.addElementForm = {
- id: "",
- initTableName: "",
- nodeName: "",
- tableType: "",
- tableOwner: "",
- wbsId: "",
- parentId: "",
- };
- this.GLExcelFrom = {
- name: "",
- search: "",
- };
- this.exceldata = [];
- this.addElement = false;
- //清理之前填写的数据
- this.addElementForm.wbsId = "";
- // this.addElementForm.tableType = '';
- this.addElementForm.tableOwner = "";
- if (this.$refs.tree) {
- this.$refs.tree.setCheckedKeys([]);
- this.$refs.tree.setCurrentKey(null);
- }
- this.addTableData = [];
- this.AssociatedPublicTap = false;
- },
- saveElementMD() {
- //保存按钮
- if (this.addElementForm.wbsId) {
- console.log(this.tableData, "this.tableData");
- if (this.activeName == "link") {
- this.AssociatedPublicTap = false;
- this.AssociatedPublicClose();
- } else {
- if (
- this.addElementForm.nodeName &&
- this.addElementForm.tableType &&
- this.addElementForm.tableOwner
- ) {
- if (this.$refs.tree) {
- this.nodeIds = this.$refs.tree.getCheckedKeys();
- }
- if (this.$refs.treeall1) {
- this.nodeIds1 = this.$refs.treeall1.getCheckedKeys();
- }
- this.selectNodeIds = this.uniqueArr(this.nodeIds, this.nodeIds1);
- console.log(this.selectNodeIds, "去重的数组");
- if (this.selectNodeIds.length < 1) {
- this.$message({
- type: "warning",
- message: "至少勾选一个节点",
- });
- return;
- }
- this.selectNodeIds = this.selectNodeIds.join(",");
- this.savelinktableInfo({
- linkids: this.selectNodeIds,
- tabId: this.from.id,
- type: 2,
- wbsId: this.GLExcelFrom.name,
- });
- // this.submitExcelRelationWbsTreeAndElement({
- // nodeName: this.addElementForm.nodeName,
- // tableType: this.addElementForm.tableType,
- // tableOwner: this.addElementForm.tableOwner,
- // wbsId: this.addElementForm.wbsId,
- // elementList: this.tableData,
- // nodeIds: this.selectNodeIds,
- // excelTabId: this.from.id,
- // submitStatus: 2,
- // });
- } else {
- this.$message({
- type: "warning",
- message: "请填写和选择新增的表名,表类型,表所属方",
- });
- }
- }
- } else {
- this.$message({
- type: "warning",
- message: "请先选择WBS树节点表单",
- });
- }
- this.activeName = "link";
- },
- async getLazytree(parentId) {
- //清表树信息
- const { data: res } = await getLazytree({
- parentId: parentId,
- wbsId: this.GLExcelFrom.name,
- wbsType: "1",
- });
- console.log(res);
- if (res.code === 200 && res.msg === "操作成功") {
- this.isShowInput = true;
- console.log(this.isShowInput, " this.isShowInput");
- res.data.forEach((val) => {
- val.isExistForm = !!val.isExistForm;
- });
- return res.data;
- } else {
- return [];
- }
- },
- //查看节点下已关联的元素表信息
- searchNodeTables(id) {
- searchNodeTables(id, this.from.id).then((res) => {
- if (res.data.data&&res.data.data.length > 0) {
- res.data.data.forEach((val) => {
- if (val.isLinkTable == 2) {
- val.checknd = true;
- } else {
- val.checknd = false;
- }
- val.loading = false;
- });
- this.addTableData = res.data.data;
- } else {
- this.addTableData = [];
- }
- });
- },
- //数组去重
- uniqueArr(arr1, arr2) {
- //合并两个数组
- arr1.push(...arr2); //或者arr1 = [...arr1,...arr2]
- //去重
- let arr3 = Array.from(new Set(arr1)); //let arr3 = [...new Set(arr1)]
- return arr3;
- },
- async dictionarydataType() {
- //数据类型字典
- const { data: res } = await dictionarydataType();
- console.log(res);
- if (res.code == 200) {
- res.data.forEach((element) => {
- element.dictKey = Number(element.dictKey);
- });
- this.dataType = res.data;
- }
- },
- // async submitExcelRelationWbsTreeAndElement(da) {
- // console.log(da,'新增元素信息表');
- // //保存接口
- // da.elementList.forEach((ele) => {
- // ele.eName = ele.textInfo;
- // ele.eType = ele.textElementType;
- // ele.eAllowDeviation = ele.textDeviation;
- // });
- // const { data: res } = await submitExcelRelationWbsTreeAndElement(da);
- // if (res.code == 200) {
- // this.$message({
- // type: "success",
- // message: "设置成功",
- // });
- // this.AssociatedPublicTap = false;
- // this.AssociatedPublicClose();
- // }
- // },
- async savelinktableInfo(da) {
- console.log("新增元素表", da);
- const { data: res } = await savelinktableInfo(da);
- if (res.code == 200) {
- this.$message({
- type: "success",
- message: "设置成功",
- });
- this.AssociatedPublicTap = false;
- this.AssociatedPublicClose();
- }
- },
- //选择关联取消关联修改
- async savelinktableInfo1(da) {
- console.log("选择关联", da);
- const { data: res } = await savelinktableInfo(da);
- if (res.code == 200) {
- this.$message({
- type: "success",
- message: "设置成功",
- });
- // this.AssociatedPublicTap = false;
- // this.AssociatedPublicClose();
- }
- },
- async getColByTabId() {
- //获取字段信息
- const { data: res } = await getColByTabId({ tabId: this.from.id });
- // const { data: res } = await getColByTabId({tabId: '1537614072773054466' });
- if (res.code === 200) {
- res.data.forEach((element) => {
- //element.eName = element.textInfo;
- if (element.textElementType < 1) {
- element.textElementType = 1;
- }
- });
- this.tableData = res.data;
- console.log(this.tableData, "获取字段信息");
- }
- },
- },
- };
- </script>
- <style></style>
|