From 3ffbf14664836032438b1fd496aefbd99187e2c9 Mon Sep 17 00:00:00 2001 From: surprise <15810472099@163.com> Date: 星期一, 22 四月 2024 15:17:54 +0800 Subject: [PATCH] 信息管理添加CAD查看 --- src/views/datamanage/metadataManage.vue | 2343 +++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 1,420 insertions(+), 923 deletions(-) diff --git a/src/views/datamanage/metadataManage.vue b/src/views/datamanage/metadataManage.vue index 27cbc90..d8699cc 100644 --- a/src/views/datamanage/metadataManage.vue +++ b/src/views/datamanage/metadataManage.vue @@ -5,29 +5,28 @@ `${$t('dataManage.metadataManage')}`, ]"></My-bread> <el-divider /> - <div class="inquire"> - <el-form - ref="queryForm" - :model="queryForm" - :inline="true" - > - <el-form-item> - <el-cascader - v-model="queryForm.dirid" - :show-all-levels="false" - :options="companyOption" - @change="handleChange" - :props="{ - label: 'name', - value: 'id', - children: 'children', - checkStrictly: true, - emitPath: false, - }" - ></el-cascader> - </el-form-item> - <el-form-item> - <el-cascader + <div class="inquire subpage_Div" + ref="container"> + <el-form ref="queryForm" + :model="queryForm" + :inline="true"> + <div class="flex_box"> + <div style="margin-right: auto"> + <el-form-item size="small"> + <el-select :popper-append-to-body="false" + v-model="queryForm.depName" + ref="treeSelect"> + <el-option :value="queryForm.depid" + :label="queryForm.depName" + style="height: auto"> + <el-tree ref="tree" + :data="companyOption1" + node-key="id" + :props="cascader" + @node-click="handleChange1" /> + </el-option> + </el-select> + <!-- <el-cascader v-model="queryForm.depid" :show-all-levels="false" :options="companyOption1" @@ -39,328 +38,356 @@ checkStrictly: true, emitPath: false, }" - ></el-cascader> - </el-form-item> - <el-form-item prop="name"> - <el-input - v-model="queryForm.name" - :placeholder="$t('common.pleaseInput')" - /> - </el-form-item> - <el-form-item> - <el-button - @click="queryInfo()" - icon="el-icon-search" - class="primary" - size="small" - >{{ $t('common.iquery') }}</el-button> - </el-form-item> - <el-form-item> - <el-button - @click="resetInfo('queryForm')" - icon="el-icon-refresh" - type="info" - size="small" - >{{ $t('common.reset') }}</el-button> - </el-form-item> + ></el-cascader> --> + </el-form-item> + <el-form-item size="small"> + <el-select :popper-append-to-body="false" + v-model="queryForm.dirName" + ref="treeSelect1"> + <el-option :value="queryForm.dirid" + :label="queryForm.dirName" + style="height: auto"> + <el-tree ref="tree" + :data="companyOption" + node-key="id" + :props="cascader" + @node-click="handleChange" /> + </el-option> + </el-select> + <!-- <el-cascader + v-model="queryForm.dirid" + :show-all-levels="false" + :options="companyOption" + @change="handleChange" + :props="{ + label: 'name', + value: 'id', + children: 'children', + checkStrictly: true, + emitPath: false, + }" + ></el-cascader> --> + </el-form-item> + <el-form-item size="small"> + <el-select :popper-append-to-body="false" + v-model="queryForm.verid" + placeholder="璇烽�夋嫨" + @change="verHandleChange($event)"> + <el-option v-for="item in verOptions" + :key="item.id" + :label="item.name" + :value="item.id"> + </el-option> + </el-select> + </el-form-item> + <el-form-item prop="name" + size="small"> + <!-- suffix-icon="el-icon-edit" :placeholder="$t('common.pleaseInput')"--> + <el-input v-model="queryForm.name" + :placeholder="$t('shuJuGuanLi.lable2')" + style="width: 200px"><i slot="suffix" + class="el-icon-search" + @click="queryInfo()" + style="padding-right: 8px"></i></el-input> + </el-form-item> + </div> + <div> + <!-- <el-form-item> + <el-button + @click="queryInfo()" + icon="el-icon-search" + class="primary" + size="small" + >{{ $t("common.iquery") }} + </el-button + > + </el-form-item>--> + <el-form-item v-if="btnStatus.delete"> + <el-button type="danger" + size="small" + @click="deleteMetaInfo" + icon="el-icon-delete">{{ $t("common.delete") }} + </el-button> + </el-form-item> + <el-form-item v-if="btnStatus.download"> + <el-button @click="downFormData" + icon="el-icon-download" + type="success" + size="small">{{ $t("common.download") }} + </el-button> + </el-form-item> - <!-- <el-form-item v-if="btnStatus.insert"> - <el-button - type="success" - size="small" - @click="showAddDialog" - icon="el-icon-plus" - >{{ $t('common.append') }}</el-button - > - </el-form-item> --> - <el-form-item v-if="btnStatus.delete"> - <el-button - type="danger" - size="small" - @click="deleteMetaInfo" - icon="el-icon-delete" - >{{ $t('common.delete') }}</el-button> - </el-form-item> - <el-form-item v-if="btnStatus.download"> - <el-button - @click="downFormData" - icon="el-icon-download" - type="success" - size="small" - >{{ $t('common.download') }}</el-button> - </el-form-item> + <el-form-item> + <el-button @click="resetInfo('queryForm')" + icon="el-icon-refresh" + type="info" + size="small">{{ $t("common.reset") }} + </el-button> + </el-form-item> + </div> + </div> </el-form> </div> - <div class="bottom"> - <!-- <div class="leftTree"> - <el-tree - ref="tree" - :props="defaultProps" - node-key="id" - :data="optionCount" - :default-expanded-keys="[1]" - :current-node-key="1" - :expand-on-click-node="false" - :default-expand-all="false" - draggable - @node-click="handleNodeClick" - > + <div class="dividing-line"></div> + <div class="table_box subpage_Div" + :style="styleVar"> + <el-table :data="tableData" + style="width: 100%" + border + @selection-change="handleSelectionChange" + height="calc(100% - 57px)"> + <el-table-column type="selection" + width="55" /> + <el-table-column :label="$t('dataManage.dictionaryManageObj.number')" + type="index" + width="50"> + </el-table-column> + <el-table-column :label="$t('dataManage.vmobj.name')"> + <template slot-scope="scope"> + <span v-if="scope.row.ismeta > 0"> + <el-link style="color: #409eff" + title="婧愭暟鎹煡璇�" + @click="setQueryMetaData(scope.row)" + target="_blank">{{ scope.row.name }}</el-link> + </span> + <span v-else-if="scope.row.metaid > 0"> + <el-link style="color: #409eff" + title="鍏冩暟鎹煡璇�" + @click="setMetaDataQuery(scope.row)" + target="_blank">{{ scope.row.name }}</el-link> + </span> + <span v-else>{{ scope.row.name }}</span> + </template> + </el-table-column> - </span> - </el-tree> - - </div> --> - <div class="rightTable"> - <div class="table_box"> - <el-table - :data="tableData" - style="width: 100%" - @selection-change="handleSelectionChange" - height="95%" - > - <el-table-column - type="selection" - width="55" - /> - <el-table-column - :label="$t('dataManage.dictionaryManageObj.number')" - type="index" - width="50" - > - </el-table-column> - <el-table-column - prop="name" - :label="$t('dataManage.vmobj.name')" - /> - <el-table-column - prop="type" - :label="$t('dataManage.vmobj.format')" - /> - <el-table-column - prop="sizes" - :label="$t('dataManage.vmobj.size')" - :formatter="stateFormatSizes" - /> - <el-table-column - prop="depName" - :label="$t('dataManage.vmobj.depName')" - /> - <el-table-column - prop="dirName" - :label="$t('dataManage.vmobj.dirName')" - width="200" - /> - <el-table-column - prop="verName" - :label="$t('dataManage.vmobj.versionNumber')" - /> - <el-table-column :label="$t('dataManage.dataUpObj.tableName')"> - <template slot-scope="scope"> - <a @click="detail(scope.row)">{{ - scope.row.tab - }}</a> - </template> - </el-table-column> + <el-table-column prop="type" + :label="$t('dataManage.vmobj.format')"> + <template slot-scope="scope"> + <span v-if="scope.row.type == 'gdb'"> + <el-link @click="setSelectGdbByGuid(scope.row)" + style="color: #409eff"> + {{ scope.row.type }} + </el-link> + </span> + <span v-else> - <!-- <el-table-column + {{ scope.row.type }} + </span> + </template> + + </el-table-column> + + <el-table-column prop="sizes" + :label="$t('dataManage.vmobj.size')" + :formatter="stateFormatSizes" /> + <el-table-column prop="depName" + :label="$t('dataManage.vmobj.depName')" /> + <el-table-column prop="dirName" + :label="$t('dataManage.vmobj.dirName')" + width="200" /> + <el-table-column prop="verName" + :label="$t('dataManage.vmobj.versionNumber')" /> + <el-table-column :label="$t('dataManage.dataUpObj.tableName')"> + <template slot-scope="scope"> + <!-- <span ></span> --> + <el-link></el-link> + <el-link :underline="false" + @click="detail(scope.row)">{{ + scope.row.tab + }}</el-link> + </template> + </el-table-column> + + <!-- <el-table-column prop="tab" :label="$t('dataManage.vmobj.tab')" :formatter="formatData" /> --> - <el-table-column - prop="rows" - :label="$t('dataManage.vmobj.row')" - /> - <el-table-column - prop="uname" - :label="$t('dataManage.vmobj.createonuser')" - /> - <el-table-column - prop="createTime" - :label="$t('dataManage.vmobj.createontime')" - :formatter="formatData" - /> - <el-table-column - min-width="100" - :label="$t('common.operate')" - > - <template slot-scope="scope"> - <el-link - style="color: white" - @click="showDetail(scope.row)" - >{{ - $t('common.details') - }}</el-link> - <el-link - @click="editInfo(scope.row)" - style="margin-left: 10px; color: white" - >{{ $t('common.edit') }}</el-link> - </template> - </el-table-column> - </el-table> - </div> - <div - style="margin-top: 0px" - class="pagination_box" - > - <el-pagination - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - :current-page="listData.pageIndex" - :page-sizes="[10, 20, 50, 100]" - :page-size="listData.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="count" - > - </el-pagination> - </div> + <el-table-column prop="rows" + :label="$t('dataManage.vmobj.row')" /> + + <el-table-column :label="$t('common.dataStatus')" + :formatter="stateFormat"> + + </el-table-column> + <el-table-column prop="uname" + :label="$t('dataManage.vmobj.createonuser')" /> + <el-table-column prop="createTime" + :label="$t('dataManage.vmobj.createontime')" + :formatter="formatData" /> + <el-table-column min-width="210" + :label="$t('common.operate')"> + <template slot-scope="scope"> + <el-button @click="showDetail(scope.row)" + type="primary" + plain + size="small">{{ $t("common.details") }} + </el-button> + <el-button type="warning" + plain + size="small" + v-if="btnStatus.update" + @click="editInfo(scope.row)" + style="margin-left: 10px">{{ $t("common.edit") }} + </el-button> + <el-button plain + size="small" + v-if="showPreview(scope.row)" + @click="handlePreview(scope.row)" + style="margin-left: 10px">{{ $t("common.preview") }} + </el-button> + <el-button plain + size="small" + type="success" + v-if="showCAD(scope.row)" + @click="handleCAD(scope.row)" + style="margin-left: 10px"> + {{ $t('common.preview') }}</el-button> + </template> + </el-table-column> + </el-table> + <div class="pagination_box" + style="margin-top: 15px"> + <el-pagination @size-change="handleSizeChange" + @current-change="handleCurrentChange" + :current-page="listData.pageIndex" + :page-sizes="[10, 50, 100, 200]" + :page-size="listData.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="count"> + </el-pagination> </div> </div> - <div - class="infoBox" - v-show="showinfoBox" - > - <el-card class="box-card"> - <div - slot="header" - class="clearfix" - > - <span>{{ $t('common.details') }}</span> - <div - style="float: right; cursor: pointer" - @click="closeDetial" - > + <div class="infoBox_box" + v-show="showinfoBox" + style="z-index:99999"> + <div class="infoBox box_div"> + <div slot="header" + class="clearfix"> + <span>{{ $t("common.details") }}</span> + <div style="float: right; cursor: pointer" + @click="closeDetial"> <i class="el-icon-close"></i> </div> </div> - <div - class="contentBox" - style="padding:1%" - > - <p>{{ $t('dataManage.vmobj.name') }}锛歿{ itemdetail.name }}</p> + <el-divider></el-divider> + <div class="contentBox" + style="padding: 1%"> + <p>{{ $t("dataManage.vmobj.name") }}锛歿{ itemdetail.name }}</p> <el-divider></el-divider> - <p>{{ $t('dataManage.vmobj.format') }}锛歿{ itemdetail.type }}</p> + <p>{{ $t("dataManage.vmobj.format") }}锛歿{ itemdetail.type }}</p> <el-divider></el-divider> - <p>{{ $t('common.size') }}锛歿{ setInfoBoxSize(itemdetail.sizes) }}</p> + <p>{{ $t("common.size") }}锛歿{ setInfoBoxSize(itemdetail.sizes) }}</p> <el-divider></el-divider> - <p>{{ $t('dataManage.vmobj.depName') }}锛歿{ itemdetail.depName }}</p> + <p>{{ $t("dataManage.vmobj.depName") }}锛歿{ itemdetail.depName }}</p> + <el-divider></el-divider> + <p>{{ $t("dataManage.vmobj.dirName") }}锛歿{ itemdetail.dirName }}</p> <el-divider></el-divider> <p> - {{ $t('dataManage.vmobj.dirName') }}锛歿{ - itemdetail.dirName - }} + {{ $t("dataManage.vmobj.versionNumber") }}锛歿{ itemdetail.verName }} + </p> + <el-divider></el-divider> + <p>{{ $t("dataManage.vmobj.tab") }}锛歿{ itemdetail.tab }}</p> + <el-divider></el-divider> + <p>{{ $t("dataManage.vmobj.row") }}锛歿{ itemdetail.rows }}</p> + <el-divider></el-divider> + <p> + {{ $t("dataManage.vmobj.createonuser") }}锛歿{ itemdetail.uname }} </p> <el-divider></el-divider> <p> - {{ $t('dataManage.vmobj.versionNumber') }}锛歿{ itemdetail.verName }} - </p> - <el-divider></el-divider> - <p> - {{ $t('dataManage.vmobj.tab') }}锛歿{ itemdetail.tab }} - </p> - <el-divider></el-divider> - <p> - {{ $t('dataManage.vmobj.row') }}锛歿{ itemdetail.row }} - </p> - <el-divider></el-divider> - <p> - {{ $t('dataManage.vmobj.createonuser') }}锛歿{ itemdetail.uname }} - </p> - <el-divider></el-divider> - <p> - {{ $t('dataManage.vmobj.createontime') }}锛歿{ + {{ $t("dataManage.vmobj.createontime") }}锛歿{ setInfoBoxTime(itemdetail.createTime) }} </p> <el-divider></el-divider> - <p> - {{ $t('dataManage.vmobj.updateonuser') }}锛歿{ - itemdetail.updateUser - }} + <!-- <p> + {{ $t("dataManage.vmobj.depName") }}锛歿{ itemdetail.updateUser }} </p> <el-divider></el-divider> <p> - {{ $t('dataManage.vmobj.updateontime') }}锛歿{ + {{ $t("dataManage.vmobj.depName") }}锛歿{ setInfoBoxTime(itemdetail.updateTime) }} - </p> + </p> --> </div> - </el-card> + </div> </div> - <el-dialog - width="510px" - top="5vh" - :title=" + + <el-dialog width="80vh" + top="5vh" + :title=" behavior == '鏂板鐢ㄦ埛' ? `${$t('common.append')}` : `${$t('common.update')}` " - :visible.sync="dialogFormVisible" - :before-close="handleClose" - > - <el-form - :model="editForm" - ref="editForm" - > - <el-form-item - :label="$t('dataManage.vmobj.name')" - :label-width="formLabelWidth" - > - <el-input - v-model="editForm.name" - autocomplete="off" - ></el-input> + :visible.sync="dialogFormVisible" + :before-close="handleClose"> + <el-form :model="editForm" + ref="editForm"> + <el-form-item :label="$t('dataManage.vmobj.name')" + :label-width="formLabelWidth"> + <el-input v-model="editForm.name" + autocomplete="off"></el-input> </el-form-item> - <el-form-item - :label="$t('dataManage.vmobj.format')" - :label-width="formLabelWidth" - > - <el-input - v-model="editForm.type" - autocomplete="off" - ></el-input> + <el-form-item :label="$t('dataManage.vmobj.format')" + :label-width="formLabelWidth"> + <el-input v-model="editForm.type" + autocomplete="off"></el-input> </el-form-item> - <el-form-item - :label="$t('dataManage.vmobj.size')" - :label-width="formLabelWidth" - > - <el-input - v-model="editForm.sizes" - autocomplete="off" - ></el-input> + <el-form-item :label="$t('dataManage.vmobj.size')" + :label-width="formLabelWidth"> + <el-input v-model="editForm.sizes" + autocomplete="off"></el-input> </el-form-item> - <el-form-item - :label="$t('dataManage.vmobj.depName')" - :label-width="formLabelWidth" - > - <!-- <el-input v-model="editForm.depName" autocomplete="off"></el-input> --> - <el-cascader + <el-form-item :label="$t('dataManage.vmobj.depName')" + :label-width="formLabelWidth"> + <el-select style="width: 100%" + :popper-append-to-body="false" + v-model="editForm.depName"> + <el-option :value="editForm.depid" + :label="editForm.depName" + style="height: auto"> + <el-tree ref="tree" + :data="companyOption1" + node-key="id" + :props="cascader" + @node-click="handleChange2" /> + </el-option> + </el-select> + <!-- <el-cascader v-model="editForm.depid" :options="companyOption" :props="cascader" style="width:350px" - ></el-cascader> + ></el-cascader> --> </el-form-item> - <el-form-item - :label="$t('dataManage.vmobj.dirName')" - :label-width="formLabelWidth" - > - <!-- <el-input v-model="editForm.depName" autocomplete="off"></el-input> --> - <el-cascader + <el-form-item :label="$t('dataManage.vmobj.dirName')" + :label-width="formLabelWidth"> + <el-select style="width: 100%" + :popper-append-to-body="false" + v-model="editForm.dirName"> + <el-option :value="editForm.dirid" + :label="editForm.dirName" + style="height: auto"> + <el-tree ref="tree" + :data="dirComPanyOption" + node-key="id" + :props="cascader" + @node-click="handleChange3" /> + </el-option> + </el-select> + <!-- <el-cascader v-model="editForm.dirid" :options="dirComPanyOption" :props="cascader" style="width:350px" - ></el-cascader> + ></el-cascader> --> </el-form-item> - <el-form-item - :label="$t('dataManage.vmobj.describe')" - :label-width="formLabelWidth" - > - <el-input - v-model="editForm.describe" - autocomplete="off" - ></el-input> + <el-form-item :label="$t('dataManage.vmobj.describe')" + :label-width="formLabelWidth"> + <el-input v-model="editForm.describe" + autocomplete="off"></el-input> </el-form-item> <!-- <el-form-item :label="$t('dataManage.vmobj.gather')" @@ -369,222 +396,506 @@ <el-input v-model="editForm.gather" autocomplete="off"></el-input> </el-form-item> --> </el-form> - <div - v-if="behavior == '淇敼淇℃伅'" - slot="footer" - class="dialog-footer" - > - <el-button - size="medium" - @click="cancelEdit()" - >{{ - $t('common.reset') - }}</el-button> - <el-button - size="medium" - type="primary" - @click="sendEdit('editForm')" - v-loading.fullscreen.lock="fullscreenLoading" - >{{ $t('common.submit') }}</el-button> + <div v-if="behavior == '淇敼淇℃伅'" + slot="footer" + class="dialog-footer"> + <el-button size="small" + @click="cancelEdit()">{{ $t("common.reset") }} + </el-button> + <el-button size="small" + type="primary" + @click="sendEdit('editForm')" + v-loading.fullscreen.lock="fullscreenLoading">{{ $t("common.submit") }} + </el-button> </div> - <div - v-else - slot="footer" - class="dialog-footer" - > - <el-button - size="medium" - @click="cancelAdd('editForm')" - >{{ - $t('common.reset') - }}</el-button> - <el-button - size="medium" - type="primary" - @click="sendAdd('editForm')" - v-loading.fullscreen.lock="fullscreenLoading" - >{{ $t('common.submit') }}</el-button> + <div v-else + slot="footer" + class="dialog-footer"> + <el-button size="small" + @click="cancelAdd('editForm')">{{ $t("common.reset") }} + </el-button> + <el-button size="small" + type="primary" + @click="sendAdd('editForm')" + v-loading.fullscreen.lock="fullscreenLoading">{{ $t("common.submit") }} + </el-button> </div> </el-dialog> - <el-dialog - :title="$t('common.details')" - :visible.sync="dialogVisible" - width="70%" - > - <div style="height:600px"> - <el-table - ref="filterTable" - :data="dbTableData" - height="90%" - border - style="width: 100%" - > - <el-table-column - width="60" - align="center" - type="index" - :label="$t('common.index')" - /> - <el-table-column - v-for="(item, index) in attributeData" - :key="index" - :label="item.alias" - :prop="item.field" - show-overflow-tooltip - align="center" - ></el-table-column> + <el-dialog :title="$t('common.details')" + :visible.sync="dialogVisible" + width="70%"> + <div style="height: 600px"> + <el-table ref="filterTable" + :data="dbTableData" + height="90%" + border + style="width: 100%"> + <el-table-column width="60" + align="center" + type="index" + :label="$t('common.index')" /> + <el-table-column v-for="(item, index) in attributeData" + :key="index" + :label="item.alias" + :prop="item.field" + show-overflow-tooltip + align="center"></el-table-column> </el-table> - <div - style="margin-top: 10px" - class="pagination_box" - > - <el-pagination - @size-change="handleLoaderSizeChange" - @current-change="handleLoaderCurrentChange" - :current-page="listLoader.pageIndex" - :page-sizes="[10, 20, 30, 40]" - :page-size="listLoader.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="count1" - > + <div style="margin-top: 10px" + class="pagination_box"> + <el-pagination @size-change="handleLoaderSizeChange" + @current-change="handleLoaderCurrentChange" + :current-page="listLoader.pageIndex" + :page-sizes="[10, 50, 100, 200]" + :page-size="listLoader.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="count1"> </el-pagination> </div> </div> - </el-dialog> - <div - class="downloadBox" - v-if="showCodeBox" - > - <h4 style="padding: 20px">{{$t('common.passworld')}}</h4> - <el-form - :model="codeForm" - :rules="rules" - ref="codeForm" - label-width="100px" - class="codeForm" - > - <el-form-item - :label="$t('common.passworld')" - prop="password" - > - <el-input - type="password" - v-model="codeForm.password" - show-password - ></el-input> + <div class="downloadBox box_div subpage_Div" + v-if="showCodeBox"> + <h4 style="padding: 20px">{{ $t("common.passworld") }}</h4> + <el-form :model="codeForm" + :rules="rules" + ref="codeForm" + label-width="100px" + class="codeForm"> + <el-form-item :label="$t('common.passworld')" + prop="password"> + <el-input type="password" + v-model="codeForm.password" + show-password></el-input> </el-form-item> - <el-form-item - :label="$t('common.SPassword')" - prop="repassword" - > - <el-input - type="password" - v-model="codeForm.repassword" - show-password - ></el-input> + <el-form-item :label="$t('common.SPassword')" + prop="repassword"> + <el-input type="password" + v-model="codeForm.repassword" + show-password></el-input> </el-form-item> <el-form-item> - <el-button - class="primary" - size="small" - @click="download('codeForm')" - >{{$t('common.confirm')}}</el-button> - <el-button - type="info" - size="small" - @click="closeDown('codeForm')" - >{{$t('common.cancel')}}</el-button> + <el-button class="primary" + size="small" + @click="download('codeForm')">{{ $t("common.confirm") }} + </el-button> + <el-button type="info" + size="small" + @click="closeDown('codeForm')">{{ $t("common.cancel") }} + </el-button> </el-form-item> </el-form> </div> - <iframe - id="downFrame" - src="" - style="display: none; border: 0; padding: 0; height: 0; width: 0" - ></iframe> + <el-dialog :title="fromQueryMeta.title" + :visible.sync="queryMetaFlag" + width="70%"> + <div style="height: 65vh; width: 100%"> + <el-form :inline="true" + :model="fromQueryMeta" + class="demo-form-inline"> + <el-form-item> + <el-input size="small" + v-model="fromQueryMeta.name"></el-input> + </el-form-item> + + <el-form-item> + <el-button type="primary" + size="small" + @click="setSearchMetaData()">鏌ヨ + </el-button> + <el-button type="info" + size="small" + @click="setRestMetaData()">閲嶇疆 + </el-button> + </el-form-item> + </el-form> + <el-table ref="filterTable" + :data="metaDataTable" + style="width: 100%" + height="calc(100% - 100px)"> + <el-table-column align="center" + type="index" + :label="$t('common.index')" + width="70px"></el-table-column> + <el-table-column align="center" + prop="name" + :label="$t('common.name')" + width="120"> + </el-table-column> + <el-table-column align="center" + prop="dirName" + :label="$t('dataManage.dataUpObj.catalogue')" + width="300" /> + <el-table-column align="center" + prop="depName" + :label="$t('dataManage.dataUpObj.company')" + width="200" /> + <el-table-column align="center" + prop="verName" + :label="$t('dataManage.dataUpObj.versionNo')" /> + <el-table-column align="center" + prop="type" + :label="$t('common.type')" /> + <el-table-column align="center" + prop="sizes" + :label="$t('common.size')" + :formatter="changeSizeFile" /> + <el-table-column align="center" + :label="$t('dataManage.dataUpObj.tableName')"> + <template slot-scope="scope"> + <a class="scopeRowColor" + @click="detail(scope.row)">{{ + scope.row.tab + }}</a> + </template> + </el-table-column> + <el-table-column align="center" + prop="rows" + :label="$t('common.lineNuber')" /> + <el-table-column align="center" + prop="desc" + :label="$t('dataManage.dataUpObj.describe')" /> + </el-table> + <div class="pagination_box" + style="margin-top: 15px"> + <el-pagination @size-change="handleMetaSizeChange" + @current-change="handMetaCurrentChange" + :current-page="listMetaData.pageIndex" + :page-sizes="[10, 50, 100, 200,500]" + :page-size="listMetaData.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="listMetaData.count"> + </el-pagination> + </div> + </div> + </el-dialog> + <el-dialog :title="fromQueryMeta.title" + :visible.sync="queryMetaFlag1" + width="70%"> + <div style="height: 65vh; width: 100%"> + <el-table ref="filterTable" + :data="metaDataTable1" + style="width: 100%" + height="100%"> + <el-table-column align="center" + type="index" + :label="$t('common.index')" + width="70px"></el-table-column> + <el-table-column align="center" + prop="name" + :label="$t('common.name')" + width="120"> + </el-table-column> + <el-table-column align="center" + prop="dirName" + :label="$t('dataManage.dataUpObj.catalogue')" + width="300" /> + <el-table-column align="center" + prop="depName" + :label="$t('dataManage.dataUpObj.company')" + width="200" /> + <el-table-column align="center" + prop="verName" + :label="$t('dataManage.dataUpObj.versionNo')" /> + <el-table-column align="center" + prop="type" + :label="$t('common.type')" /> + <el-table-column align="center" + prop="sizes" + :label="$t('common.size')" + :formatter="changeSizeFile" /> + <el-table-column align="center" + :label="$t('dataManage.dataUpObj.tableName')"> + <template slot-scope="scope"> + <a class="scopeRowColor" + @click="detail(scope.row)">{{ + scope.row.tab + }}</a> + </template> + </el-table-column> + <el-table-column align="center" + prop="rows" + :label="$t('common.lineNuber')" /> + <el-table-column align="center" + prop="desc" + :label="$t('dataManage.dataUpObj.describe')" /> + </el-table> + </div> + </el-dialog> + <el-dialog custom-class="preview-dialog" + title="棰勮" + :append-to-body="false" + :visible.sync="dialog.dialogVisible" + width="70%" + :close-on-click-modal="false"> + <div v-if="dialog.isPdf" + class="pdfClass"> + <iframe :src="dialog.src" + type="application/x-google-chrome-pdf" + width="100%" + height="100%"> + </iframe> + </div> + <div v-if="dialog.isJpg" + class="pdfClass"> + <el-image style="width: 100%; height: 100%" + :src="dialog.src" + :preview-src-list="[dialog.src]"> + </el-image> + </div> + </el-dialog> + <el-dialog title="鏁版嵁鐢宠" + :visible.sync="dialogInsertFile" + width="30%" + top="10vh" + :modal="false" + :close-on-click-modal="false" + :show-close="false"> + <el-form ref="form" + :model="fileFrom" + label-width="100px"> + <el-form-item label="瀹℃牳鍗曚綅"> + <div> + <ul> + <li v-for="item in fileFrom.depid"> + {{ item.name }} + </li> + </ul> + </div> + </el-form-item> + + <el-form-item label="鎻忚堪"> + <el-input type="textarea" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="fileFrom.descr" + maxlength="50" + show-word-limit> + </el-input> + </el-form-item> + <el-form-item> + <el-button class="primary" + size="small" + @click="getFileInsertApply()">{{ $t("common.confirm") }}</el-button> + <el-button type="info" + size="small" + @click="handleInsertFileClose()">{{ $t("common.cancel") }}</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog title="" + :visible.sync="gdbDialog" + width="80%" + top="8vh" + :modal="false" + :close-on-click-modal="false"> + <div class="gdbTableBox"> + <el-table :data="gdbData" + style="width: 100%" + max-height="38.54167vw"> + <el-table-column type="selection" + width="55" /> + <el-table-column :label="$t('dataManage.dictionaryManageObj.number')" + type="index" + width="50"> + </el-table-column> + <el-table-column :label="$t('dataManage.vmobj.name')"> + <template slot-scope="scope"> + <span v-if="scope.row.ismeta > 0"> + <el-link style="color: #409eff" + title="婧愭暟鎹煡璇�" + @click="setQueryMetaData(scope.row)" + target="_blank">{{ scope.row.name }}</el-link> + </span> + <span v-else-if="scope.row.metaid > 0"> + <el-link style="color: #409eff" + title="鍏冩暟鎹煡璇�" + @click="setMetaDataQuery(scope.row)" + target="_blank">{{ scope.row.name }}</el-link> + </span> + <span v-else>{{ scope.row.name }}</span> + </template> + </el-table-column> + + <el-table-column prop="type" + :label="$t('dataManage.vmobj.format')"> + + </el-table-column> + + <el-table-column prop="sizes" + :label="$t('dataManage.vmobj.size')" + :formatter="stateFormatSizes" /> + <el-table-column prop="depName" + :label="$t('dataManage.vmobj.depName')" /> + <el-table-column prop="dirName" + :label="$t('dataManage.vmobj.dirName')" + width="200" /> + <el-table-column prop="verName" + :label="$t('dataManage.vmobj.versionNumber')" /> + <el-table-column :label="$t('dataManage.dataUpObj.tableName')"> + <template slot-scope="scope"> + + <el-link></el-link> + <el-link :underline="false" + @click="detail(scope.row)">{{ + scope.row.tab + }}</el-link> + </template> + </el-table-column> + + <el-table-column prop="rows" + :label="$t('dataManage.vmobj.row')" /> + + <el-table-column :label="$t('common.dataStatus')" + :formatter="stateFormat"> + + </el-table-column> + <el-table-column prop="uname" + :label="$t('dataManage.vmobj.createonuser')" /> + <el-table-column prop="createTime" + :label="$t('dataManage.vmobj.createontime')" + :formatter="formatData" /> + <el-table-column min-width="210" + :label="$t('common.operate')"> + <template slot-scope="scope"> + <el-button @click="showDetail(scope.row)" + type="primary" + plain + size="small">{{ $t("common.details") }} + </el-button> + <el-button type="warning" + plain + size="small" + v-if="btnStatus.update" + @click="editInfo(scope.row)" + style="margin-left: 10px">{{ $t("common.edit") }} + </el-button> + <el-button plain + size="small" + v-if="showPreview(scope.row)" + @click="handlePreview(scope.row)" + style="margin-left: 10px">{{ $t("common.preview") }} + </el-button> + </template> + </el-table-column> + </el-table> + </div> + + </el-dialog> + <iframe id="downFrame" + src="" + style="display: none; border: 0; padding: 0; height: 0; width: 0"></iframe> + + <div class="loadBox" + v-if="loadDialogVisible"> + <div style="widht:100%; margin:20px; color:white"> + <div style="margin-left:99%"> + <!-- <el-link + @click="setloadDialogVisible()" + style="color:white" + > X</el-link> --> + </div> + </div> + <div v-loading="true" + element-loading-background="rgba(0, 0, 0, 0.0) " + element-loading-text="鏁版嵁鍒犻櫎涓�" + style="margin: 0px 20px;widht:100%;height:calc(100% - 80px); "> + </div> + </div> </div> </template> <script> -import $ from 'jquery' -import { getToken } from '@/utils/auth'; +import $ from "jquery"; +import { getToken } from "@/utils/auth"; import { - select_meta_ByPageAndCount, - // queryDataCount, - updateMeta, + encr, deleteMeta, insertMeta, - selectDictTab, - selectdirTab, - selectdepTab, meta_downloadReq, - sign_getPublicKey, + meta_selectByPageForUpload, meta_selectDownloadFile, meta_selectFields, - meta_selectByPageForUpload -} from '../../api/api'; + meta_selectPageAndCountByPid, + meta_selectVerByDirid, + select_meta_ByPageAndCount, + selectdepTab, + selectdirTab, + sign_getPublicKey, + updateMeta, + meta_selectById, + meta_selectMetaOverflowDep, + meta_selectDepsByCodes, + apply_insertApply, + meta_selectGdbByGuid, + meta_selectConvertToDwg +} from "../../api/api"; -import MyBread from '../../components/MyBread.vue'; +import MyBread from "../../components/MyBread.vue"; + export default { - name: 'metadataManage', + name: "metadataManage", components: { MyBread }, - data() { - var repasswordValidator = (rule, value, callback) => { - if (value === '') { - callback(new Error('璇峰啀娆¤緭鍏ュ瘑鐮�')); - } else if (value !== this.codeForm.password) { - callback(new Error('涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�!')); + data () { + var repasswordValidator=(rule,value,callback) => { + if(value==="") { + callback(new Error("璇峰啀娆¤緭鍏ュ瘑鐮�")); + } else if(value!==this.codeForm.password) { + callback(new Error("涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�!")); } else { callback(); } }; - var passwordValidator = (rule, value, callback) => { - var passwordreg = + var passwordValidator=(rule,value,callback) => { + var passwordreg= /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W!@#$%^&*`~()\\-_+=,.?;<>]+$)(?![a-z0-9]+$)(?![a-z\W!@#$%^&*`~()\\-_+=,.?;<>]+$)(?![0-9\W!@#$%^&*`~()\\-_+=,.?;<>]+$)[a-zA-Z0-9\W!@#$%^&*`~()\\-_+=,.?;<>]{12,20}$/; - if (!passwordreg.test(value)) { - callback( - new Error('瀵嗙爜蹇呴』鐢辨暟瀛椼�佸瓧姣嶃�佺壒娈婂瓧绗︾粍鍚�,璇疯緭鍏�13-20浣�') - ); + if(!passwordreg.test(value)) { + callback(new Error("瀵嗙爜蹇呴』鐢辨暟瀛椼�佸瓧姣嶃�佺壒娈婂瓧绗︾粍鍚�,璇疯緭鍏�13-20浣�")); } else { callback(); } }; return { + verOptions: [], defaultProps: { - children: 'children', - label: 'name', + children: "children", + label: "name", }, dirComPanyOption: [], companyOption: [], companyOption1: [], - activeName: '', + activeName: "", optionCount: [], showCodeBox: false, value: true, multipleSelection: [], - formLabelWidth: '120px', + formLabelWidth: "120px", dialogFormVisible: false, editForm: {}, showinfoBox: false, fullscreenLoading: false, itemdetail: {}, queryForm: { - name: '', - dirid: '', - depid: '' + name: "", + dirid: "", + depid: "", + verid: "", + depName: "", + }, - behavior: '', - initialForm: '', + behavior: "", + initialForm: "", codeForm: { - password: '', - repassword: '', + password: "", + repassword: "", }, rules: { - password: [{ required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'blur' }, { validator: passwordValidator, trigger: 'blur' }], + password: [ + { required: true,message: "璇疯緭鍏ュ瘑鐮�",trigger: "blur" }, + { validator: passwordValidator,trigger: "blur" }, + ], repassword: [ - { required: true, message: '璇疯緭鍏ョ‘璁ゅ瘑鐮�', trigger: 'blur' }, - { validator: repasswordValidator, trigger: 'blur' }, + { required: true,message: "璇疯緭鍏ョ‘璁ゅ瘑鐮�",trigger: "blur" }, + { validator: repasswordValidator,trigger: "blur" }, ], }, tableData: [], @@ -606,222 +917,424 @@ pageIndex: 1, name: null, dirid: null, - depid: null + depid: null, }, cascader: { - label: 'name', - value: 'id', - children: 'children', + label: "name", + value: "id", + children: "children", checkStrictly: true, emitPath: false, }, dialogVisible: false, listLoader: { id: null, - pageSize: 1, + pageIndex: 1, pageSize: 10, }, count1: 0, attributeData: [], + tableHeight: 0, + timer: 0, + styleVar: { + height: "calc(100% - 109px)", + }, + listMetaData: { + metaid: 0, + name: "", + pageIndex: 1, + pageSize: 10, + count: 0, + }, + queryMetaFlag: false, + fromQueryMeta: { + title: "", + name: "", + }, + metaDataTable: [], + queryMetaFlag1: false, + metaDataTable1: [], + dialog: { + dialogVisible: false, + isPdf: false, + isJpg: false, + src: "", + }, + dialogInsertFile: false, + fileFrom: { + descr: null, + depid: null, + ids: null, + pwd: null, + depcodes: null, + }, + gdbData: [], + gdbDialog: false, + gdbGuid: null, + loadDialogVisible: false }; }, - created() { - + created () { // this.getSelectDictTab(); this.showPermsBtn(); this.getQueryDepTree(); this.signGetPublicKey(); - + }, + beforeDestroy () { + this.timer&&clearTimeout(this.timer); + window.removeEventListener("resize",this.onResize); }, - methods: { - async detail(res) { - var val = res.tab.split("."); - const data = await meta_selectFields({ - ns: val[0], - tab: val[1] - }) + mounted () { + window.addEventListener("resize",this.onResize); + this.calHeight(); + }, + watch: { + "queryForm.depName" () { - if (data.code != 200) { - this.$message.error('瀛楁鍒楄〃璋冪敤澶辫触'); - return + this.$refs.treeSelect.visible=false; + }, + "queryForm.dirid" () { + + this.$refs.treeSelect1.visible=false; + }, + }, + methods: { + //gdb 鐐瑰嚮浜嬩欢 + setSelectGdbByGuid (row) { + this.gdbGuid=row.guid + this.getSelectGdbByGuid(); + }, + async getSelectGdbByGuid () { + if(!this.gdbGuid) return + const data=await meta_selectGdbByGuid({ guid: this.gdbGuid }) + if(data.code!=200) { + return this.$message.error("鏍规嵁GUID鏌ヨGDB鏁版嵁澶辫触"); + } + if(data.count<=0) { + return this.$message("鏌ユ棤鏇村鏁版嵁"); + } + this.gdbData=data.result; + this.gdbDialog=true; + + }, + + + stateFormat (row,column) { + var val=['shp','gdb','xls','xlsx'] + if(val.indexOf(row.type)>-1&&row.rows>0) { + return '宸蹭笂浼�,宸插叆搴�' + } else if(val.indexOf(row.type)>-1&&row.rows==0) { + return '宸蹭笂浼�,鏈叆搴�' + } else { + return '宸蹭笂浼�' + } + }, + //澶у皬鍊兼敼鍙� + changeSizeFile (row,column,cellValue,index) { + if(cellValue>=1024) { + return parseFloat(cellValue/1204).toFixed(3)+"GB"; + } else { + return cellValue+"MB"; + } + }, + setRestMetaData () { + this.fromQueryMeta.name=""; + this.listMetaData.name=this.fromQueryMeta.name; + this.listMetaData.pageIndex=1; + this.listMetaData.pageSize=10; + + this.startQueryMetaData(); + }, + setSearchMetaData () { + this.listMetaData.name=this.fromQueryMeta.name; + this.listMetaData.pageIndex=1; + this.listMetaData.pageSize=10; + + this.startQueryMetaData(); + }, + //婧愭暟鎹〉闈㈠垏鎹� + handleMetaSizeChange (val) { + this.listMetaData.pageIndex=1; + this.listMetaData.pageSize=val; + this.startQueryMetaData(); + }, + //婧愭暟鎹〉闈㈠垏鎹� + handMetaCurrentChange (val) { + this.listMetaData.pageIndex=val; + this.startQueryMetaData(); + }, + //鍏冩暟鎹煡璇� + async setMetaDataQuery (row) { + this.fromQueryMeta.title=row.name; + this.listMetaData={ + id: row.metaid, + + }; + const data=await meta_selectById(this.listMetaData); + if(data.code!=200) { + return; } - this.dialogVisible = true; + this.queryMetaFlag1=true; + this.metaDataTable1=[data.result]; + // this.listMetaData.count = data.count; + }, - this.attributeData = data.result; + //婧愭暟鎹煡璇� + setQueryMetaData (row) { + this.fromQueryMeta.title=row.name; + this.listMetaData={ + metaid: row.id, + name: "", + pageIndex: 1, + pageSize: 10, + count: 0, + }; + this.startQueryMetaData(); + this.queryMetaFlag=true; + }, + async startQueryMetaData () { + const data=await meta_selectPageAndCountByPid(this.listMetaData); + if(data.code!=200) { + return; + } + this.metaDataTable=data.result; + this.listMetaData.count=data.count; + }, - this.listLoader = { + onResize () { + this.timer&&clearTimeout(this.timer); + this.timer=setTimeout(() => { + this.calHeight(); + },500); + }, + calHeight () { + this.$nextTick(() => { + const rect=this.$refs.container.getBoundingClientRect(); + this.tableHeight=`${rect.height+97}px`; + this.styleVar["height"]=`calc(100% - ${rect.height+28}px)`; + }); + }, + async detail (res) { + var val=res.tab.split("."); + const data=await meta_selectFields({ + ns: val[0], + tab: val[1], + }); + + if(data.code!=200) { + this.$message.error("瀛楁鍒楄〃璋冪敤澶辫触"); + return; + } + + this.dialogVisible=true; + + this.attributeData=data.result; + + this.listLoader={ id: res.id, pageIndex: 1, pageSize: 10, - } + }; this.getDataLoaderSelectDbData(); }, - async getDataLoaderSelectDbData() { - const data1 = await meta_selectByPageForUpload(this.listLoader); - if (data1.code != 200) { - this.$message.error('瀛楁鍒楄〃璋冪敤澶辫触'); - return + async getDataLoaderSelectDbData () { + const data1=await meta_selectByPageForUpload(this.listLoader); + if(data1.code!=200) { + this.$message.error("瀛楁鍒楄〃璋冪敤澶辫触"); + return; } - var option = data1.result; - for (var i in option) { - option[i].dirid = option[i].dirName; - option[i].depid = option[i].depName; - option[i].createuser = option[i].createName; - option[i].updateuser = option[i].updateName; - option[i].verid = option[i].verName; - if (option[i].createtime != null) { - option[i].createtime = this.setInfoBoxTime(option[i].createtime) + var option=data1.result; + for(var i in option) { + option[i].dirid=option[i].dirName; + option[i].depid=option[i].depName; + option[i].createuser=option[i].createName; + option[i].updateuser=option[i].updateName; + option[i].verid=option[i].verName; + if(option[i].createtime!=null) { + option[i].createtime=this.setInfoBoxTime(option[i].createtime); } - if (option[i].updatetime != null) { - option[i].updatetime = this.setInfoBoxTime(option[i].updatetime) + if(option[i].updatetime!=null) { + option[i].updatetime=this.setInfoBoxTime(option[i].updatetime); } - } - this.dbTableData = data1.result; - this.count1 = data1.count; + this.dbTableData=data1.result; + this.count1=data1.count; }, - handleLoaderSizeChange(val) { - this.listLoader.pageIndex = 1; - this.listLoader.pageSize = val; + handleLoaderSizeChange (val) { + this.listLoader.pageIndex=1; + this.listLoader.pageSize=val; this.getDataLoaderSelectDbData(); }, - handleLoaderCurrentChange(val) { - this.listLoader.pageIndex = val; + handleLoaderCurrentChange (val) { + this.listLoader.pageIndex=val; this.getDataLoaderSelectDbData(); }, - async signGetPublicKey() { - const res = await sign_getPublicKey(); - if (res && res.code == 200) { - window.encrypt = new JSEncrypt(); + async signGetPublicKey () { + const res=await sign_getPublicKey(); + if(res&&res.code==200) { + window.encrypt=new JSEncrypt(); encrypt.setPublicKey(res.result); } }, //鍗曚綅鍒楄〃鑾峰彇 - async getQueryDepTree() { - const res = await selectdepTab(); - if (res.code != 200) { - this.$message.error('鍗曚綅鍒楄〃鑾峰彇澶辫触'); + async getQueryDepTree () { + const res=await selectdepTab(); + if(res.code!=200) { + this.$message.error("鍗曚綅鍒楄〃鑾峰彇澶辫触"); return; } - this.companyOption1 = this.treeData(res.result); - this.queryForm.depid = this.companyOption1[0].id - this.getQueryDirTree(); - + this.companyOption1=this.treeData(res.result); + this.queryForm.depcode=this.companyOption1[0].code; + this.queryForm.depName=this.companyOption1[0].name; + this.getQueryDirTree(); }, - async getQueryDirTree() { - const res = await selectdirTab(); - if (res.code != 200) { - this.$message.error('鍗曚綅鍒楄〃鑾峰彇澶辫触'); + + async getQueryDirTree () { + const res=await selectdirTab(); + if(res.code!=200) { + this.$message.error("鍗曚綅鍒楄〃鑾峰彇澶辫触"); return; } - this.companyOption = this.treeData(res.result); - this.queryForm.dirid = this.companyOption[0].id - this.getMetaData(); + this.companyOption=this.treeData(res.result); + this.queryForm.dirid=this.companyOption[0].id; + this.queryForm.dircode=this.companyOption[0].code; + this.queryForm.dirName=this.companyOption[0].name; + this.getQueryVerList(); }, - handleChange(value) { - this.listData.pageSize = 10; - this.listData.pageIndex = 1; - this.queryForm.dirid = value; + + async getQueryVerList () { + const data=await meta_selectVerByDirid({ dirid: this.queryForm.dirid }); + if(data.code!=200) { + this.$message.error("鐗堟湰鍒楄〃鑾峰彇澶辫触"); + return; + } + this.verOptions=data.result; + this.queryForm.verid=data.result[0].id; this.getMetaData(); }, - handleChange1(value) { - this.listData.pageSize = 10; - this.listData.pageIndex = 1; - this.queryForm.depid = value; + verHandleChange (val) { + this.queryForm.verid=val; + this.listData.pageSize=10; + this.listData.pageIndex=1; this.getMetaData(); + }, + handleChange (data,node,nodeData) { + this.listData.pageSize=10; + this.listData.pageIndex=1; + this.queryForm.dircode=data.code; + this.queryForm.dirid=data.id; + this.queryForm.dirName=data.name; + this.getQueryVerList(); + }, + handleChange1 (data,node,nodeData) { + this.listData.pageSize=10; + this.listData.pageIndex=1; + this.queryForm.depcode=data.code; + this.queryForm.depName=data.name; + + this.getMetaData(); + }, + handleChange2 (data,node,nodeData) { + this.editForm.depid=data.id; + this.editForm.depcode=data.code; + this.editForm.depName=data.name; + }, + handleChange3 (data,node,nodeData) { + this.editForm.dirid=data.id; + this.editForm.dircode=data.code; + this.editForm.dirName=data.name; }, //鏍煎紡鍖栧垪琛� - formatData(row, column) { - let data = row[column.property]; - if (data == null) { + formatData (row,column) { + let data=row[column.property]; + if(data==null) { return data; } return this.format(data); }, - setInfoBoxTime(res) { - if (res == null) { + setInfoBoxTime (res) { + if(res==null) { return res; } return this.format(res); }, - setInfoBoxSize(res) { - if (res >= 1024) { - return parseFloat(res / 1024).toFixed(3) + ' GB'; + setInfoBoxSize (res) { + if(res>=1024) { + return parseFloat(res/1024).toFixed(3)+" GB"; } else { - return res + ' MB'; + return res+" MB"; } }, //鏍煎紡鍖栨椂闂� - format(shijianchuo) { + format (shijianchuo) { //shijianchuo鏄暣鏁帮紝鍚﹀垯瑕乸arseInt杞崲 - var time = new Date(shijianchuo); - var y = time.getFullYear(); - var m = time.getMonth() + 1; - var d = time.getDate(); - var h = time.getHours(); - var mm = time.getMinutes(); - var s = time.getSeconds(); + var time=new Date(shijianchuo); + var y=time.getFullYear(); + var m=time.getMonth()+1; + var d=time.getDate(); + var h=time.getHours(); + var mm=time.getMinutes(); + var s=time.getSeconds(); return ( - y + - '-' + - this.add0(m) + - '-' + - this.add0(d) + - ' ' + - h + - ':' + - mm + - ':' + + y+ + "-"+ + this.add0(m)+ + "-"+ + this.add0(d)+ + " "+ + h+ + ":"+ + mm+ + ":"+ s ); }, //鏍煎紡鍖栨椂闂� - add0(m) { - return m < 10 ? '0' + m : m; + add0 (m) { + return m<10? "0"+m:m; }, //鍗曚綅杞崲 - stateFormatSizes(row, column) { - if (row.sizes >= 1024) { - const val = parseFloat(row.sizes / 1024).toFixed(3); - return val + ' GB'; + stateFormatSizes (row,column) { + if(row.sizes>=1024) { + const val=parseFloat(row.sizes/1024).toFixed(3); + return val+" GB"; } else { - return row.sizes + ' MB'; + return row.sizes+" MB"; } }, //鐩綍鏍戣幏鍙� - async getSelectDictTab() { - const res = await selectdirTab(); - if (res.code != 200) { - this.$message.error('鍒楄〃璋冪敤澶辫触'); + async getSelectDictTab () { + const res=await selectdirTab(); + if(res.code!=200) { + this.$message.error("鍒楄〃璋冪敤澶辫触"); } - this.optionCount = this.treeData(res.result); - this.dirComPanyOption = this.treeData(res.result); - this.listData.dirid = this.optionCount[0].id; - + this.optionCount=this.treeData(res.result); + this.dirComPanyOption=this.treeData(res.result); + this.listData.depcode=this.optionCount[0].code; }, - handleNodeClick(data) { - this.listData.pageSize = 10; - this.listData.pageIndex = 1; - this.listData.dirid = data.id; + handleNodeClick (data) { + this.listData.pageSize=10; + this.listData.pageIndex=1; + this.listData.dirid=data.id; this.getMetaData(); }, - getTableDesc(res) { - this.activeName = res.tab; + getTableDesc (res) { + this.activeName=res.tab; }, //鏄剧ず鏉冮檺鎸夐挳 - showPermsBtn() { - let currentPerms = this.$store.state.currentPerms; - let permsEntity = this.$store.state.permsEntity; + showPermsBtn () { + let currentPerms=this.$store.state.currentPerms; + let permsEntity=this.$store.state.permsEntity; permsEntity - .filter((item) => item.perms == currentPerms) - .map((item) => (this.btnStatus[item.tag.substr(1)] = true)); + .filter((item) => item.perms==currentPerms) + .map((item) => (this.btnStatus[item.tag.substr(1)]=true)); }, // ShowWindowFly(res) { // console.log(res); @@ -856,244 +1369,401 @@ // ); // }, // 璇锋眰鏁版嵁鍐呭 - getMetaData() { - this.listData.depid = this.queryForm.depid; - this.listData.dirid = this.queryForm.dirid; + getMetaData () { + this.listData.depcode=this.queryForm.depcode; + this.listData.dircode=this.queryForm.dircode; + + this.listData.verid=this.queryForm.verid; // this.listData.dirid = 57 - + select_meta_ByPageAndCount(this.listData).then((res) => { - - this.tableData = res.result; - this.count = res.count; + this.tableData=res.result; + this.count=res.count; }); }, // 鏌ヨ - queryInfo() { - this.listData.name = this.queryForm.name.trim(); - this.listData.pageSize = 10; - this.listData.pageIndex = 1; + queryInfo () { + this.listData.name=this.queryForm.name.trim(); + this.listData.pageSize=10; + this.listData.pageIndex=1; this.getMetaData(); }, // 閲嶇疆鏌ヨ - resetInfo(formName) { + resetInfo (formName) { this.$refs[formName].resetFields(); - this.listData.pageSize = 10; - this.listData.pageIndex = 1; - this.listData.name = null; - this.queryForm.dirid = this.companyOption[0].id; - this.queryForm.depid = this.companyOption1[0].id + this.listData.pageSize=10; + this.listData.pageIndex=1; + this.listData.name=null; + this.queryForm.dirid=this.companyOption[0].id; + this.queryForm.depid=this.companyOption1[0].id; + this.queryForm.dircode=this.companyOption[0].code; + this.queryForm.depcode=this.companyOption1[0].code; + this.queryForm.dirName=this.companyOption[0].name; + this.queryForm.depName=this.companyOption1[0].name; + this.getQueryVerList(); this.getMetaData(); }, //鏂板鎸夐挳 - showAddDialog() { - this.behavior = '鏂板鐢ㄦ埛'; - this.editForm = {}; - this.dialogFormVisible = true; + showAddDialog () { + this.behavior="鏂板鐢ㄦ埛"; + this.editForm={}; + this.dialogFormVisible=true; }, - cancelAdd(formName) { - this.editForm = {}; + cancelAdd (formName) { + this.editForm={}; this.$refs[formName].resetFields(); }, - sendAdd(formName) { + sendAdd (formName) { this.$refs[formName].validate((valid) => { - if (valid) { - console.log(this.editForm); - this.fullscreenLoading = true; + if(valid) { + this.fullscreenLoading=true; insertMeta(this.editForm) .then((res) => { setTimeout(() => { - this.fullscreenLoading = false; - if (res.code == 200) { - this.listData.pageSize = 10; - this.listData.pageIndex = 1; + this.fullscreenLoading=false; + if(res.code==200) { + this.listData.pageSize=10; + this.listData.pageIndex=1; this.getMetaData(); this.$message({ - message: '娣诲姞鎴愬姛', - type: 'success', + message: "娣诲姞鎴愬姛", + type: "success", }); - this.editForm = {}; - this.dialogFormVisible = false; + this.editForm={}; + this.dialogFormVisible=false; } - }, 500); + },500); }) .catch((res) => { - alert('淇敼澶辫触锛岃閲嶈瘯锛�'); - this.fullscreenLoading = false; + alert("淇敼澶辫触锛岃閲嶈瘯锛�"); + this.fullscreenLoading=false; }); } else { - console.log('error submit!!'); + console.log("error submit!!"); return false; } }); }, // 鑾峰彇澶氶�夐�変腑鐨勫璞� - handleSelectionChange(val) { - this.multipleSelection = val; + handleSelectionChange (val) { + this.multipleSelection=val; }, // 鍒犻櫎澶氭潯 - deleteMetaInfo() { - this.$confirm('纭畾鏄惁鍒犻櫎鎵�閫夊唴瀹�?', '鎻愮ず', { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning', + deleteMetaInfo () { + if(this.multipleSelection.length<=0) { + return this.$message("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁"); + } + this.$confirm("纭畾鏄惁鍒犻櫎鎵�閫夊唴瀹�?","鎻愮ず",{ + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", }) .then(() => { - var std = []; - for (var i in this.multipleSelection) { + var std=[]; + for(var i in this.multipleSelection) { std.push(this.multipleSelection[i].id); } + this.loadDialogVisible=true; deleteMeta({ ids: std.toString() }).then((res) => { - if (res.code == 200) { + if(res.code==200) { + this.loadDialogVisible=false; this.$message({ - type: 'success', - message: '鍒犻櫎鎴愬姛!', + type: "success", + message: "鍒犻櫎鎴愬姛!", }); - this.multipleSelection = []; - this.listData.pageSize = 10; - this.listData.pageIndex = 1; + this.multipleSelection=[]; + // this.listData.pageSize = 10 + this.listData.pageIndex=1; + this.getMetaData(); } else { - this.$message.error('鍒犻櫎澶辫触'); - this.multipleSelection = []; + this.loadDialogVisible=false; + this.$message.error("鍒犻櫎澶辫触"); + + this.multipleSelection=[]; } }); }) .catch(() => { - this.$message('宸插彇娑堝垹闄�'); + this.$message("宸插彇娑堝垹闄�"); }); }, // 鏌ョ湅鐣岄潰 - showDetail(row) { + showDetail (row) { // console.log(index, row); - this.showinfoBox = true; - this.itemdetail = row; + this.showinfoBox=true; + + this.itemdetail=row; + }, // 鍏抽棴鏌ョ湅 - closeDetial() { - this.showinfoBox = false; - this.itemdetail = {}; + closeDetial () { + this.showinfoBox=false; + this.itemdetail={}; }, // 淇敼鐣岄潰 - editInfo(row) { + editInfo (row) { // console.log(row); delete row.createTime; delete row.createUser; delete row.updateUser; delete row.updateUser; - this.initialForm = JSON.stringify(row); //澶囦唤 - this.behavior = '淇敼淇℃伅'; - this.editForm = JSON.parse(JSON.stringify(row)); - this.dialogFormVisible = true; + this.initialForm=JSON.stringify(row); //澶囦唤 + this.behavior="淇敼淇℃伅"; + this.editForm=JSON.parse(JSON.stringify(row)); + this.dialogFormVisible=true; + this.getSelectDictTab(); }, - handleClose(done) { - this.$confirm('纭鍏抽棴锛�') + handleClose (done) { + this.$confirm("纭鍏抽棴锛�") .then((_) => { - this.editForm = {}; + this.editForm={}; done(); }) .catch((_) => { }); }, // 鎻愪氦淇敼 - sendEdit() { - this.$confirm('鏄惁纭畾缂栬緫?', '鎻愮ず', { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning', + sendEdit () { + this.$confirm("鏄惁纭畾缂栬緫?","鎻愮ず",{ + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", }) .then(() => { - this.dialogFormVisible = false; + this.dialogFormVisible=false; updateMeta(this.editForm).then((res) => { setTimeout(() => { - this.fullscreenLoading = false; - if (res.code == 200) { - this.listData.pageSize = 10; - this.listData.pageIndex = 1; - this.getMetaData(); + this.fullscreenLoading=false; + if(res.code==200) { + this.listData.pageSize=10; + this.listData.pageIndex=1; + + if(this.gdbDialog) { + this.getSelectGdbByGuid(); + } else { + this.getMetaData(); + } + + this.$message({ - message: '淇敼鎴愬姛', - type: 'success', + message: "淇敼鎴愬姛", + type: "success", }); - this.editForm = {}; - this.dialogFormVisible = false; + this.editForm={}; + this.dialogFormVisible=false; } - }, 500); + },500); }); }) .catch(() => { - alert('淇敼澶辫触锛岃閲嶈瘯锛�'); - this.fullscreenLoading = false; + alert("淇敼澶辫触锛岃閲嶈瘯锛�"); + this.fullscreenLoading=false; }); + }, - cancelEdit() { + cancelEdit () { this.$nextTick(() => { - this.editForm = JSON.parse(this.initialForm); + this.editForm=JSON.parse(this.initialForm); }); }, - async download() { - var std = []; - for (var i in this.multipleSelection) { - std.push(this.multipleSelection[i].id) + async download () { + var ids=[]; + for(var i in this.multipleSelection) { + ids.push(this.multipleSelection[i].id); } - var obj = { - pwd: encrypt.encrypt(this.codeForm.repassword), - ids: std + var obj={ + ids: ids, }; - const res = await meta_downloadReq(JSON.stringify(obj)) - - if (res.code != 200) { - this.$message.error('涓嬭浇璇锋眰澶辫触'); - return - } - - var downObj = { - guid: res.result, - pwd: encodeURIComponent(encrypt.encrypt(this.codeForm.repassword)) - } - const data = await meta_selectDownloadFile(downObj) - - if (data.code != 200) { - this.$message.error('涓嬭浇璇锋眰澶辫触'); - return - } - var token = getToken() - var url = BASE_URL + "/meta/downloadFile?token=" + token + "&guid=" + res.result + "&pwd=" + encodeURIComponent(encrypt.encrypt(this.codeForm.repassword)); - - $("#downFrame").attr("src", url).click(); - this.closeDown(); - }, - closeDown() { - this.showCodeBox = false; - this.codeForm.password = ''; - this.codeForm.repassword = ''; - }, - downFormData() { - if (this.multipleSelection.length == 0) { - alert('璇峰厛閫夋嫨瑕佷笅杞界殑鏂囦欢'); + const data=await meta_selectMetaOverflowDep(obj); + if(data.code!=200) { return; } - this.showCodeBox = true; + var password=this.codeForm.repassword; + if(data.result.length==0) { + var obj={ + pwd: encrypt.encrypt(this.codeForm.repassword), + ids: ids, + }; + const res=await meta_downloadReq(JSON.stringify(obj)); + if(res.code!=200) { + this.$message.error("涓嬭浇璇锋眰澶辫触"); + return; + } + + var downObj={ + guid: res.result, + pwd: encodeURIComponent(encrypt.encrypt(this.codeForm.repassword)), + }; + const data1=await meta_selectDownloadFile(downObj); + if(data1.code!=200) { + this.$message.error("涓嬭浇璇锋眰澶辫触"); + return; + } + var token=getToken(); + var url= + BASE_URL+ + "/meta/downloadFile?token="+ + token+ + "&guid="+ + res.result+ + "&pwd="+ + encodeURIComponent(encrypt.encrypt(this.codeForm.repassword)); + + $("#downFrame").attr("src",url).click(); + } else { + var val=""; + var std=[]; + for(var i in data.result) { + if(val=="") { + val+="codes="+data.result[i]; + } else { + val+="&codes="+data.result[i]; + } + std.push({ + name: data.result[i], + }); + } + const data1=await meta_selectDepsByCodes(val); + if(data1.code!=200) { + return; + } + + this.fileFrom.depid=data1.result; + this.fileFrom.ids=ids; + this.fileFrom.pwd=encr(password); + this.fileFrom.depcodes=data.result; + this.dialogInsertFile=true; + } + + this.closeDown(); }, - handleSizeChange(val) { - this.listData.pageSize = val; - this.listData.pageIndex = 1; + async getFileInsertApply () { + this.dialogInsertFile=false; + + var obj={ + ids: this.fileFrom.ids, + pwd: this.fileFrom.pwd, + tabs: ["鍏冩暟鎹〃"], + entities: ["sysmeta"], + descr: this.fileFrom.descr, + depcodes: this.fileFrom.depcodes, + }; + + const data=await apply_insertApply(JSON.stringify(obj)); + this.handleInsertFileClose(); + if(data.code!=200) { + this.$message.error("鏁版嵁鐢宠澶辫触"); + return; + } + this.$message({ + message: "鏁版嵁鐢宠鎴愬姛", + type: "success", + }); + }, + handleInsertFileClose () { + this.dialogInsertFile=false; + this.fileFrom={ + descr: null, + depid: null, + ids: null, + pwd: null, + depcodes: null, + }; + }, + + closeDown () { + this.showCodeBox=false; + this.codeForm.password=""; + this.codeForm.repassword=""; + }, + downFormData () { + if(this.multipleSelection.length==0) { + alert("璇峰厛閫夋嫨瑕佷笅杞界殑鏂囦欢"); + return; + } + this.showCodeBox=true; + }, + + handleSizeChange (val) { + this.listData.pageSize=val; + this.listData.pageIndex=1; this.getMetaData(); }, - handleCurrentChange(val) { - this.listData.pageIndex = val; + handleCurrentChange (val) { + this.listData.pageIndex=val; this.getMetaData(); }, //鏍戝垪琛ㄧ敓鎴� - treeData(source) { - let cloneData = JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕 + treeData (source) { + let cloneData=JSON.parse(JSON.stringify(source)); // 瀵规簮鏁版嵁娣卞害鍏嬮殕 return cloneData.filter((father) => { // 寰幆鎵�鏈夐」 - let branchArr = cloneData.filter((child) => father.id == child.pid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁 - branchArr.length > 0 ? (father.children = branchArr) : ''; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊� - return father.pid == 0; // 杩斿洖涓�绾ц彍鍗� + let branchArr=cloneData.filter((child) => father.id==child.pid); // 瀵规瘮ID锛屽垎鍒笂涓嬬骇鑿滃崟锛屽苟杩斿洖鏁版嵁 + branchArr.length>0? (father.children=branchArr):""; // 缁欑埗绾ф坊鍔犱竴涓猚hildren灞炴�э紝骞惰祴鍊� + return father.pid==0; // 杩斿洖涓�绾ц彍鍗� }); + }, + showPreview (row) { + let name=row.name; + if(!name) return false; + return ( + name.indexOf("pdf")!=-1|| + name.indexOf("jpg")!=-1|| + name.indexOf("gif")!=-1|| + name.indexOf("png")!=-1|| + name.indexOf("jpeg")!=-1 + ); + }, + showCAD (row) { + let name=row.name; + if(!name) return false; + return ( + name.indexOf("dwg")!=-1 + + ); + }, + async handleCAD (row) { + const data=await meta_selectConvertToDwg(row.id) + if(data.result) { + var url=iisHost+"/dwg/cad/browse/?file=data/"+data.result; + window.open(url) + } else { + return this.$message("鏁版嵁杞崲澶辫触锛屾棤娉曢瑙�"); + } + + }, + handlePreview (row) { + let name=row.name; + this.refreshAttatchDetail(); + + if(name.indexOf(".pdf")!=-1) { + this.dialog.isPdf=true; + } else if( + name.indexOf(".jpg")!=-1|| + name.indexOf(".gif")!=-1|| + name.indexOf(".png")!=-1|| + name.indexOf(".jpeg")!=-1 + ) { + this.dialog.isJpg=true; + } + this.dialog.dialogVisible=true; + + var url= + BASE_URL+ + "/inquiry/downloadForView?guid="+ + row.guid+ + "&token="+ + getToken(); + this.dialog.src=url; + }, + refreshAttatchDetail () { + this.dialog.src=""; + this.dialog.dialogVisible=false; + this.dialog.isPdf=false; + this.dialog.isJpg=false; }, }, }; @@ -1103,87 +1773,17 @@ .authorityManagement_box { height: 98%; width: 98%; - padding: 1%; + padding: 0.5%; .inquire { - position: relative; - overflow: auto; - padding-bottom: 8px; - border: 1px solid white; + padding: 8px; + //margin-top: 20px; + border-radius: 5px; - padding: 1%; + + //margin-bottom: 20px; .el-form-item { margin: 5px; - } - } - .bottom { - width: 100%; - margin-top: 1%; - height: 74%; - display: flex; - justify-content: space-between; - .leftTree { - width: 15%; - height: 100%; - border: 1px solid white; - border-radius: 5px; - padding: 1%; - max-height: 670px; - overflow-y: auto; - li { - color: white; - border-bottom: 1px solid white; - line-height: 30px; - text-align: center; - } - li:hover { - background: rgba(255, 255, 255, 0.3); - } - .active { - color: #409eff; - } - } - .rightTable { - width: 98%; - height: 92%; - border: 1px solid white; - - border-radius: 5px; - padding: 1%; - .table_box { - width: 100%; - height: 93%; - margin: 0 auto; - overflow: auto; - } - } - } - .infoBox { - width: 500px; - position: absolute; - z-index: 100; - top: 10%; - right: 25%; - background: #303030; - color: #fff; - .el-card { - background-color: transparent; - color: #fff; - span { - color: #fff; - font-size: 16px; - font-weight: 600; - } - } - .contentBox { - margin: 0 aotu 10px; - height: 500px; - overflow: auto; - p { - // background-color: #bfa; - // margin-bottom: 10px; - font-size: 14px; - } } } @@ -1194,146 +1794,43 @@ display: block; margin-left: 10px; //杩欎釜鐢ㄤ簬鍦嗙偣灞呬腑 } + .downloadBox { position: absolute; top: 20%; left: 40%; padding: 20px; - background: #303030; + width: 30%; - border: 1px solid gray; + border-radius: 10px; - color: white; } - /*淇敼table 琛ㄤ綋鐨勮儗鏅鑹插拰鏂囧瓧棰滆壊*/ - /deep/ .el-table { - background-color: transparent; - - th, - td { - background-color: transparent; - } - .el-table__expanded-cell { - background-color: transparent !important; - } - - // 琛ㄥご鑳屾櫙鑹� - th.el-table__cell { - background-color: #303030; - color: #fff; - } - tr > td { - background-color: #303030; - color: #fff; - } - - // hover鏁堟灉 - tr:hover > td { - background-color: rgba(255, 255, 255, 0.3) !important; - } - - tbody tr:hover { - background-color: rgba(255, 255, 255, 0.3) !important; - // text-align: center; - } - - // 婊氬姩鏉″楂� - .el-table__body-wrapper::-webkit-scrollbar { - width: 5px; - height: 5px; - } - - .el-table__body-wrapper::-webkit-scrollbar { - width: 5px; - /*婊氬姩鏉″搴�*/ - height: 5px; - /*婊氬姩鏉¢珮搴�*/ - } - /*瀹氫箟婊氬姩鏉¤建閬� 鍐呴槾褰�+鍦嗚*/ - .el-table__body-wrapper::-webkit-scrollbar-track { - box-shadow: 0px 1px 3px #216fe6 inset; - /*婊氬姩鏉$殑鑳屾櫙鍖哄煙鐨勫唴闃村奖*/ - border-radius: 10px; - } - - /*瀹氫箟婊戝潡 鍐呴槾褰�+鍦嗚*/ - .el-table__body-wrapper::-webkit-scrollbar-thumb { - box-shadow: 0px 1px 3px #216fe6 inset; - border-radius: 6px; - background-color: #216fe6; + .preview-dialog { + .pdfClass { + height: 70vh; + width: 100%; + position: relative; } } - /deep/.el-form-item__label { - color: white; + .el-divider--horizontal { + margin: 15px 0; } - // 璁剧疆杈撳叆妗嗙殑鑳屾櫙鑹层�佸瓧浣撻鑹层�佽竟妗嗗睘鎬ц缃紱 - /deep/.el-input__inner { - background-color: transparent !important ; - color: #fff; - border: 1px solid; + .gdbTableBox { + width: 100%; + height: 740px; + overflow-y: auto; } - /deep/ .el-dialog { - background: #303030; - } - /deep/.el-range-editor.is-active, - .el-range-editor.is-active:hover, - .el-select .el-input.is-focus .el-input__inner { - border: 1px solid; - } - /deep/.el-dialog__title { - color: white; - } - /deep/ .el-select .el-input__inner { - border-color: #fff !important; - } - .pagination_box { - margin-top: 20px; - /deep/.el-input__inner { - background-color: transparent !important; - border: 1px solid; - color: white; - } - /deep/.el-pagination__total { - color: white; - } - /deep/.el-pagination__jump { - color: white; - } - /deep/.el-pager li.active { - color: #409eff; - } - /deep/.el-pager li { - color: white; - background: transparent; - } - /deep/.el-pager li { - color: white; - } - /deep/.btn-prev { - background: transparent; - } - /deep/.btn-next { - background: transparent; - } - /deep/.btn-next i { - color: white; - } - /deep/.btn-prev i { - color: white; + .loadBox { + position: fixed; + z-index: 2002; + background: rgba(0, 0, 0, 0.2); + width: 100%; + height: 100%; + top: 0; + left: 0; + .el-loading-mask { + background: transparent !important; } } - .primary { - background: #409eff; - border: #409eff; - color: white; - } -} -/deep/ .el-select .el-input__inner { - border-color: #fff !important; -} -/deep/.el-input__inner { - background-color: transparent !important ; - color: #fff; - border: 1px solid white !important; } </style> -- Gitblit v1.9.3