lesseeAdd.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. <!-- 主页模块 主页一览-->
  2. <template>
  3. <div v-loading="pageLoading">
  4. <div class="head">
  5. <span class="headicon">基本信息</span>
  6. </div>
  7. <div class="top-buttons">
  8. <el-button size="small"
  9. type="primary"
  10. @click="save">保存</el-button>
  11. <el-button size="small"
  12. @click="back">取消</el-button>
  13. </div>
  14. <div class="form">
  15. <el-form ref="ruleForm"
  16. label-width="120px"
  17. label-position="right"
  18. :model="ruleForm"
  19. :rules="rules">
  20. <el-form-item label="公司中文名称"
  21. prop="tenantName"
  22. class="aaa">
  23. <el-input v-model="ruleForm.tenantName"
  24. @change="edited = true"
  25. size="small"
  26. class="page-form-input"
  27. maxlength="90" />
  28. </el-form-item>
  29. <el-form-item label="公司英文名称"
  30. prop="tenantEnName"
  31. class="aaa">
  32. <el-input v-model="ruleForm.tenantEnName"
  33. @change="edited = true"
  34. size="small"
  35. class="page-form-input"
  36. maxlength="90" />
  37. </el-form-item>
  38. <el-form-item label="公司简称"
  39. prop="compSimpleNameEn">
  40. <el-input v-model="ruleForm.compSimpleNameEn"
  41. @change="edited = true"
  42. size="small"
  43. class="page-form-input"
  44. maxlength="5"
  45. placeholder="5位以下字母或数字" />
  46. <el-tooltip class="item"
  47. effect="light"
  48. content="用于标记采购单号规则标识"
  49. placement="bottom-start">
  50. <svg-icon icon-class="talk"
  51. class="talk" />
  52. </el-tooltip>
  53. </el-form-item>
  54. <el-form-item label="公司域名"
  55. prop="compDomainName"
  56. class="aaa">
  57. <el-input maxlength="40"
  58. class="page-form-input"
  59. @change="edited = true"
  60. size="small"
  61. v-model="ruleForm.compDomainName" />
  62. </el-form-item>
  63. <el-form-item label="联系人"
  64. prop="linkmanName"
  65. class="aaa">
  66. <el-input maxlength="40"
  67. class="page-form-input"
  68. @change="edited = true"
  69. size="small"
  70. v-model="ruleForm.linkmanName" />
  71. </el-form-item>
  72. <el-form-item maxlength="11"
  73. label="联系电话"
  74. prop="linkmanPhone">
  75. <el-input v-model="ruleForm.linkmanPhone"
  76. @change="edited = true"
  77. size="small"
  78. class="page-form-input" />
  79. </el-form-item>
  80. <el-form-item maxlength="90"
  81. label="联系人邮箱"
  82. prop="linkmanEmail">
  83. <el-input v-model="ruleForm.linkmanEmail"
  84. @change="edited = true"
  85. size="small"
  86. class="page-form-input" />
  87. </el-form-item>
  88. <el-form-item label="专属客服"
  89. prop="customerServiceStaffId"
  90. class="aaa">
  91. <el-select v-model="ruleForm.customerServiceStaffId"
  92. @change="edited = true"
  93. placeholder="请选择">
  94. <el-option v-for="item in options"
  95. :key="item.operatorId"
  96. :label="item.operatorName"
  97. :value="item.operatorId" />
  98. </el-select>
  99. </el-form-item>
  100. <el-form-item label="服务类型"
  101. prop="serviceType"
  102. class="aaa">
  103. <el-select v-model="ruleForm.serviceType"
  104. @change="edited = true"
  105. placeholder="请选择">
  106. <el-option label="船端"
  107. value="SHIP_CLIENT" />
  108. <el-option label="岸端"
  109. value="COAST_CLIENT" />
  110. <el-option label="船端+岸端"
  111. value="SHIP_COAST_CLIENT" />
  112. </el-select>
  113. </el-form-item>
  114. <!-- <el-form-item label="入驻船舶数"
  115. prop="enteringShipNumber">
  116. <el-input v-model="ruleForm.enteringShipNumber"
  117. @change="edited = true"
  118. size="small"
  119. class="page-form-input" />
  120. </el-form-item> -->
  121. <!-- 船舶总数量 -->
  122. <el-form-item label="入驻船舶数"
  123. prop="shipNumber">
  124. <el-input v-model="ruleForm.shipNumber"
  125. @change="edited = true"
  126. size="small"
  127. class="page-form-input" />
  128. </el-form-item>
  129. <el-form-item label="税务登记号"
  130. prop="compImo">
  131. <el-input v-model="ruleForm.compImo"
  132. @change="edited = true"
  133. size="small"
  134. class="page-form-input" />
  135. </el-form-item>
  136. <el-form-item label="合同时间"
  137. prop="contractStartDate">
  138. <el-date-picker v-model="ruleForm.contractStartDate"
  139. format="yyyy 年 MM 月 dd 日"
  140. value-format="yyyy-MM-dd"
  141. type="date"
  142. placeholder="选择日期"
  143. @change="edited = true" />
  144. </el-form-item>
  145. <el-form-item label="到期时间"
  146. prop="contractEndDate">
  147. <el-date-picker v-model="ruleForm.contractEndDate"
  148. format="yyyy 年 MM 月 dd 日"
  149. value-format="yyyy-MM-dd"
  150. type="date"
  151. placeholder="选择日期"
  152. @change="edited = true" />
  153. </el-form-item>
  154. </el-form>
  155. </div>
  156. </div>
  157. </template>
  158. <script>
  159. import { create, operators,tenantChangeshipNumber } from "../../api/lessee";
  160. import { validPhone, validEmail, isNumber } from "../../utils/validate";
  161. export default {
  162. name: "Lessee",
  163. data () {
  164. const shipNumber = (rule, value, callback) => {
  165. if (value == null || value === "") {
  166. callback(new Error("带星号的不能为空"));
  167. } else if (!isNumber(value)) {
  168. callback(new Error("只能是正整数"));
  169. } else {
  170. callback();
  171. }
  172. };
  173. const checkEmail = (rule, value, callback) => {
  174. if (value == null || value === "") {
  175. callback();
  176. } else if (!validEmail(value)) {
  177. callback(new Error("邮箱格式不正确"));
  178. } else {
  179. callback();
  180. }
  181. };
  182. const validcodePhonee = (rule, value, callback) => {
  183. if (value === "") {
  184. callback(new Error("带星号的不能为空"));
  185. } else if (!validPhone(value)) {
  186. callback(new Error("手机号格式填写错误"));
  187. } else {
  188. callback();
  189. }
  190. };
  191. const validcodeName = (rule, value, callback) => {
  192. const reg = /^[0-9a-zA-Z]{1,5}$/;
  193. if (value === "") {
  194. callback(new Error("带星号的不能为空"));
  195. } else if (!reg.test(value)) {
  196. callback(new Error("简称必须是由5位数字和字母组合"));
  197. } else {
  198. callback();
  199. }
  200. };
  201. return {
  202. pageLoading: false,
  203. checkMsg: " ",
  204. showlist: "",
  205. tenantId: "",
  206. ruleForm: {},
  207. edited: false,
  208. rules: {
  209. tenantName: [
  210. {
  211. required: true,
  212. trigger: "blur"
  213. }
  214. ],
  215. tenantEnName: [
  216. {
  217. required: true,
  218. trigger: "blur"
  219. }
  220. ],
  221. compSimpleNameEn: [
  222. {
  223. required: true,
  224. validator: validcodeName,
  225. trigger: "blur"
  226. }
  227. ],
  228. linkmanName: [
  229. {
  230. required: true,
  231. trigger: "blur"
  232. }
  233. ],
  234. compImo: [
  235. {
  236. required: true,
  237. trigger: "blur"
  238. }
  239. ],
  240. compDomainName: [
  241. {
  242. required: true,
  243. trigger: "blur"
  244. }
  245. ],
  246. linkmanPhone: [
  247. {
  248. required: true,
  249. validator: validcodePhonee,
  250. trigger: "blur"
  251. }
  252. ],
  253. customerServiceStaffId: [
  254. {
  255. required: true,
  256. trigger: "change"
  257. }
  258. ],
  259. serviceType: [
  260. {
  261. required: true,
  262. trigger: "change"
  263. }
  264. ],
  265. enteringShipNumber: [
  266. {
  267. required: true,
  268. trigger: "blur"
  269. }
  270. ],
  271. shipNumber: [
  272. {
  273. required: true,
  274. validator: shipNumber,
  275. trigger: "blur"
  276. }
  277. ],
  278. contractStartDate: [
  279. {
  280. required: true,
  281. validator: this.checkContractStartDate,
  282. trigger: "change"
  283. }
  284. ],
  285. contractEndDate: [
  286. {
  287. required: true,
  288. validator: this.checkContractEndDate,
  289. trigger: "change"
  290. }
  291. ],
  292. linkmanEmail: [
  293. {
  294. validator: checkEmail,
  295. trigger: "blur"
  296. }
  297. ]
  298. },
  299. options: [],
  300. value: "",
  301. show: "",
  302. removed: ""
  303. };
  304. },
  305. created () {
  306. this.checkList();
  307. this.show = "return";
  308. },
  309. methods: {
  310. // 邮箱验证
  311. checkEmail (data) {
  312. if (data == null || data === "") {
  313. return false;
  314. } else if (!validEmail(data)) {
  315. this.$message({
  316. message: "邮箱格式不正确",
  317. type: "error",
  318. showClose: true
  319. });
  320. }
  321. },
  322. // 查询账户
  323. checkList () {
  324. operators({
  325. currentPage: "",
  326. pageSize: ""
  327. }).then(response => {
  328. this.options = response.data.records;
  329. });
  330. },
  331. // 合同时间验证
  332. checkContractStartDate (rule, value, callback) {
  333. this.$refs.ruleForm.clearValidate("contractEndDate");
  334. const end = this.ruleForm.contractEndDate;
  335. if (!value) {
  336. callback(new Error("合同开始日期不能为空"));
  337. } else if (end > value) {
  338. callback();
  339. } else {
  340. callback(new Error("合同开始日期须早于结束日期"));
  341. }
  342. },
  343. checkContractEndDate (rule, value, callback) {
  344. this.$refs.ruleForm.clearValidate("contractStartDate");
  345. const start = this.ruleForm.contractStartDate;
  346. if (!value) {
  347. callback(new Error("合同结束日期不能为空"));
  348. } else if (value > start) {
  349. callback();
  350. } else {
  351. callback(new Error("合同结束日期须晚于开始日期"));
  352. }
  353. },
  354. save () {
  355. this.$refs.ruleForm.validate(valid => {
  356. if (valid) {
  357. this.pageLoading = true
  358. create(this.ruleForm)
  359. .then(response => {
  360. localStorage.setItem("tenantId", response.data);
  361. this.tenantId = response.data;
  362. this.pageLoading = false
  363. if (response.code === "MANAGEMENT_010") {
  364. this.$message({
  365. message: "公司域名重复",
  366. type: "error",
  367. showClose: true
  368. });
  369. } else if (response.code === "OPERATION_001") {
  370. this.$message({
  371. message: "用户名已存在",
  372. type: "error",
  373. showClose: true
  374. });
  375. } else if (response.code === "OPERATION_002") {
  376. this.$message({
  377. message: "用户名已存在",
  378. type: "error",
  379. showClose: true
  380. });
  381. } else if (response.code === "OPERATION_003") {
  382. this.$message({
  383. message: "公司中文名称/公司英文名称/手机号已被占用",
  384. type: "error",
  385. showClose: true
  386. });
  387. } else if (response.code === "COMPANY_001") {
  388. this.$message({
  389. message: "企业简称已经被占用",
  390. type: "error",
  391. showClose: true
  392. });
  393. } else {
  394. tenantChangeshipNumber({compId:this.ruleForm.compId,compImo:this.ruleForm.compImo})
  395. .then(response => {
  396. this.$message({
  397. message: "保存成功",
  398. type: "success",
  399. showClose: true
  400. });
  401. })
  402. this.$router.push({
  403. name: "lesseeEdit"
  404. });
  405. }
  406. })
  407. .catch(res => {
  408. this.showlist = false;
  409. this.pageLoading = false
  410. this.$message({
  411. message: "保存失败",
  412. type: "error",
  413. showClose: true
  414. });
  415. });
  416. } else {
  417. this.showlist = false;
  418. this.$message({
  419. message: "带星号的为必填项或格式填写错误",
  420. type: "error",
  421. showClose: true
  422. });
  423. return false;
  424. }
  425. });
  426. },
  427. back () {
  428. if (this.edited) {
  429. this.$confirm("租户信息尚未保存,确定要离开吗?", "提示", {
  430. type: "warning"
  431. })
  432. .then(() => {
  433. this.$router.push({
  434. name: "lessee"
  435. });
  436. })
  437. .catch(() => { });
  438. } else {
  439. this.$router.push({
  440. name: "lessee"
  441. });
  442. }
  443. },
  444. addServe () {
  445. this.save("ruleForm");
  446. },
  447. check (msg) {
  448. this.checkMsg = msg;
  449. }
  450. }
  451. };
  452. </script>
  453. <style scoped lang="scss">
  454. .form,
  455. .head2 {
  456. margin-top: 40px;
  457. }
  458. .talk {
  459. color: #666666;
  460. cursor: pointer;
  461. height: 19px;
  462. line-height: 19px;
  463. font-size: 25px;
  464. }
  465. .aaa {
  466. /deep/.el-form-item__error {
  467. display: none;
  468. }
  469. }
  470. </style>