companyInfo-detail.vue 15 KB

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