personPopedom-detail.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. <style scoped>
  2. .user-panel {
  3. margin: 10px auto;
  4. }
  5. </style>
  6. <template>
  7. <el-dialog
  8. :visible.sync="showDialog"
  9. :title="title"
  10. :append-to-body="true"
  11. style="text-align: left"
  12. @close="closeDialog"
  13. :close-on-click-modal="false"
  14. >
  15. <div class="user-panel" v-loading="loading">
  16. <el-form
  17. ref="form"
  18. :model="formModel"
  19. :rules="ruleValidate"
  20. :label-width="'100px'"
  21. >
  22. <el-form-item label="单位" prop="companyId">
  23. <el-select-tree
  24. :props="props"
  25. :options="companyResult"
  26. v-model="formModel.companyId"
  27. size=""
  28. height="200"
  29. ></el-select-tree>
  30. </el-form-item>
  31. <!-- <el-form-item label="机构" prop="companyStructureId">
  32. <el-select-tree
  33. :props="companyStructureProps"
  34. :options="companyStructureResult"
  35. v-model="formModel.companyStructureId"
  36. height="200"
  37. size=""
  38. ></el-select-tree>
  39. </el-form-item> -->
  40. <el-form-item label="关联场景" prop="sceneId">
  41. <el-select
  42. v-model="formModel.sceneId"
  43. filterable
  44. placeholder="请选择"
  45. >
  46. <el-option
  47. v-for="result in sceneData"
  48. :key="result.id"
  49. :label="result.sceneName"
  50. :value="result.id"
  51. ></el-option>
  52. </el-select>
  53. </el-form-item>
  54. <el-form-item
  55. label="服务公司"
  56. prop="serviceCompanyId"
  57. v-if="sceneId == '4'"
  58. >
  59. <el-select-tree
  60. :props="props"
  61. :options="companyResult"
  62. v-model="formModel.serviceCompanyId"
  63. height="200"
  64. ></el-select-tree>
  65. </el-form-item>
  66. <el-form-item label="身份" prop="personRoleId">
  67. <el-select
  68. v-model="formModel.personRoleId"
  69. filterable
  70. placeholder="请选择"
  71. style="width: 280px"
  72. >
  73. <el-option
  74. v-for="role in personRoleResult"
  75. :key="role.id"
  76. :label="role.personRoleName"
  77. :value="role.id"
  78. ></el-option>
  79. </el-select>
  80. </el-form-item>
  81. <el-form-item label="进行注册审核" prop="enableRegisterExamine" v-if="havingIcon">
  82. <el-radio v-model="formModel.enableRegisterExamine" :label="true">是</el-radio>
  83. <el-radio v-model="formModel.enableRegisterExamine" :label="false">否</el-radio>
  84. </el-form-item>
  85. <!-- <el-form-item label="展示的图标" prop="showIconId">
  86. <el-select
  87. v-model="formModel.showIconId"
  88. filterable
  89. multiple
  90. placeholder="请选择"
  91. style="width: 280px"
  92. >
  93. <el-option
  94. v-for="icon in iconResult"
  95. :key="icon.iconId"
  96. :label="icon.iconName"
  97. :value="icon.iconId"
  98. ></el-option>
  99. </el-select>
  100. </el-form-item> -->
  101. <el-form-item label="备注信息" prop="remark">
  102. <el-input
  103. v-model="formModel.remark"
  104. placeholder="请输入备注信息"
  105. style="width: 300px"
  106. ></el-input>
  107. </el-form-item>
  108. <el-form-item label="是否要求考勤" prop="enableAttendance">
  109. <el-switch
  110. v-model="formModel.enableAttendance"
  111. active-color="#13ce66"
  112. inactive-color="#ff4949"
  113. ></el-switch>
  114. </el-form-item>
  115. </el-form>
  116. </div>
  117. <span slot="footer" class="dialog-footer">
  118. <el-button @click="closeDialog">取 消</el-button>
  119. <el-button type="primary" @click="handleSubmit" :loading="submitting"
  120. >确 定</el-button
  121. >
  122. </span>
  123. </el-dialog>
  124. </template>
  125. <script>
  126. import Constant from "@/constant";
  127. import personPopedomApi from "@/api/base/personPopedom";
  128. import personRoleInfoApi from "@/api/base/personRoleInfo";
  129. import companyInfoApi from "@/api/base/companyInfo";
  130. import deviceInfoApi from "@/api/base/deviceInfo";
  131. import companyStructureInfoApi from "@/api/base/companyStructureInfo";
  132. import iconInfoApi from "@/api/base/iconInfo";
  133. import sceneInfoApi from "@/api/base/sceneInfo";
  134. import SelectTree from "@/components/SelectTree";
  135. import { Breadcrumb } from "element-ui";
  136. export default {
  137. components: {
  138. "el-select-tree": SelectTree,
  139. },
  140. props: ["businessKey", "title", "personId"],
  141. data() {
  142. return {
  143. formModel: { companyId: "" },
  144. ruleValidate: {
  145. companyId: [
  146. { required: true, message: "对应公司不能为空", trigger: "blur" },
  147. ],
  148. sceneId: [
  149. { required: true, message: "关联场景值不能为空", trigger: "blur" },
  150. ],
  151. personRoleId: [
  152. { required: true, message: "对应角色不能为空", trigger: "blur" },
  153. ],
  154. },
  155. showDialog: true,
  156. loading: false,
  157. submitting: false,
  158. companyResult: [],
  159. treeData: [],
  160. props: {
  161. // 配置项(必选)
  162. value: "id",
  163. label: "name",
  164. children: "children",
  165. },
  166. personRoleResult: [],
  167. iconResult: [],
  168. companyStructureResult: [],
  169. companyStructureProps: {
  170. // 配置项(必选)
  171. value: "id",
  172. label: "structureName",
  173. children: "children",
  174. },
  175. sceneData: [],
  176. sceneId: "",
  177. oldPersonRoleId: "",
  178. havingIcon: false,
  179. };
  180. },
  181. created() {
  182. var self = this;
  183. companyInfoApi.list().then(function (response) {
  184. var jsonData = response.data;
  185. if (jsonData.result) {
  186. if (jsonData.data != null && jsonData.data != "") {
  187. self.companyResult = jsonData.data;
  188. }
  189. }
  190. });
  191. sceneInfoApi.list().then((response) => {
  192. var jsonData = response.data;
  193. this.sceneData = jsonData.data;
  194. });
  195. // var formData = new FormData();
  196. // formData.append("companyId", "c52b03cb-7526-4e8b-8b90-4f7a6a37b586");
  197. // personRoleInfoApi.listByCompanyId(formData).then(function (response) {
  198. // var jsonData = response.data;
  199. // if (jsonData.result) {
  200. // if (jsonData.data != null && jsonData.data != "") {
  201. // self.personRoleResult = jsonData.data;
  202. // }
  203. // }
  204. // });
  205. },
  206. watch: {
  207. "formModel.companyId": function (val, oldval) {
  208. if (val != null && val != "") {
  209. var self = this;
  210. // if (self.oldPersonRoleId != "") {
  211. // self.formModel.personRoleId = self.oldPersonRoleId;
  212. // } else {
  213. // self.formModel.personRoleId = "";
  214. // self.oldPersonRoleId = "";
  215. // }
  216. var formData = new FormData();
  217. formData.append("companyId", val);
  218. personRoleInfoApi.listByCompanyId(formData).then(function (response) {
  219. var jsonData = response.data;
  220. if (jsonData.result) {
  221. if (jsonData.data != null && jsonData.data != "") {
  222. self.personRoleResult = jsonData.data;
  223. }
  224. }
  225. });
  226. companyStructureInfoApi.list(formData).then(function (response) {
  227. var jsonData = response.data;
  228. if (jsonData.result) {
  229. if (jsonData.data != null && jsonData.data != "") {
  230. self.companyStructureResult = jsonData.data;
  231. }
  232. }
  233. });
  234. if (self.oldPersonRoleId == "") {
  235. companyInfoApi.edit(val).then((response) => {
  236. var jsonData = response.data;
  237. if (jsonData.result) {
  238. self.formModel.sceneId = jsonData.data.sceneId;
  239. }
  240. });
  241. }
  242. }
  243. },
  244. "formModel.sceneId": function (val, oldval) {
  245. if (val != null && val != "") {
  246. var self = this;
  247. var formData = new FormData();
  248. formData.append("sceneId", val);
  249. personRoleInfoApi.findBySceneId(formData).then(function (response) {
  250. var jsonData = response.data;
  251. if (jsonData.result) {
  252. if (jsonData.data != null && jsonData.data != "") {
  253. // if (self.oldPersonRoleId != "") {
  254. // self.formModel.personRoleId = self.oldPersonRoleId;
  255. // } else {
  256. // self.formModel.personRoleId = "";
  257. // self.oldPersonRoleId = "";
  258. // }
  259. self.personRoleResult = jsonData.data;
  260. }
  261. }
  262. });
  263. }
  264. },
  265. "formModel.personRoleId": function (val, oldval) {
  266. if (val != null && val != "") {
  267. var self = this;
  268. var formData = new FormData();
  269. formData.append("personRoleId", val);
  270. formData.append("iconId", "73");
  271. personRoleInfoApi.findHaveIcon(formData).then(function (response) {
  272. var jsonData = response.data;
  273. if (jsonData.result) {
  274. self.havingIcon = jsonData.data;
  275. }
  276. });
  277. }
  278. }
  279. // "formModel.personRoleId": function (val, oldval) {
  280. // if (val != null && val != "") {
  281. // var self = this;
  282. // self.formModel.showIconId = "";
  283. // var formData = new FormData();
  284. // formData.append("roleId", val);
  285. // iconInfoApi.listByRoleId(formData).then(function (response) {
  286. // var jsonData = response.data;
  287. // if (jsonData.result) {
  288. // if (jsonData.data != null && jsonData.data != "") {
  289. // self.iconResult = jsonData.data;
  290. // }
  291. // }
  292. // });
  293. // }
  294. // },
  295. },
  296. methods: {
  297. closeDialog() {
  298. this.$emit("close", false);
  299. },
  300. handleSubmit() {
  301. var self = this;
  302. self.formModel.personId = self.personId;
  303. // if (
  304. // self.formModel.showIconId != null &&
  305. // self.formModel.showIconId != ""
  306. // ) {
  307. // var showIconId = self.formModel.showIconId.join(",");
  308. // self.formModel.showIconId = showIconId;
  309. // } else {
  310. // self.formModel.showIconId = "";
  311. // }
  312. if (
  313. self.formModel.companyStructureId != null &&
  314. self.formModel.companyStructureId == "0"
  315. ) {
  316. self.$message({
  317. message: "请选择下级机构",
  318. type: "warning",
  319. });
  320. self.formModel.companyStructureId == null;
  321. } else {
  322. this.$refs["form"].validate((valid) => {
  323. if (valid) {
  324. (function () {
  325. var id = self.formModel.id;
  326. if (id == null || id.length == 0) {
  327. return personPopedomApi.add(self.formModel);
  328. } else {
  329. return personPopedomApi.update(self.formModel);
  330. }
  331. })().then(function (response) {
  332. var jsonData = response.data;
  333. if (jsonData.result) {
  334. self.$message({
  335. message: "保存成功!",
  336. type: "success",
  337. });
  338. self.$emit("close", true);
  339. } else {
  340. self.$message({
  341. message: jsonData.message + "",
  342. type: "warning",
  343. });
  344. self.formModel.companyStructureId == null;
  345. self.$emit("close", false);
  346. }
  347. });
  348. }
  349. });
  350. }
  351. },
  352. },
  353. mounted: function () {
  354. var self = this;
  355. (function () {
  356. if (self.businessKey.length == 0) {
  357. return personPopedomApi.create();
  358. } else {
  359. return personPopedomApi.edit(self.businessKey);
  360. }
  361. })()
  362. .then((response) => {
  363. var jsonData = response.data;
  364. self.loading = false;
  365. if (jsonData.result) {
  366. self.formModel = jsonData.data;
  367. self.oldPersonRoleId = self.formModel.personRoleId;
  368. } else {
  369. self.$message.error(jsonData.message + "");
  370. }
  371. })
  372. .catch((error) => {
  373. self.$message.error(error + "");
  374. });
  375. },
  376. };
  377. </script>