companyInfo-detail.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  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. :modal-append-to-body="false"
  11. style="text-align: left"
  12. width="80%"
  13. @close="closeDialog"
  14. :close-on-click-modal="false"
  15. >
  16. <div class="user-panel" v-loading="loading">
  17. <el-form
  18. ref="form"
  19. :model="formModel"
  20. :rules="ruleValidate"
  21. :label-width="'130px'"
  22. >
  23. <el-row v-show="formModel.enableChangeParent">
  24. <el-col :span="12">
  25. <el-form-item label="上级单位" prop="parentId">
  26. <el-select-tree
  27. :props="props"
  28. :options="companyResult"
  29. v-model="formModel.parentId"
  30. size="mediumn"
  31. width="400px"
  32. ></el-select-tree>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="12">
  36. <el-form-item label="本级序号" prop="sortNo">
  37. <el-input
  38. v-model="formModel.sortNo"
  39. placeholder="请输入序号"
  40. style="width: 400px"
  41. ></el-input>
  42. </el-form-item>
  43. </el-col>
  44. </el-row>
  45. <el-row>
  46. <el-col :span="12">
  47. <el-form-item label="单位名称" prop="name">
  48. <el-input
  49. v-model="formModel.name"
  50. placeholder="请输入单位名称"
  51. style="width: 400px"
  52. ></el-input>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="12">
  56. <el-form-item label="全称" prop="shortName">
  57. <el-input
  58. v-model="formModel.shortName"
  59. placeholder="请输入单位全称"
  60. style="width: 400px"
  61. ></el-input>
  62. </el-form-item>
  63. </el-col>
  64. </el-row>
  65. <el-row>
  66. <el-col :span="12">
  67. <el-form-item label="地区" prop="regionId">
  68. <!-- <el-select v-model="formModel.regionId" filterable placeholder="请选择" style="width:50%">
  69. <el-option
  70. v-for="region in regionData"
  71. :key="region.id"
  72. :label="region.name"
  73. :value="region.id"
  74. ></el-option>
  75. </el-select> -->
  76. <el-select-tree
  77. :props="props"
  78. :options="regionData"
  79. v-model="formModel.regionId"
  80. size="mediumn"
  81. width="400px"
  82. ></el-select-tree>
  83. </el-form-item>
  84. </el-col>
  85. <el-col :span="12">
  86. <el-form-item label="单位性质" prop="unitType">
  87. <el-select
  88. v-model="formModel.unitType"
  89. filterable
  90. clearable
  91. placeholder="请选择"
  92. style="width: 400px"
  93. >
  94. <el-option
  95. v-for="result in typeData"
  96. :key="result.id"
  97. :label="result.name"
  98. :value="result.value"
  99. ></el-option>
  100. </el-select>
  101. </el-form-item>
  102. </el-col>
  103. </el-row>
  104. <el-row>
  105. <el-col :span="12">
  106. <el-form-item label="场景值" prop="sceneId">
  107. <el-select
  108. v-model="formModel.sceneId"
  109. filterable
  110. clearable
  111. placeholder="请选择"
  112. style="width: 400px"
  113. >
  114. <el-option
  115. v-for="result in sceneData"
  116. :key="result.id"
  117. :label="result.sceneName"
  118. :value="result.id"
  119. ></el-option>
  120. </el-select>
  121. </el-form-item>
  122. </el-col>
  123. <el-col :span="12" v-if="formModel.sceneId == '1'">
  124. <el-form-item label="服务场景" prop="type">
  125. <el-select
  126. v-model="formModel.type"
  127. filterable
  128. clearable
  129. placeholder="请选择"
  130. style="width: 400px"
  131. >
  132. <el-option
  133. v-for="result in sceneData"
  134. :key="result.id"
  135. :label="result.sceneName"
  136. :value="result.id"
  137. ></el-option>
  138. </el-select>
  139. </el-form-item>
  140. </el-col>
  141. </el-row>
  142. <el-row>
  143. <el-col :span="12">
  144. <el-form-item label="关联物业公司" prop="relationCompanyId">
  145. <el-select-tree
  146. :props="props"
  147. :options="companyResult"
  148. v-model="formModel.relationCompanyId"
  149. size="mediumn"
  150. width="400px"
  151. ></el-select-tree>
  152. </el-form-item>
  153. </el-col>
  154. <el-col :span="12">
  155. <el-form-item label="允许手机注册用户" prop="enableRegister">
  156. <el-radio v-model="formModel.enableRegister" :label="true">允许</el-radio>
  157. <el-radio v-model="formModel.enableRegister" :label="false">否</el-radio>
  158. </el-form-item>
  159. </el-col>
  160. </el-row>
  161. <el-row>
  162. <el-col :span="24">
  163. <el-form-item label="备注" prop="remark">
  164. <el-input
  165. type="textarea"
  166. v-model="formModel.remark"
  167. :rows="2"
  168. style="width: 100%"
  169. placeholder="请输入备注"
  170. ></el-input>
  171. </el-form-item>
  172. </el-col>
  173. </el-row>
  174. <el-row>
  175. <el-col :span="24">
  176. <el-form-item label="大屏网址" prop="wallUrl">
  177. <el-input
  178. v-model="formModel.wallUrl"
  179. placeholder="请输入"
  180. style="width: 100%"
  181. ></el-input>
  182. </el-form-item>
  183. </el-col>
  184. </el-row>
  185. <!-- <el-row>
  186. <el-col :span="12">
  187. <el-form-item label="一级位置" prop="position1Name">
  188. <el-input
  189. v-model="formModel.position1Name"
  190. placeholder="请输入一级位置"
  191. style="width: 80%"
  192. ></el-input>
  193. </el-form-item>
  194. </el-col>
  195. <el-col :span="12">
  196. <el-form-item label="二级位置" prop="position2Name">
  197. <el-input
  198. v-model="formModel.position2Name"
  199. placeholder="请输入二级位置"
  200. style="width: 80%"
  201. ></el-input>
  202. </el-form-item>
  203. </el-col>
  204. </el-row>
  205. <el-row>
  206. <el-col :span="12">
  207. <el-form-item label="三级位置" prop="position3Name">
  208. <el-input
  209. v-model="formModel.position3Name"
  210. placeholder="请输入三级位置"
  211. style="width: 80%"
  212. ></el-input>
  213. </el-form-item>
  214. </el-col>
  215. <el-col :span="12">
  216. <el-form-item label="四级位置" prop="position4Name">
  217. <el-input
  218. v-model="formModel.position4Name"
  219. placeholder="请输入四级位置"
  220. style="width: 80%"
  221. ></el-input>
  222. </el-form-item>
  223. </el-col>
  224. </el-row>
  225. <el-row>
  226. <el-col :span="12">
  227. <el-form-item label="五级位置" prop="position5Name">
  228. <el-input
  229. v-model="formModel.position5Name"
  230. placeholder="请输入五级位置"
  231. style="width: 80%"
  232. ></el-input>
  233. </el-form-item>
  234. </el-col>
  235. </el-row> -->
  236. <el-row>
  237. <el-col :span="24">
  238. <el-form-item label="单位logo" prop="logo">
  239. <el-upload
  240. class="avatar-uploader"
  241. name="photoFile"
  242. :action="uploadUrl"
  243. :show-file-list="false"
  244. :headers="headers"
  245. :data="uploadData"
  246. :on-success="handleAvatarSuccess"
  247. :before-upload="beforeAvatarUpload"
  248. >
  249. <img v-if="fileUrl" :src="fileUrl" class="avatar" />
  250. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  251. </el-upload>
  252. </el-form-item>
  253. </el-col>
  254. </el-row>
  255. </el-form>
  256. </div>
  257. <span slot="footer" class="dialog-footer">
  258. <el-button @click="closeDialog">取 消</el-button>
  259. <el-button type="primary" @click="handleSubmit" :loading="submitting"
  260. >确 定</el-button
  261. >
  262. </span>
  263. </el-dialog>
  264. </template>
  265. <script>
  266. import Constant from "@/constant";
  267. import companyInfoApi from "@/api/base/companyInfo";
  268. import sceneInfoApi from "@/api/base/sceneInfo";
  269. import regionInfoApi from "@/api/base/regionInfo";
  270. import dataDictionaryApi from "@/api/sys/dataDictionary";
  271. import SelectTree from "@/components/SelectTree";
  272. import { getToken } from "@/utils/auth"; // get token from cookie
  273. export default {
  274. props: ["businessKey", "title"],
  275. data() {
  276. return {
  277. formModel: {
  278. enableChangeParent: false
  279. },
  280. ruleValidate: {
  281. name: [
  282. { required: true, message: "单位名称不能为空", trigger: "blur" },
  283. ],
  284. regionId: [
  285. { required: true, message: "地区不能为空", trigger: "blur" },
  286. ],
  287. sceneId: [
  288. { required: true, message: "场景值不能为空", trigger: "blur" },
  289. ],
  290. parentId : [
  291. { required: true, message: "上级单位不能为空", trigger: "blur" },
  292. ],
  293. sortNo : [
  294. { required: true, message: "序号不能为空", trigger: "blur" },
  295. ],
  296. unitType : [
  297. { required: true, message: "单位性质不能为空", trigger: "blur" },
  298. ]
  299. // type: [{ required: true, message: "性质不能为空", trigger: "blur" }]
  300. },
  301. showDialog: true,
  302. loading: false,
  303. submitting: false,
  304. //上传地址
  305. uploadUrl: Constant.serverUrl + "/uploadPicture",
  306. uploadData: {
  307. subFolder: "companyInfo",
  308. },
  309. fileUrl: "",
  310. headers: {
  311. Authorization: getToken(),
  312. },
  313. companyResult: [],
  314. typeData: [],
  315. treeData: [],
  316. props: {
  317. // 配置项(必选)
  318. value: "id",
  319. label: "name",
  320. children: "children",
  321. },
  322. sceneData: [],
  323. regionData: [],
  324. };
  325. },
  326. created() {
  327. var self = this;
  328. companyInfoApi.list().then(function (response) {
  329. var jsonData = response.data;
  330. if (jsonData.result) {
  331. self.companyResult = jsonData.data;
  332. }
  333. });
  334. var formData = new FormData();
  335. formData.append("catalogName", "单位性质");
  336. dataDictionaryApi.findByCatalogName(formData).then((response) => {
  337. var jsonData = response.data;
  338. this.typeData = jsonData.data;
  339. });
  340. sceneInfoApi.list().then((response) => {
  341. var jsonData = response.data;
  342. this.sceneData = jsonData.data;
  343. });
  344. regionInfoApi.list().then((response) => {
  345. var jsonData = response.data;
  346. this.regionData = jsonData.data;
  347. });
  348. //this.loadTree();
  349. },
  350. watch: {
  351. "formModel.sceneId": function (newVal, oldVal) {
  352. if (newVal != null) {
  353. if(newVal != '1'){
  354. this.formModel.type = "";
  355. }
  356. }
  357. },
  358. },
  359. methods: {
  360. // getSelectedValue(value) {
  361. // this.formModel.parentId = value;
  362. // },
  363. // loadTree() {
  364. // var formData = new FormData();
  365. // companyInfoApi.loadChildren(formData).then(resp => {
  366. // var jsonData = resp.data;
  367. // if (jsonData.result) {
  368. // this.treeData = jsonData.data;
  369. // } else {
  370. // this.$message.error(jsonData.message + "");
  371. // }
  372. // });
  373. // },
  374. // loadChildren(tree, treeNode, resolve) {
  375. // var formData = new FormData();
  376. // formData.append("parentId", tree.id);
  377. // companyInfoApi.loadChildren(formData).then(resp => {
  378. // var jsonData = resp.data;
  379. // if (jsonData.result) {
  380. // resolve(jsonData.data);
  381. // } else {
  382. // this.$message.error(jsonData.message + "");
  383. // }
  384. // });
  385. // },
  386. closeDialog() {
  387. this.$emit("close", false);
  388. },
  389. handleSubmit() {
  390. var self = this;
  391. this.$refs["form"].validate((valid) => {
  392. if (valid) {
  393. (function () {
  394. var id = self.formModel.id;
  395. if (self.formModel.parentId == null) {
  396. self.formModel.parentId = "";
  397. }
  398. if (self.formModel.relationCompanyId == null) {
  399. self.formModel.relationCompanyId = "";
  400. }
  401. if (id == null || id.length == 0) {
  402. return companyInfoApi.add(self.formModel);
  403. } else {
  404. return companyInfoApi.update(self.formModel);
  405. }
  406. })().then(function (response) {
  407. var jsonData = response.data;
  408. if (jsonData.result) {
  409. self.$message({
  410. message: "保存成功!",
  411. type: "success",
  412. });
  413. self.$emit("close", true);
  414. } else {
  415. self.$message({
  416. message: jsonData.message + "",
  417. type: "warning",
  418. });
  419. self.$emit("close", false);
  420. }
  421. });
  422. }
  423. });
  424. },
  425. handleAvatarSuccess(res, file) {
  426. var self = this;
  427. self.formModel.logo = res.data;
  428. self.fileUrl =
  429. res.data + "?x-oss-process=image/resize,m_lfit,h_400,w_400";
  430. },
  431. beforeAvatarUpload(file) {
  432. const isJPG = file.type === "image/jpeg";
  433. const isLt2M = file.size / 1024 / 1024 < 2;
  434. if (!isJPG) {
  435. this.$message.error("上传头像图片只能是 JPG 格式!");
  436. }
  437. if (!isLt2M) {
  438. this.$message.error("上传头像图片大小不能超过 2MB!");
  439. }
  440. return isJPG && isLt2M;
  441. },
  442. },
  443. mounted: function () {
  444. var self = this;
  445. (function () {
  446. if (self.businessKey.length == 0) {
  447. return companyInfoApi.create();
  448. } else {
  449. return companyInfoApi.edit(self.businessKey);
  450. }
  451. })()
  452. .then((response) => {
  453. var jsonData = response.data;
  454. self.loading = false;
  455. if (jsonData.result) {
  456. self.formModel = jsonData.data;
  457. let logo = self.formModel.logo;
  458. if (logo != null) {
  459. self.fileUrl =
  460. logo + "?x-oss-process=image/resize,m_lfit,h_400,w_400";
  461. }
  462. } else {
  463. self.$message.error(jsonData.message + "");
  464. }
  465. })
  466. .catch((error) => {
  467. self.$message.error(error + "");
  468. });
  469. },
  470. components: {
  471. "el-select-tree": SelectTree,
  472. },
  473. };
  474. </script>
  475. <style>
  476. .avatar-uploader .el-upload {
  477. border: 1px dashed #d9d9d9;
  478. border-radius: 6px;
  479. cursor: pointer;
  480. position: relative;
  481. overflow: hidden;
  482. }
  483. .avatar-uploader .el-upload:hover {
  484. border-color: #409eff;
  485. }
  486. .avatar-uploader-icon {
  487. font-size: 28px;
  488. color: #8c939d;
  489. width: 178px;
  490. height: 178px;
  491. line-height: 178px;
  492. text-align: center;
  493. }
  494. .avatar {
  495. width: 178px;
  496. height: 178px;
  497. display: block;
  498. }
  499. </style>