dialogComponent.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. <template>
  2. <div class="systemCard">
  3. <el-dialog
  4. :title="dialogTitle"
  5. v-model="showDialog"
  6. @open="open()"
  7. @close="closeDialog(0)"
  8. >
  9. <el-card class="box-card grid-content">
  10. <el-tabs
  11. v-model="activeName"
  12. class="demo-tabs"
  13. @tab-click="handleClick"
  14. >
  15. <!-- 常规配置start -->
  16. <el-tab-pane label="常规配置" name="first">
  17. <el-form
  18. ref="formInfo"
  19. :model="form"
  20. class="demo-form-inline"
  21. label-width="150px"
  22. :rules="rules"
  23. >
  24. <el-form-item label="主页标题:" prop="middleTitle">
  25. <el-input v-model="form.middleTitle"></el-input>
  26. </el-form-item>
  27. <el-form-item label="主页logo:" prop="homeLogo">
  28. <el-input v-model="form.homeLogo"></el-input>
  29. <el-upload
  30. ref="upload"
  31. :action="uploadUrl"
  32. :on-success="handleUpAvatar"
  33. :on-remove="handleRemove"
  34. list-type="picture"
  35. :limit="1"
  36. :on-preview="handlePictureCardPreview"
  37. :headers="{ accessToken: [accessToken] }"
  38. :on-exceed="overLength"
  39. >
  40. <el-button type="primary" style="margin-top: 10px">
  41. 上传
  42. </el-button>
  43. <template #tip>
  44. <div class="el-upload__tip">图片尺寸:1920*1080</div>
  45. </template>
  46. </el-upload>
  47. </el-form-item>
  48. <el-form-item label="首页请求地址:" prop="homePageUrl">
  49. <el-input v-model="form.homePageUrl"></el-input>
  50. <!-- <el-select v-model="form.homePageUrl" placeholder="请选择">
  51. <el-option label="地址1" :value="1"></el-option>
  52. <el-option label="地址2" :value="2"></el-option>
  53. </el-select> -->
  54. </el-form-item>
  55. <el-form-item label="主页导航栏:" prop="homeLayout">
  56. <el-radio-group v-model="form.homeLayout">
  57. <el-radio :label="1" value="1">顶部导航栏</el-radio>
  58. <el-radio :label="2" value="2">左侧导航栏</el-radio>
  59. </el-radio-group>
  60. </el-form-item>
  61. <br />
  62. <div style="text-align: right">
  63. <el-button @click="closeDialog(0)">取消</el-button>
  64. <el-button type="primary" @click="submitForm()">保存</el-button>
  65. </div>
  66. </el-form>
  67. </el-tab-pane>
  68. <!-- 常规配置end -->
  69. <!-- 登录页配置start -->
  70. <el-tab-pane label="登录页配置" name="second">
  71. <el-form
  72. ref="formInfo2"
  73. :model="form"
  74. class="demo-form-inline"
  75. label-width="150px"
  76. :rules="rules"
  77. >
  78. <el-form-item label="登录页标题:" prop="tenantName">
  79. <el-input v-model="form.tenantName"></el-input>
  80. </el-form-item>
  81. <el-form-item label="登录页logo:" prop="tenantManager">
  82. <el-input v-model="form.tenantManager"></el-input>
  83. </el-form-item>
  84. <el-form-item label="登录页背景:" prop="tenantManager">
  85. <el-input v-model="form.tenantManager"></el-input>
  86. </el-form-item>
  87. <el-form-item label="登录页底部名称:" prop="tenantName">
  88. <el-input v-model="form.tenantName"></el-input>
  89. </el-form-item>
  90. <el-form-item label="标签页图标:" prop="tenantManager">
  91. <el-input v-model="form.tenantManager"></el-input>
  92. </el-form-item>
  93. <br />
  94. <div style="text-align: right">
  95. <el-button @click="closeDialog(0)">取消</el-button>
  96. <el-button type="primary" @click="submitForm()">保存</el-button>
  97. </div>
  98. </el-form>
  99. </el-tab-pane>
  100. <!-- 修登录页配置end -->
  101. <!-- 中间页配置start -->
  102. <el-tab-pane label="中间页配置" name="third">
  103. <el-form
  104. ref="formInfo3"
  105. :model="form"
  106. class="demo-form-inline"
  107. label-width="150px"
  108. :rules="rules"
  109. >
  110. <el-form-item label="是否开启中间页:" prop="tenantName">
  111. <el-switch v-model="value" size="large" />
  112. </el-form-item>
  113. <el-form-item label="中间页logo:" prop="tenantManager">
  114. <el-input v-model="form.tenantManager"></el-input>
  115. </el-form-item>
  116. <el-form-item label="中间页背景:" prop="tenantManager">
  117. <el-input v-model="form.tenantManager"></el-input>
  118. </el-form-item>
  119. <el-form-item label="中间页底部名称:" prop="tenantName">
  120. <el-input v-model="form.tenantName"></el-input>
  121. </el-form-item>
  122. <br />
  123. <div style="text-align: right">
  124. <el-button @click="closeDialog(0)">取消</el-button>
  125. <el-button type="primary" @click="submitForm()">保存</el-button>
  126. </div>
  127. </el-form>
  128. </el-tab-pane>
  129. <!-- 中间页配置end -->
  130. <!-- 其他配置start -->
  131. <el-tab-pane label="其他配置" name="forth">
  132. 其他配置设计开发中...
  133. </el-tab-pane>
  134. <!-- 其他配置end -->
  135. </el-tabs>
  136. </el-card>
  137. </el-dialog>
  138. </div>
  139. </template>
  140. <script>
  141. import { useStore } from 'vuex'
  142. import {
  143. defineComponent,
  144. ref,
  145. watchEffect,
  146. onMounted,
  147. reactive,
  148. toRefs,
  149. } from 'vue'
  150. import * as api from '@/api/tenantManage/systemConfig.js'
  151. import { ElMessage } from 'element-plus'
  152. // import { parseTime } from '@/utils'
  153. // import { validatorPhone, parseTime, isEmail } from '@/utils'
  154. export default defineComponent({
  155. name: 'DialogComponent',
  156. emits: ['closeDialog'],
  157. props: {
  158. show_Dialog: Boolean,
  159. configStatus: Boolean,
  160. dialogTitle: String,
  161. itemInfo: {
  162. type: Object,
  163. default: function () {
  164. return {}
  165. },
  166. },
  167. },
  168. setup(props, { emit }) {
  169. const store = useStore()
  170. const beginTime = ref('')
  171. const showDialog = ref(false)
  172. const form = ref({})
  173. const formInfo = ref(null)
  174. const value = ref(true)
  175. const accessToken = ref(store.state.user.accessToken)
  176. const upload = ref(null);
  177. const activeName = ref('first')
  178. const getPlatformBoxList = ref([])
  179. const dataSet = reactive({
  180. uploadUrl:
  181. window.PLATFROM_CONFIG.baseUrl +
  182. '/patrolInspectionDevice/pictureUpload',
  183. fileList: [],
  184. })
  185. const roleValid = (rule, value, callback) => {
  186. rule
  187. if (value.length === 0) {
  188. callback(new Error('角色不能为空'))
  189. } else {
  190. callback()
  191. }
  192. }
  193. const overLength = () => {
  194. ElMessage.warning('只能上传一张')
  195. }
  196. // //上传成功的回调
  197. function handleUpAvatar(res) {
  198. console.log('res')
  199. console.log(res.data)
  200. form.value.homeLogo = window.PLATFROM_CONFIG.baseUrl +res.data
  201. console.log(form.value.homeLogo)
  202. }
  203. function handleRemove(){
  204. form.value.homeLogo = ''
  205. }
  206. // 保存操作
  207. const submitForm = () => {
  208. formInfo.value.validate((valid) => {
  209. if (valid) {
  210. form.value.tenantId = props.itemInfo.tenantId
  211. if (props.configStatus) {
  212. alert('已配置修改提交')
  213. api.updaMiddleConfig(form.value).then((requset) => {
  214. if (requset.status === 'SUCCESS') {
  215. ElMessage.success({
  216. message: '修改配置成功',
  217. type: 'success',
  218. })
  219. closeDialog()
  220. } else {
  221. ElMessage.error(requset.msg)
  222. }
  223. })
  224. } else {
  225. alert('未配置新增提交')
  226. api.addMiddleConfig(form.value).then((requset) => {
  227. if (requset.status === 'SUCCESS') {
  228. ElMessage.success({
  229. message: '新增配置成功',
  230. type: 'success',
  231. })
  232. closeDialog()
  233. } else {
  234. ElMessage.error(requset.msg)
  235. }
  236. })
  237. }
  238. } else {
  239. console.log('error submit!!')
  240. return false
  241. }
  242. })
  243. }
  244. const open = () => {
  245. setTimeout(function () {
  246. form.value = props.itemInfo
  247. console.log('子组件中form.value')
  248. console.log(form.value)
  249. }, 500)
  250. optionselect()
  251. // alert(props.configStatus)
  252. }
  253. // 关闭弹框
  254. const closeDialog = (flag) => {
  255. resetForm()
  256. upload.value.clearFiles();
  257. showDialog.value = false
  258. emit('closeDialog', flag)
  259. }
  260. function resetForm() {
  261. formInfo.value.resetFields()
  262. }
  263. //角色下拉请求
  264. function optionselect() {
  265. api.getPlatformBoxList().then((requset) => {
  266. if (requset.status === 'SUCCESS') {
  267. getPlatformBoxList.value = requset.data
  268. } else {
  269. ElMessage.error(requset.msg)
  270. }
  271. })
  272. }
  273. watchEffect((fn, options) => {
  274. fn, options
  275. showDialog.value = props.show_Dialog
  276. })
  277. //禁止选择以前的时间
  278. const pickerEndDate = (time) => {
  279. const timeRange = 1 * 24 * 60 * 60 * 1000
  280. return time.getTime() <= Date.now() - timeRange * 1
  281. }
  282. onMounted(() => {})
  283. return {
  284. ...toRefs(dataSet),
  285. pickerEndDate,
  286. roleValid,
  287. submitForm,
  288. closeDialog,
  289. open,
  290. store,
  291. beginTime,
  292. showDialog,
  293. checked: true,
  294. form,
  295. formInfo,
  296. getPlatformBoxList,
  297. activeName,
  298. value,
  299. overLength,
  300. handleUpAvatar,
  301. handleRemove,
  302. accessToken,
  303. upload,
  304. rules: {
  305. middleTitle: [
  306. { required: true, message: '请输入主页标题', trigger: 'blur' },
  307. {
  308. min: 1,
  309. max: 30,
  310. message: '长度在 1 到 30个字符',
  311. trigger: 'blur',
  312. },
  313. ],
  314. homeLogo: [
  315. { required: true, message: '请输入主页logo', trigger: 'blur' },
  316. ],
  317. homePageUrl: [
  318. { required: true, message: '请输入主页请求地址', trigger: 'blur' },
  319. ],
  320. homeLayout: [
  321. { required: true, message: '请选则主页导航布局', trigger: 'change' },
  322. ],
  323. },
  324. }
  325. },
  326. })
  327. </script>
  328. <style scoped lang="scss">
  329. .el-card {
  330. --el-card-border-color: var(--el-border-color-light, #fff);
  331. border: 0px solid red;
  332. }
  333. .el-card.is-always-shadow {
  334. box-shadow: none;
  335. }
  336. ::v-deep .el-card__body {
  337. padding: 0 !important;
  338. }
  339. ::v-deep .el-tabs__header {
  340. margin-bottom: 30px;
  341. }
  342. .el-input,
  343. .el-select,
  344. .el-date-editor.el-input,
  345. .el-date-editor.el-input__inner {
  346. width: 240px;
  347. }
  348. // .el-form-item {
  349. // margin: 0 0 20px !important;
  350. // }
  351. // label样式
  352. .el-form-item__label {
  353. width: 120px !important;
  354. }
  355. .el-form-item__content {
  356. margin-left: 100px;
  357. }
  358. .demo-form-inline .el-form-item:not(.user-layout .el-form-item) {
  359. // margin: 0 auto 20px 55px;
  360. }
  361. .el-upload__tip {
  362. margin-left: 10px;
  363. display: inline-block;
  364. }
  365. ::v-deep .el-upload-list__item{
  366. width:100px!important
  367. }
  368. </style>
  369. <style>
  370. .systemCard .el-dialog__body {
  371. padding-top: 10px !important;
  372. }
  373. </style>