hgxsc.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. <template>
  2. <div class="hgxsc">
  3. <el-form
  4. :model="ruleForm"
  5. ref="ruleForm"
  6. label-width="100px"
  7. :rules="rules"
  8. >
  9. <el-form-item label="选址范围:" prop="xzmj">
  10. <range type="hgxfx" :keys="['hx', 'sc']" class="range" ref="range" />
  11. </el-form-item>
  12. <!-- <div class="block-title">基本信息</div> -->
  13. <el-form-item label="项目名称:" prop="xmmc">
  14. <el-input
  15. v-model="ruleForm.xmmc"
  16. size="mini"
  17. placeholder="请输入项目名称"
  18. ></el-input>
  19. </el-form-item>
  20. <el-form-item label="项目类型:" prop="xmlx">
  21. <el-input
  22. v-model="ruleForm.xmlx"
  23. size="mini"
  24. placeholder="请输入项目类型"
  25. ></el-input>
  26. </el-form-item>
  27. <el-form-item label="建设单位:" prop="jsdw">
  28. <el-input
  29. v-model="ruleForm.jsdw"
  30. size="mini"
  31. placeholder="请输入建设单位"
  32. ></el-input>
  33. </el-form-item>
  34. </el-form>
  35. <div class="site-title">
  36. <div class="siteCon">
  37. <div class="site_Icon"></div>
  38. <span>分析因子</span>
  39. </div>
  40. <div
  41. v-show="$store.getters.name == 'admin'"
  42. class="posi-abs pointer"
  43. style="right: 0; top: 1px; color: #409eff"
  44. @click="updateScx"
  45. >
  46. 关联资源目录
  47. </div>
  48. </div>
  49. <div class="treeDiv">
  50. <el-tree
  51. :data="treedata"
  52. ref="tree"
  53. show-checkbox
  54. node-key="bsm"
  55. :props="defaultProps"
  56. :default-expanded-keys="xz"
  57. >
  58. </el-tree>
  59. </div>
  60. <div class="bottomBtns">
  61. <span class="clearBtn" @click="reset">取消</span>
  62. <span class="sureBtn" @click="submitData">确定</span>
  63. </div>
  64. </div>
  65. </template>
  66. <script>
  67. import { Add, GetScx, UpdateScx } from "@/api/ghss/hgxfx.js";
  68. import { Message, MessageBox } from "element-ui";
  69. import range from "@/components/mapview/range.vue"; ///mapview/range
  70. import moment from "moment";
  71. export default {
  72. components: {
  73. range,
  74. },
  75. props: {},
  76. data() {
  77. return {
  78. xz: [],
  79. treedata: [],
  80. defaultProps: {
  81. children: "children",
  82. label: "bsmmc",
  83. },
  84. ruleForm: {
  85. xmmc: "",
  86. jsdw: "",
  87. xmlx: "",
  88. // xzdw: "",
  89. ydxz_bsm: "",
  90. yjydlx: "",
  91. fwlx: 1,
  92. xzfw: "",
  93. xzmj: 0,
  94. },
  95. rules: {
  96. xzmj: [{ required: true, message: "请填写范围的数据" }],
  97. xmmc: [
  98. { required: true, message: "请输入项目名称", trigger: "blur" },
  99. {
  100. min: 3,
  101. max: 50,
  102. message: "长度在 3 到 50 个字符",
  103. trigger: "blur",
  104. },
  105. ],
  106. // jsdw: [{ required: true, message: "请输入建设单位", trigger: "blur" }],
  107. // xmlx: [{ required: true, message: "请输入项目类型", trigger: "blur" }],
  108. },
  109. options: [],
  110. };
  111. },
  112. mounted() {
  113. this.initform();
  114. this.getKzx();
  115. },
  116. methods: {
  117. initform() {
  118. this.ruleForm.xmmc = `合规性分析_${moment(new Date()).format(
  119. "YYYYMMDDHHmmss"
  120. )}`;
  121. this.ruleForm.xmlx = `项目类型`;
  122. this.ruleForm.jsdw = `建设单位`;
  123. },
  124. //获取检查要素
  125. getKzx() {
  126. GetScx().then((res) => {
  127. if (res.data) {
  128. this.treedata = this.tranListToTreeData(res.data, "0");
  129. res.data.forEach((item) => {
  130. if (item.kzxjb == 1) this.xz.push(item.bsm);
  131. });
  132. setTimeout(() => {
  133. this.$refs.tree.setCheckedKeys(this.xz);
  134. }, 1);
  135. }
  136. });
  137. },
  138. tranListToTreeData(list, pbsm) {
  139. var map = {};
  140. list.forEach((item) => {
  141. if (map[item.pbsm]) map[item.pbsm].push(item);
  142. else map[item.pbsm] = [item];
  143. });
  144. list.forEach((item) => {
  145. if (map[item.pbsm]) item.children = map[item.bsm];
  146. });
  147. map = list.filter((item) => {
  148. return item.pbsm == pbsm;
  149. });
  150. map.sort((a, b) => a.xssx - b.xssx);
  151. return map;
  152. },
  153. updateScx() {
  154. UpdateScx().then((res) => {
  155. if (res.statuscode == 200) {
  156. Message.success(res.message);
  157. } else {
  158. Message.error(res.message);
  159. }
  160. });
  161. },
  162. setydlx() {
  163. this.ruleForm.yjydlx = this.$refs.ydcascader
  164. .getCheckedNodes()[0]
  165. .pathLabels.join(",");
  166. this.$refs.ydcascader.togglePopperVisible();
  167. },
  168. reset() {
  169. this.ruleForm = {
  170. xmmc: "",
  171. jsdw: "",
  172. xmlx: "",
  173. // xzdw: "",
  174. ydxz_bsm: "",
  175. yjydlx: "",
  176. scxList: [],
  177. fwlx: 1,
  178. xzfw: "",
  179. xzmj: 0,
  180. };
  181. this.$refs.range.reset();
  182. setTimeout(() => {
  183. this.$refs.tree.setCheckedKeys(this.xz);
  184. }, 1);
  185. },
  186. submitData() {
  187. //更新范围
  188. var _temp = this.$refs.range.getRange();
  189. this.ruleForm.xzfw = _temp.xzfw;
  190. this.ruleForm.xzmj = _temp.xzmj;
  191. this.$refs.ruleForm.validate((valid) => {
  192. if (valid) {
  193. this.getCheckedNodes();
  194. if (this.ruleForm.scxList.length == 0) {
  195. Message.warning("至少选择一个项目信息");
  196. }
  197. MessageBox.confirm("是否开始进行合规性检查?", "合规性检查", {
  198. confirmButtonText: "确定",
  199. cancelButtonText: "取消",
  200. type: "warning",
  201. }).then(() => {
  202. this.$emit("updateParent", "loading", true);
  203. Add({ ...this.ruleForm }).then((res) => {
  204. if (res.success) {
  205. this.$emit("updateParent", "nowObj", this.ruleForm);
  206. this.$emit("updateParent", "rzBsm", res.message);
  207. this.reset();
  208. } else {
  209. Message.warning(res.message);
  210. }
  211. this.$emit("updateParent", "loading", false);
  212. });
  213. });
  214. }
  215. });
  216. },
  217. getCheckedNodes() {
  218. // .getCheckedNodes(true) 是否只是叶子节点
  219. this.ruleForm.scxList = this.$refs.tree.getCheckedNodes().map((item) => {
  220. return { scxbsm: item.bsm, parameter: item.parameter };
  221. });
  222. //半选节点
  223. this.$refs.tree.getHalfCheckedNodes().map((item) => {
  224. this.ruleForm.scxList.push({
  225. scxbsm: item.bsm,
  226. parameter: item.parameter,
  227. });
  228. });
  229. },
  230. },
  231. watch: {},
  232. };
  233. </script>
  234. <style lang="scss" scoped>
  235. .hgxsc {
  236. height: 100%;
  237. line-height: 40px;
  238. .rangDiv {
  239. width: 100%;
  240. // height: 100px;
  241. display: flex;
  242. justify-content: space-between;
  243. }
  244. .range {
  245. flex: 1;
  246. width: 100%;
  247. // position: absolute;
  248. // left: 100px;
  249. }
  250. .treeDiv {
  251. width: 100%;
  252. height: calc(100% - 290px);
  253. padding: 7px;
  254. margin-bottom: 10px;
  255. overflow-y: auto;
  256. }
  257. }
  258. /deep/ .el-input .el-input--mini .el-input--suffix {
  259. width: 100%;
  260. }
  261. /deep/ .el-select {
  262. width: 100%;
  263. }
  264. /deep/ .el-form-item__error {
  265. top: 32px !important;
  266. }
  267. </style>