edit.vue 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
  1. <template>
  2. <basic-container>
  3. <div class="flex">
  4. <div class="flex1 mg-r-20">
  5. <p>工程节点信息</p>
  6. <div class="flex">
  7. <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input>
  8. <el-button type="info" class="mg-l-20">导入划分</el-button>
  9. </div>
  10. <el-tree
  11. class="filter-tree" lazy
  12. :load="loadNode" @node-click="getNodeDetail"
  13. :props="defaultProps" :expand-on-click-node="false"
  14. highlight-current node-key="id"
  15. :filter-node-method="filterNode"
  16. ref="tree">
  17. <span class="custom-tree-node" slot-scope="{ node, data }">
  18. <span>
  19. {{ node.label }}
  20. <el-dropdown @click="command=>{setLeftType(command,data)}">
  21. <el-button
  22. type="text" icon="el-icon-more" class="normal-black">
  23. </el-button>
  24. <el-dropdown-menu slot="dropdown">
  25. <el-dropdown-item @click.native="setLeftType(1,data,node)" icon="el-icon-circle-plus-outline">新增子级</el-dropdown-item>
  26. <el-dropdown-item @click.native="setLeftType(2,data,node)" icon="el-icon-edit">编辑节点</el-dropdown-item>
  27. <el-dropdown-item @click.native="setLeftType(3,data,node)" icon="el-icon-document-copy">复制节点</el-dropdown-item>
  28. <el-dropdown-item @click.native="setLeftType(4,data,node)" icon="iconfont hcicon-danganziliao-biaogetianxie" class="font-s-12">元素公式</el-dropdown-item>
  29. <el-dropdown-item @click.native="setLeftType(5,data,node)" icon="el-icon-coin">元素设置</el-dropdown-item>
  30. </el-dropdown-menu>
  31. </el-dropdown>
  32. </span>
  33. </span>
  34. </el-tree>
  35. </div>
  36. <div class="flex1">
  37. <template v-if="leftType==2 || leftType==1">
  38. <p>节点信息</p>
  39. <el-table :data="tableData" border style="width: 100%">
  40. <el-table-column align="center" prop="deptName" label="当前节点" ></el-table-column>
  41. <el-table-column align="center" prop="deptCategory" :formatter="formatCat" label="节点类型" width="180"></el-table-column>
  42. <el-table-column align="center" prop="parentName" label="上级节点"></el-table-column>
  43. </el-table>
  44. <p>
  45. <span>当前已创建的元素表</span>
  46. <el-button @click="showFormElement" type="text" icon="el-icon-circle-plus-outline" class="text-icon mg-l-10"></el-button>
  47. <el-button type="text" icon="el-icon-document-copy" class="text-icon"></el-button>
  48. </p>
  49. <el-table :data="formData" border style="width: 100%">
  50. <el-table-column align="center" prop="tableName" label="表单名称" ></el-table-column>
  51. <el-table-column align="center" prop="elementTotal" label="元素总量"></el-table-column>
  52. <el-table-column align="center" prop="tableType" :formatter="formatTableType" label="表单类型"></el-table-column>
  53. <el-table-column align="center" prop="tableOwner" :formatter="formatOwner" label="所属方"></el-table-column>
  54. <el-table-column label="操作">
  55. <template slot-scope="scope">
  56. <el-button
  57. size="mini"
  58. @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
  59. <el-button
  60. size="mini"
  61. type="danger"
  62. @click="handleDelete(scope.$index, scope.row)">删除</el-button>
  63. </template>
  64. </el-table-column>
  65. </el-table>
  66. </template>
  67. <template v-if="leftType==4">
  68. <el-table :data="formData" border style="width: 100%">
  69. <el-table-column align="center" prop="tableName" label="表单名称" ></el-table-column>
  70. <el-table-column align="center" prop="elementTotal" label="元素总量"></el-table-column>
  71. <el-table-column align="center" prop="tableType" :formatter="formatTableType" label="表单类型"></el-table-column>
  72. <el-table-column align="center" prop="tableOwner" :formatter="formatOwner" label="所属方"></el-table-column>
  73. <el-table-column label="操作">
  74. <template slot-scope="scope">
  75. <el-button
  76. size="mini"
  77. @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
  78. <el-button
  79. size="mini"
  80. type="danger"
  81. @click="handleDelete(scope.$index, scope.row)">删除</el-button>
  82. </template>
  83. </el-table-column>
  84. </el-table>
  85. </template>
  86. </div>
  87. </div>
  88. <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="50%" append-to-body>
  89. <el-form ref="nodeDetail" :model="nodeDetail" :rules="rules" label-width="110px">
  90. <el-form-item label="节点名称" prop="deptName">
  91. <el-input v-model="nodeDetail.deptName"></el-input>
  92. </el-form-item>
  93. <el-form-item label="上级节点">
  94. <el-input v-model="nodeDetail.parentName" disabled></el-input>
  95. </el-form-item>
  96. <el-form-item label="节点类型" prop="deptCategory">
  97. <el-select v-model="nodeDetail.deptCategory" placeholder="请选择" class="w-100p">
  98. <el-option v-for="item in deptCategorylist" :key="item.id" :label="item.dictValue" :value="item.dictKey"></el-option>
  99. </el-select>
  100. </el-form-item>
  101. <el-form-item label="划分编号">
  102. <el-input v-model="nodeDetail.partitionCode"></el-input>
  103. </el-form-item>
  104. <el-form-item label="唯一编码">
  105. <el-input v-model="nodeDetail.uniqueCode"></el-input>
  106. </el-form-item>
  107. <template v-if="nodeDetail.deptCategory == 6">
  108. <el-form-item label="是否有混凝土">
  109. <el-radio-group v-model="nodeDetail.isConcrete" size="small">
  110. <el-radio :label="0" border>无</el-radio>
  111. <el-radio :label="1" border>有</el-radio>
  112. </el-radio-group>
  113. </el-form-item>
  114. <el-form-item label="是否试验节点">
  115. <el-radio-group v-model="nodeDetail.isExpernode" size="small">
  116. <el-radio :label="0" border>否</el-radio>
  117. <el-radio :label="1" border>是</el-radio>
  118. </el-radio-group>
  119. </el-form-item>
  120. </template>
  121. <el-form-item label="内业资料类型">
  122. <el-select v-model="nodeDetail.majorDataType" placeholder="请选择" class="w-100p">
  123. <el-option v-for="item in majorDataTypeList" :key="item.id" :label="item.dictValue" :value="item.dictKey"></el-option>
  124. </el-select>
  125. </el-form-item>
  126. </el-form>
  127. <span slot="footer" class="dialog-footer">
  128. <el-button @click="dialogVisible = false">取 消</el-button>
  129. <el-button type="primary" @click="saveNode">确 定</el-button>
  130. </span>
  131. </el-dialog>
  132. <el-dialog title="创建新的元素表" :visible.sync="eleVisible" width="80%" append-to-body>
  133. <el-form ref="eleDialog" :model="eleForm" :rules="eleRules" label-width="110px">
  134. <el-form-item label="表名" prop="deptName">
  135. <el-input v-model="eleForm.deptName"></el-input>
  136. </el-form-item>
  137. <el-row>
  138. <el-col :span="12">
  139. <el-form-item label="表类型" prop="tableType">
  140. <el-select v-model="eleForm.tableType" placeholder="请选择" class="w-100p">
  141. <el-option v-for="item in tableTypelist" :key="item.id" :label="item.dictValue" :value="item.dictKey"></el-option>
  142. </el-select>
  143. </el-form-item>
  144. </el-col>
  145. <el-col :span="12">
  146. <el-form-item label="所属方" prop="tableOwner">
  147. <el-select v-model="eleForm.tableOwner" placeholder="请选择" class="w-100p">
  148. <el-option v-for="item in ownerTypeList" :key="item.id" :label="item.dictValue" :value="item.dictKey"></el-option>
  149. </el-select>
  150. </el-form-item>
  151. </el-col>
  152. </el-row>
  153. </el-form>
  154. <div class="flex jc-sb">
  155. <div></div>
  156. <div>
  157. <el-link type="primary" @click="importVisible = true">快捷导入</el-link>
  158. <el-link type="primary" class="mg-l-20">下载导入模版</el-link>
  159. </div>
  160. </div>
  161. <div class="border-grey">
  162. <p class="font-c-warning">编辑元素信息(请谨慎操作)</p>
  163. <el-table :data="eleForm.elementList" border style="width: 100%" height="400px">
  164. <el-table-column align="center" type="index" width="50"></el-table-column>
  165. <el-table-column align="center" prop="eName" label="元素名称" >
  166. <template slot-scope="scope">
  167. <el-input v-model="scope.row.eName" size="small" placeholder="请输入内容"></el-input>
  168. </template>
  169. </el-table-column>
  170. <el-table-column align="center" prop="eType" label="数据类型" width="120">
  171. <template slot-scope="scope">
  172. <el-select v-model="scope.row.eType" size="small" placeholder="请选择">
  173. <el-option v-for="item in dataTypeList" :key="item.id" :label="item.dictValue" :value="item.dictKey"></el-option>
  174. </el-select>
  175. </template>
  176. </el-table-column>
  177. <el-table-column align="center" prop="eLength" label="长度" width="120">
  178. <template slot-scope="scope">
  179. <el-input v-model="scope.row.eLength" size="small" placeholder="请输入内容"></el-input>
  180. </template>
  181. </el-table-column>
  182. <el-table-column align="center" prop="eAllowDeviation" label="允许偏差值">
  183. <template slot-scope="scope">
  184. <div class="flex">
  185. <el-select v-model="scope.row.allow" size="small" placeholder="请选择" style="width:120px">
  186. <el-option :key="1" label="≥" value="≥"></el-option>
  187. <el-option :key="2" label="≤" value="≤"></el-option>
  188. <el-option :key="3" label="±" value="±"></el-option>
  189. <el-option :key="4" label="【】" value="【】"></el-option>
  190. </el-select>
  191. <el-input v-model="scope.row.deviation" size="small" placeholder="请输入内容"></el-input>
  192. </div>
  193. </template>
  194. </el-table-column>
  195. <el-table-column align="center" prop="eInspectionMethod" label="检查方法和频率">
  196. <template slot-scope="scope">
  197. <el-input v-model="scope.row.eInspectionMethod" size="small" placeholder="请输入内容"></el-input>
  198. </template>
  199. </el-table-column>
  200. <el-table-column align="center" label="操作" width="80">
  201. <template slot="header">
  202. <el-button @click="addEleRow(eleForm.elementList)" type="text" icon="el-icon-circle-plus-outline" class="text-icon"></el-button>
  203. </template>
  204. <template slot-scope="scope">
  205. <el-button icon="el-icon-remove-outline" type="text" @click="delEleRow(scope.$index,eleForm.elementList)" class="text-icon text-icon-danger"></el-button>
  206. </template>
  207. </el-table-column>
  208. </el-table>
  209. </div>
  210. <span slot="footer" class="dialog-footer">
  211. <el-button @click="eleVisible = false">取 消</el-button>
  212. <el-button type="primary" @click="saveFormAndElementHandle">保 存</el-button>
  213. </span>
  214. </el-dialog>
  215. <el-dialog title="模版导入" :visible.sync="importVisible" width="50%" append-to-body>
  216. <p>提示:必须按照系统要求的模版格式上传,否则系统识别无效 <el-link type="primary">下载导入模版</el-link></p>
  217. <div>
  218. <el-button size="small" type="primary">本地上传</el-button>
  219. </div>
  220. <el-table :data="tempList" border style="width: 100%" >
  221. <el-table-column align="center" prop="eName" label="元素名称" >
  222. </el-table-column>
  223. <el-table-column align="center" prop="eType" label="数据类型" width="120">
  224. </el-table-column>
  225. <el-table-column align="center" prop="eLength" label="长度" width="120">
  226. </el-table-column>
  227. <el-table-column align="center" prop="eAllowDeviation" label="允许偏差值">
  228. </el-table-column>
  229. <el-table-column align="center" prop="eInspectionMethod" label="检查方法和频率">
  230. </el-table-column>
  231. </el-table>
  232. <span slot="footer" class="dialog-footer">
  233. <el-button @click="importVisible = false">取 消</el-button>
  234. <el-button type="primary" @click="importHandle">确 定</el-button>
  235. </span>
  236. </el-dialog>
  237. <el-dialog :title="(curEleTable.tableName?curEleTable.tableName:'')+' 元素编辑'" :visible.sync="editEleVisible" width="80%" append-to-body>
  238. <p class="font-c-warning">编辑元素信息(请谨慎操作)</p>
  239. <el-table :data="editEleList" border style="width: 100%" height="400px">
  240. <el-table-column align="center" type="index" width="50"></el-table-column>
  241. <el-table-column align="center" prop="eName" label="元素名称" >
  242. <template slot-scope="scope">
  243. <el-input v-model="scope.row.eName" size="small" placeholder="请输入内容"></el-input>
  244. </template>
  245. </el-table-column>
  246. <el-table-column align="center" prop="eType" label="数据类型" width="120">
  247. <template slot-scope="scope">
  248. <el-select v-model="scope.row.eType" size="small" placeholder="请选择">
  249. <el-option v-for="item in dataTypeList" :key="item.id" :label="item.dictValue" :value="item.dictKey"></el-option>
  250. </el-select>
  251. </template>
  252. </el-table-column>
  253. <el-table-column align="center" prop="eLength" label="长度" width="120">
  254. <template slot-scope="scope">
  255. <el-input v-model="scope.row.eLength" size="small" placeholder="请输入内容"></el-input>
  256. </template>
  257. </el-table-column>
  258. <el-table-column align="center" prop="eAllowDeviation" label="允许偏差值">
  259. <template slot-scope="scope">
  260. <div class="flex">
  261. <el-select v-model="scope.row.allow" size="small" placeholder="请选择" style="width:120px">
  262. <el-option :key="1" label="≥" value="≥"></el-option>
  263. <el-option :key="2" label="≤" value="≤"></el-option>
  264. <el-option :key="3" label="±" value="±"></el-option>
  265. <el-option :key="4" label="【】" value="【】"></el-option>
  266. </el-select>
  267. <el-input v-model="scope.row.deviation" size="small" placeholder="请输入内容"></el-input>
  268. </div>
  269. </template>
  270. </el-table-column>
  271. <el-table-column align="center" prop="eInspectionMethod" label="检查方法和频率">
  272. <template slot-scope="scope">
  273. <el-input v-model="scope.row.eInspectionMethod" size="small" placeholder="请输入内容"></el-input>
  274. </template>
  275. </el-table-column>
  276. <el-table-column align="center" label="操作" width="120">
  277. <template slot="header">
  278. <el-button @click="addEleRow(editEleList)" type="text" icon="el-icon-circle-plus-outline" class="text-icon"></el-button>
  279. </template>
  280. <template slot-scope="scope">
  281. <el-button v-if="scope.row.id" icon="el-icon-remove-outline" type="text" @click="delEleRowHandle(scope.$index,editEleList)" class="text-icon text-icon-danger"></el-button>
  282. <div class="flex" v-else>
  283. <el-button @click="saveNewEle(scope.row)" type="mini">保存</el-button>
  284. <el-button icon="el-icon-remove-outline" type="text" @click="delEleRowHandle(scope.$index,editEleList)" class="text-icon text-icon-danger"></el-button>
  285. </div>
  286. </template>
  287. </el-table-column>
  288. </el-table>
  289. <span slot="footer" class="dialog-footer">
  290. <el-button @click="editEleVisible = false">取 消</el-button>
  291. <el-button type="primary" @click="saveEles">确 定</el-button>
  292. </span>
  293. </el-dialog>
  294. </basic-container>
  295. </template>
  296. <script>
  297. import {getLazytree,getDetail,update,selectByNodeTable,
  298. saveFormAndElement,selectFormElements,removeTableById} from "@/api/manager/wbstree";
  299. import {saveElement,remove as removeElement,updateBatchElements} from "@/api/manager/wbsformelement"
  300. import {getDictionary} from "@/api/system/dict";
  301. import {mapGetters} from "vuex";
  302. export default {
  303. data() {
  304. return {
  305. id:'',
  306. filterText:'',
  307. treeData:[],
  308. defaultProps: {
  309. children: 'children',
  310. label: 'title',
  311. isLeaf: function(data){
  312. return !data.hasChildren;
  313. }
  314. },
  315. leftType:2,
  316. curTreeData:{},
  317. tableData:[],
  318. nodeDetail:{},
  319. formData:[],
  320. dialogVisible:false,
  321. deptCategorylist:[],
  322. majorDataTypeList:[],
  323. rules:{
  324. deptName: [
  325. { required: true, message: '请输入节点名称', trigger: 'blur' },
  326. ],
  327. deptCategory:[
  328. { required: true, message: '请选择节点类型', trigger: 'change' }
  329. ]
  330. },
  331. eleVisible:false,
  332. tableTypelist:[],
  333. dataTypeList:[],
  334. ownerTypeList:[],
  335. eleForm:{
  336. elementList:[],
  337. },
  338. eleRules:{
  339. deptName: [
  340. { required: true, message: '请输入表名称', trigger: 'blur' },
  341. ],
  342. tableType:[
  343. { required: true, message: '请选择表类型', trigger: 'change' }
  344. ],
  345. tableOwner:[
  346. { required: true, message: '请选择所属方', trigger: 'change' }
  347. ],
  348. },
  349. importVisible:false,
  350. tempList:[],
  351. curEleTable:{},
  352. editEleVisible:false,
  353. editEleList:[],
  354. };
  355. },
  356. computed: {
  357. ...mapGetters(["userInfo"]),
  358. dialogTitle:function(){
  359. let text = '节点';
  360. if(this.leftType == 1){
  361. text = '新增'+text;
  362. }else if(this.leftType == 2){
  363. text = '编辑'+text;
  364. }
  365. return text;
  366. },
  367. },
  368. created() {
  369. this.init();
  370. //console.log(this.userInfo)
  371. },
  372. methods: {
  373. init(){
  374. this.id = this.$route.params.id;
  375. this.getDeptCategorylist();
  376. this.getTableTypelist();
  377. this.getDataTypelist();
  378. this.getOwnerTypelist();
  379. },
  380. loadNode(node, resolve){
  381. let pid = 0;
  382. if (node.level != 0) {
  383. pid = node.data.id
  384. }
  385. getLazytree(this.id ,pid,this.userInfo.tenant_id).then((res)=>{
  386. return resolve(res.data.data);
  387. })
  388. },
  389. getNodeDetail(data,node){
  390. //console.log(data,node,ref)
  391. let parentName = '';
  392. if(node.parent.data){
  393. parentName = node.parent.data.title;
  394. }
  395. this.curTreeData = data;
  396. this.curTreeData.parentName = parentName;
  397. getDetail(data.id).then((res)=>{
  398. res.data.data.parentName = parentName;
  399. this.tableData = [res.data.data];
  400. this.nodeDetail = Object.assign({},res.data.data);
  401. })
  402. this.updateNodeTable();
  403. },
  404. saveNode(){
  405. this.$refs['nodeDetail'].validate((valid) => {
  406. if (valid) {
  407. if(this.leftType == 1){
  408. this.addNode();
  409. }else if(this.leftType == 2){
  410. this.updateNode();
  411. }
  412. } else {
  413. console.log('error submit!!');
  414. return false;
  415. }
  416. });
  417. },
  418. addNode(){
  419. update(this.nodeDetail).then(()=>{
  420. this.updateTreeNewNode();
  421. this.dialogVisible = false;
  422. this.$message({
  423. type: "success",
  424. message: "新增成功!"
  425. });
  426. })
  427. },
  428. updateNode(){
  429. update(this.nodeDetail).then(()=>{
  430. let node = this.tableData[0];
  431. node.deptName = this.nodeDetail.deptName;
  432. node.deptCategory = this.nodeDetail.deptCategory;
  433. this.curTreeData.title = this.nodeDetail.deptName;
  434. this.dialogVisible = false;
  435. this.$message({
  436. type: "success",
  437. message: "修改成功!"
  438. });
  439. })
  440. },
  441. setLeftType(type,data,node){
  442. this.leftType = type;
  443. this.curTreeData = data;
  444. this.$refs.tree.setCurrentKey(data.id);
  445. if(this.leftType == 1 || this.leftType == 2){
  446. this.getMajorDataTypeList();
  447. this.dialogVisible = true;
  448. }
  449. getDetail(data.id).then((res)=>{
  450. let parentName = '';
  451. if(node.parent.data){
  452. parentName = node.parent.data.title;
  453. }
  454. res.data.data.parentName = parentName;
  455. this.tableData = [res.data.data];
  456. if(this.leftType == 1){
  457. this.nodeDetail = {
  458. parentId:res.data.data.id,
  459. parentName:parentName
  460. };
  461. }else{
  462. this.nodeDetail = Object.assign({},res.data.data);
  463. }
  464. this.nodeDetail.type = 1;// '1'节点 '2'表单
  465. this.nodeDetail.wbsId = this.id;
  466. this.nodeDetail.tenantId = this.userInfo.tenant_id
  467. })
  468. if(this.leftType == 4){
  469. selectByNodeTable(data.id).then((res)=>{
  470. if(res.data.data.length){
  471. this.formData = res.data.data;
  472. }else{
  473. this.formData = [];
  474. }
  475. })
  476. }
  477. },
  478. showFormElement(){
  479. if(!this.nodeDetail.id){
  480. this.$message({
  481. type: "warning",
  482. message: "请先选择在哪个节点下创建表"
  483. });
  484. return;
  485. }
  486. this.eleVisible = true;
  487. },
  488. addEleRow(list){
  489. list.push({});
  490. },
  491. delEleRow(index,list){
  492. list.splice(index,1);
  493. },
  494. saveFormAndElementHandle(){
  495. this.$refs['eleDialog'].validate((valid) => {
  496. if (valid) {
  497. this.eleForm.wbsId = this.id;
  498. this.eleForm.tenantId = this.userInfo.tenant_id;
  499. this.eleForm.deptCategory = -1;
  500. this.eleForm.type = 2;// '1'节点 '2'表单
  501. this.eleForm.parentId = this.nodeDetail.id;
  502. this.eleForm.elementList.forEach((element)=>{
  503. element.eAllowDeviation = (element.allow?element.allow:'') + (element.deviation?element.deviation:'');
  504. })
  505. saveFormAndElement(this.eleForm).then(()=>{
  506. //console.log(res)
  507. this.updateTreeNewNode();
  508. this.updateNodeTable();
  509. this.eleVisible = false;
  510. this.$message({
  511. type: "success",
  512. message: "新增成功!"
  513. });
  514. })
  515. } else {
  516. console.log('error submit!!');
  517. return false;
  518. }
  519. });
  520. },
  521. updateTreeNewNode(){
  522. getLazytree(this.id ,this.nodeDetail.parentId).then((res)=>{
  523. this.$refs.tree.updateKeyChildren(this.nodeDetail.parentId,res.data.data)
  524. })
  525. },
  526. updateNodeTable(){
  527. selectByNodeTable(this.curTreeData.id).then((res)=>{
  528. if(res.data.data.length){
  529. this.formData = res.data.data;
  530. }else{
  531. this.formData = [];
  532. }
  533. })
  534. },
  535. importHandle(){
  536. },
  537. handleEdit(index,row){
  538. this.curEleTable = row;
  539. selectFormElements(this.curEleTable.id).then((res)=>{
  540. let reg = /(≥|≤|±|【】)?([^≥≤±【】]*)/;
  541. res.data.data.forEach((element)=>{
  542. reg.exec(element.eAllowDeviation);
  543. // console.log(RegExp.$1)
  544. // console.log(RegExp.$2)
  545. element.allow = RegExp.$1?RegExp.$1:'';
  546. element.deviation = RegExp.$2?RegExp.$2:'';
  547. })
  548. this.editEleList = res.data.data;
  549. })
  550. this.editEleVisible = true;
  551. },
  552. handleDelete(index,row){
  553. this.$confirm('是否删除 '+row.tableName + ' ?', '删除元素表', {
  554. distinguishCancelAndClose: true,
  555. confirmButtonText: '删除',
  556. cancelButtonText: '取消'
  557. }).then(() => {
  558. removeTableById(row.id).then(()=>{
  559. this.formData.splice(index,1);
  560. this.updateTreeNewNode();
  561. this.$message({
  562. type: "success",
  563. message: "删除成功!"
  564. });
  565. })
  566. })
  567. },
  568. saveNewEle(row){
  569. row.eAllowDeviation = (row.allow?row.allow:'') + (row.deviation?row.deviation:'');
  570. row.fId = this.curEleTable.id;
  571. saveElement(row).then((res)=>{
  572. if(res.data.data){
  573. this.$set(row,'id',res.data.data);
  574. this.$message({
  575. type: "success",
  576. message: "保存成功!"
  577. });
  578. }
  579. })
  580. },
  581. delEleRowHandle(index,list){
  582. let row = list[index];
  583. if(row.id){
  584. //有id需要请求删除
  585. this.$confirm('是否确认删除?', '删除元素', {
  586. distinguishCancelAndClose: true,
  587. confirmButtonText: '删除',
  588. cancelButtonText: '取消'
  589. }).then(() => {
  590. removeElement(row.id).then(()=>{
  591. list.splice(index,1);
  592. })
  593. })
  594. }else{
  595. list.splice(index,1);
  596. }
  597. },
  598. saveEles(){
  599. for (let i = 0; i < this.editEleList.length; i++) {
  600. if(!this.editEleList[i].id){
  601. this.$message({
  602. type: "warning",
  603. message: "请先将新增的元素点击保存"
  604. });
  605. return;
  606. }
  607. }
  608. if(this.editEleList.length > 0){
  609. updateBatchElements(this.editEleList).then(()=>{
  610. this.editEleVisible = false;
  611. this.updateNodeTable();
  612. this.$message({
  613. type: "success",
  614. message: "保存成功!"
  615. });
  616. })
  617. }else{
  618. this.editEleVisible = false;
  619. this.updateNodeTable();
  620. this.$message({
  621. type: "success",
  622. message: "保存成功!"
  623. });
  624. }
  625. },
  626. getDeptCategorylist(){
  627. if(this.deptCategorylist.length >1){
  628. return;
  629. }
  630. getDictionary({
  631. code:'wbs_node_type'
  632. }).then((res)=>{
  633. res.data.data.forEach(element => {
  634. element.dictKey = Number(element.dictKey)
  635. });
  636. this.deptCategorylist = res.data.data;
  637. })
  638. },
  639. getMajorDataTypeList(){
  640. if(this.majorDataTypeList.length >1){
  641. return;
  642. }
  643. getDictionary({
  644. code:'major_data_type'
  645. }).then((res)=>{
  646. res.data.data.forEach(element => {
  647. element.dictKey = Number(element.dictKey)
  648. });
  649. this.majorDataTypeList = res.data.data;
  650. })
  651. },
  652. getTableTypelist(){
  653. if(this.tableTypelist.length >1){
  654. return;
  655. }
  656. getDictionary({
  657. code:'table_type'
  658. }).then((res)=>{
  659. res.data.data.forEach(element => {
  660. element.dictKey = Number(element.dictKey)
  661. });
  662. this.tableTypelist = res.data.data;
  663. })
  664. },
  665. getDataTypelist(){
  666. if(this.dataTypeList.length >1){
  667. return;
  668. }
  669. getDictionary({
  670. code:'data_type'
  671. }).then((res)=>{
  672. res.data.data.forEach(element => {
  673. element.dictKey = Number(element.dictKey)
  674. });
  675. this.dataTypeList = res.data.data;
  676. })
  677. },
  678. getOwnerTypelist(){
  679. if(this.ownerTypeList.length >1){
  680. return;
  681. }
  682. getDictionary({
  683. code:'owner_type'
  684. }).then((res)=>{
  685. res.data.data.forEach(element => {
  686. element.dictKey = Number(element.dictKey)
  687. });
  688. this.ownerTypeList = res.data.data;
  689. })
  690. },
  691. formatCat(row, column, cellValue){
  692. for (let i = 0; i < this.deptCategorylist.length; i++) {
  693. if(this.deptCategorylist[i].dictKey == cellValue){
  694. return this.deptCategorylist[i].dictValue
  695. }
  696. }
  697. return cellValue;
  698. //console.log(cellValue)
  699. },
  700. formatTableType(row, column, cellValue){
  701. for (let i = 0; i < this.tableTypelist.length; i++) {
  702. if(this.tableTypelist[i].dictKey == cellValue){
  703. return this.tableTypelist[i].dictValue
  704. }
  705. }
  706. return cellValue;
  707. //console.log(cellValue)
  708. },
  709. formatOwner(row, column, cellValue){
  710. for (let i = 0; i < this.ownerTypeList.length; i++) {
  711. if(this.ownerTypeList[i].dictKey == cellValue){
  712. return this.ownerTypeList[i].dictValue
  713. }
  714. }
  715. return cellValue;
  716. //console.log(cellValue)
  717. },
  718. formatdataType(row, column, cellValue){
  719. for (let i = 0; i < this.dataTypeList.length; i++) {
  720. if(this.dataTypeList[i].dictKey == cellValue){
  721. return this.dataTypeList[i].dictValue
  722. }
  723. }
  724. return cellValue;
  725. //console.log(cellValue)
  726. },
  727. filterNode(value, data) {
  728. if (!value) return true;
  729. return data.label.indexOf(value) !== -1;
  730. }
  731. }
  732. };
  733. </script>
  734. <style scoped lang="scss">
  735. .font-s-12 /deep/ .iconfont{
  736. font-size: 12px;
  737. }
  738. .el-popper[x-placement^=bottom]{
  739. margin-top: -6px;
  740. }
  741. </style>