companyInfo-detail.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  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>
  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="fullName">
  57. <el-input
  58. v-model="formModel.fullName"
  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="type">
  68. <el-select
  69. v-model="formModel.type"
  70. filterable
  71. clearable
  72. placeholder="请选择"
  73. style="width: 400px"
  74. >
  75. <el-option
  76. v-for="result in typeData"
  77. :key="result.id"
  78. :label="result.name"
  79. :value="result.value"
  80. ></el-option>
  81. </el-select>
  82. </el-form-item>
  83. </el-col>
  84. </el-row>
  85. <el-row>
  86. <el-col :span="24">
  87. <el-form-item label="单位备注" prop="remark">
  88. <el-input
  89. type="textarea"
  90. v-model="formModel.remark"
  91. :rows="2"
  92. style="width: 100%"
  93. placeholder="请输入备注"
  94. ></el-input>
  95. </el-form-item>
  96. </el-col>
  97. </el-row>
  98. </el-form>
  99. </div>
  100. <span slot="footer" class="dialog-footer">
  101. <el-button @click="closeDialog">取 消</el-button>
  102. <el-button type="primary" @click="handleSubmit" :loading="submitting"
  103. >确 定</el-button
  104. >
  105. </span>
  106. </el-dialog>
  107. </template>
  108. <script>
  109. import Constant from "@/constant";
  110. import companyInfoApi from "@/api/bus/companyInfo";
  111. import dataDictionaryApi from "@/api/sys/dataDictionary";
  112. import SelectTree from "@/components/SelectTree";
  113. import { getToken } from "@/utils/auth"; // get token from cookie
  114. export default {
  115. props: ["businessKey", "title"],
  116. data() {
  117. return {
  118. formModel: {
  119. enableChangeParent: false
  120. },
  121. ruleValidate: {
  122. name: [
  123. { required: true, message: "单位名称不能为空", trigger: "blur" },
  124. ],
  125. regionId: [
  126. { required: true, message: "地区不能为空", trigger: "blur" },
  127. ],
  128. parentId : [
  129. { required: true, message: "上级单位不能为空", trigger: "blur" },
  130. ],
  131. sortNo : [
  132. { required: true, message: "序号不能为空", trigger: "blur" },
  133. ],
  134. type : [
  135. { required: true, message: "单位性质不能为空", trigger: "blur" },
  136. ]
  137. },
  138. showDialog: true,
  139. loading: false,
  140. submitting: false,
  141. //上传地址
  142. uploadUrl: Constant.serverUrl + "/uploadPicture",
  143. uploadData: {
  144. subFolder: "companyInfo",
  145. },
  146. fileUrl: "",
  147. headers: {
  148. Authorization: getToken(),
  149. },
  150. companyResult: [],
  151. typeData: [],
  152. treeData: [],
  153. props: {
  154. // 配置项(必选)
  155. value: "id",
  156. label: "name",
  157. children: "children",
  158. },
  159. sceneData: [],
  160. regionData: [],
  161. };
  162. },
  163. created() {
  164. var self = this;
  165. companyInfoApi.treeList().then(function (response) {
  166. var jsonData = response.data;
  167. if (jsonData.result) {
  168. self.companyResult = jsonData.data;
  169. }
  170. });
  171. var formData = new FormData();
  172. formData.append("catalogName", "单位性质");
  173. dataDictionaryApi.findByCatalogName(formData).then((response) => {
  174. var jsonData = response.data;
  175. this.typeData = jsonData.data;
  176. });
  177. },
  178. watch: {
  179. "formModel.sceneId": function (newVal, oldVal) {
  180. if (newVal != null) {
  181. if(newVal != '1'){
  182. this.formModel.type = "";
  183. }
  184. }
  185. },
  186. },
  187. methods: {
  188. // getSelectedValue(value) {
  189. // this.formModel.parentId = value;
  190. // },
  191. // loadTree() {
  192. // var formData = new FormData();
  193. // companyInfoApi.loadChildren(formData).then(resp => {
  194. // var jsonData = resp.data;
  195. // if (jsonData.result) {
  196. // this.treeData = jsonData.data;
  197. // } else {
  198. // this.$message.error(jsonData.message + "");
  199. // }
  200. // });
  201. // },
  202. // loadChildren(tree, treeNode, resolve) {
  203. // var formData = new FormData();
  204. // formData.append("parentId", tree.id);
  205. // companyInfoApi.loadChildren(formData).then(resp => {
  206. // var jsonData = resp.data;
  207. // if (jsonData.result) {
  208. // resolve(jsonData.data);
  209. // } else {
  210. // this.$message.error(jsonData.message + "");
  211. // }
  212. // });
  213. // },
  214. closeDialog() {
  215. this.$emit("close", false);
  216. },
  217. handleSubmit() {
  218. var self = this;
  219. this.$refs["form"].validate((valid) => {
  220. if (valid) {
  221. (function () {
  222. var id = self.formModel.id;
  223. if (self.formModel.parentId == null) {
  224. self.formModel.parentId = "";
  225. }
  226. if (self.formModel.relationCompanyId == null) {
  227. self.formModel.relationCompanyId = "";
  228. }
  229. if (id == null || id.length == 0) {
  230. return companyInfoApi.add(self.formModel);
  231. } else {
  232. return companyInfoApi.update(self.formModel);
  233. }
  234. })().then(function (response) {
  235. var jsonData = response.data;
  236. if (jsonData.result) {
  237. self.$message({
  238. message: "保存成功!",
  239. type: "success",
  240. });
  241. self.$emit("close", true);
  242. } else {
  243. self.$message({
  244. message: jsonData.message + "",
  245. type: "warning",
  246. });
  247. self.$emit("close", false);
  248. }
  249. });
  250. }
  251. });
  252. },
  253. handleAvatarSuccess(res, file) {
  254. var self = this;
  255. self.formModel.logo = res.data;
  256. self.fileUrl =
  257. res.data + "?x-oss-process=image/resize,m_lfit,h_400,w_400";
  258. },
  259. beforeAvatarUpload(file) {
  260. const isJPG = file.type === "image/jpeg";
  261. const isLt2M = file.size / 1024 / 1024 < 2;
  262. if (!isJPG) {
  263. this.$message.error("上传头像图片只能是 JPG 格式!");
  264. }
  265. if (!isLt2M) {
  266. this.$message.error("上传头像图片大小不能超过 2MB!");
  267. }
  268. return isJPG && isLt2M;
  269. },
  270. },
  271. mounted: function () {
  272. var self = this;
  273. (function () {
  274. if (self.businessKey.length == 0) {
  275. return companyInfoApi.create();
  276. } else {
  277. return companyInfoApi.edit(self.businessKey);
  278. }
  279. })()
  280. .then((response) => {
  281. var jsonData = response.data;
  282. self.loading = false;
  283. if (jsonData.result) {
  284. self.formModel = jsonData.data;
  285. let logo = self.formModel.logo;
  286. if (logo != null) {
  287. self.fileUrl =
  288. logo + "?x-oss-process=image/resize,m_lfit,h_400,w_400";
  289. }
  290. } else {
  291. self.$message.error(jsonData.message + "");
  292. }
  293. })
  294. .catch((error) => {
  295. self.$message.error(error + "");
  296. });
  297. },
  298. components: {
  299. "el-select-tree": SelectTree,
  300. },
  301. };
  302. </script>
  303. <style>
  304. .avatar-uploader .el-upload {
  305. border: 1px dashed #d9d9d9;
  306. border-radius: 6px;
  307. cursor: pointer;
  308. position: relative;
  309. overflow: hidden;
  310. }
  311. .avatar-uploader .el-upload:hover {
  312. border-color: #409eff;
  313. }
  314. .avatar-uploader-icon {
  315. font-size: 28px;
  316. color: #8c939d;
  317. width: 178px;
  318. height: 178px;
  319. line-height: 178px;
  320. text-align: center;
  321. }
  322. .avatar {
  323. width: 178px;
  324. height: 178px;
  325. display: block;
  326. }
  327. </style>