index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677
  1. <template>
  2. <div class="siteManage-main basic-info-page">
  3. <el-form
  4. :model="ruleForm"
  5. :rules="rules"
  6. ref="formInfo"
  7. label-width="110px"
  8. class="demo-ruleForm"
  9. >
  10. <el-row style="min-width: 1100px">
  11. <el-col :span="8" :gutter="20">
  12. <div class="grid-content bg-purple">
  13. <el-form-item label="站点名称:" prop="siteName">
  14. <el-input v-model="ruleForm.siteName"></el-input>
  15. </el-form-item>
  16. <el-form-item label="站点类型:" prop="siteType">
  17. <el-input v-model="ruleForm.siteType"></el-input>
  18. </el-form-item>
  19. <el-form-item label="用户公司:" prop="userCompany">
  20. <el-input v-model="ruleForm.userCompany"></el-input>
  21. </el-form-item>
  22. <el-form-item
  23. label="投运时间:"
  24. prop="operationTime"
  25. style="margin-top: 0px"
  26. >
  27. <el-date-picker
  28. v-model="ruleForm.operationTime"
  29. style="width: 100%"
  30. type="date"
  31. placeholder="选择日期时间"
  32. ></el-date-picker>
  33. </el-form-item>
  34. <el-form-item label="服务截止:" prop="serviceDeadline">
  35. <el-date-picker
  36. v-model="ruleForm.serviceDeadline"
  37. type="date"
  38. placeholder="选择日期时间"
  39. ></el-date-picker>
  40. </el-form-item>
  41. <el-form-item label="装机容量:" prop="installedCapacity">
  42. <el-input v-model="ruleForm.installedCapacity"></el-input>
  43. </el-form-item>
  44. <el-form-item label="供电类型:" prop="powerSupplyType">
  45. <el-radio-group v-model="ruleForm.powerSupplyType">
  46. <el-radio label="1" value="1">单路</el-radio>
  47. <el-radio label="2" value="2">双路</el-radio>
  48. </el-radio-group>
  49. </el-form-item>
  50. <el-form-item label="电压等级:" prop="voltageLevel">
  51. <el-input v-model="ruleForm.voltageLevel"></el-input>
  52. </el-form-item>
  53. <el-form-item label="站点地址:" prop="siteAddress">
  54. <el-input v-model="ruleForm.siteAddress"></el-input>
  55. </el-form-item>
  56. <el-form-item label="所属区域:" prop="region">
  57. <el-radio-group v-model="ruleForm.region">
  58. <el-radio label="1">宝山</el-radio>
  59. <el-radio label="2">嘉定</el-radio>
  60. </el-radio-group>
  61. </el-form-item>
  62. <el-form-item label="所属台区:" prop="stationAreaId">
  63. <el-select v-model="ruleForm.stationAreaId" placeholder="请选择">
  64. <el-option
  65. v-for="(item, index) in platFormData"
  66. :key="index"
  67. :label="item.platformAreaName"
  68. :value="item.id"
  69. ></el-option>
  70. </el-select>
  71. </el-form-item>
  72. <el-form-item label="站点坐标:" prop="longitude">
  73. <el-input v-model="ruleForm.longitude" placeholder="请输入经度">
  74. <i
  75. :default-slot="suffix"
  76. class="el-input__icon el-icon-location-outline"
  77. ></i>
  78. </el-input>
  79. </el-form-item>
  80. <el-form-item label="" prop="latitude">
  81. <el-input v-model="ruleForm.latitude" placeholder="请输入维度">
  82. <i
  83. :default-slot="suffix"
  84. class="el-input__icon el-icon-location-outline"
  85. ></i>
  86. </el-input>
  87. </el-form-item>
  88. </div>
  89. </el-col>
  90. <el-col :span="8" :gutter="20">
  91. <!-- <el-form-item label="监察:" prop="region">
  92. <el-select v-model="ruleForm.region" placeholder="请选择">
  93. <el-option label="监察1" value="1"></el-option>
  94. <el-option label="监察2" value="2"></el-option>
  95. </el-select>
  96. </el-form-item> -->
  97. <el-form-item label="折标准煤:" prop="demolitionStandardCoal1">
  98. <el-input v-model="ruleForm.demolitionStandardCoal1"></el-input>
  99. </el-form-item>
  100. <el-form-item label="折标准煤:" prop="demolitionStandardCoal">
  101. <el-radio-group v-model="ruleForm.demolitionStandardCoal">
  102. <el-radio label="1">电力(等价)</el-radio>
  103. <el-radio label="2">电力(当量)</el-radio>
  104. </el-radio-group>
  105. <div style="opacity: 0.45">0.000404吨标准煤/千瓦时</div>
  106. </el-form-item>
  107. <el-form-item label="流变变比" prop="rheologicalChange">
  108. <el-input v-model="ruleForm.rheologicalChange"></el-input>
  109. </el-form-item>
  110. <el-form-item label="所属线路" prop="routeId">
  111. <el-select v-model="ruleForm.routeId" placeholder="请选择">
  112. <el-option
  113. v-for="(item, index) in routeDropData"
  114. :key="index"
  115. :label="item.routeName"
  116. :value="item.id"
  117. ></el-option>
  118. </el-select>
  119. </el-form-item>
  120. <a class="goArchive">现场档案</a>
  121. <div class="blockTitle mt-60 mb-20">动态属性</div>
  122. <el-form-item label="故障动态:" prop="faultStatus">
  123. <el-select v-model="ruleForm.faultStatus" placeholder="请选择">
  124. <el-option
  125. v-for="(item, index) in dropData"
  126. :key="index"
  127. :label="item.variableName"
  128. :value="item.variableCoding"
  129. ></el-option>
  130. </el-select>
  131. </el-form-item>
  132. <el-form-item label="实时负荷:" prop="realTimeLoad">
  133. <el-select v-model="ruleForm.realTimeLoad" placeholder="请选择">
  134. <el-option
  135. v-for="(item, index) in dropData2"
  136. :key="index"
  137. :label="item.variableName"
  138. :value="item.variableCoding"
  139. ></el-option>
  140. </el-select>
  141. </el-form-item>
  142. <el-form-item label="总用电量:" prop="totalElectricity">
  143. <el-select v-model="ruleForm.totalElectricity" placeholder="请选择">
  144. <el-option
  145. v-for="(item, index) in dropData2"
  146. :key="index"
  147. :label="item.variableName"
  148. :value="item.variableCoding"
  149. ></el-option>
  150. </el-select>
  151. </el-form-item>
  152. <el-form-item label="功率因数:" prop="powerFactor">
  153. <el-select v-model="ruleForm.powerFactor" placeholder="请选择">
  154. <el-option
  155. v-for="(item, index) in dropData2"
  156. :key="index"
  157. :label="item.variableName"
  158. :value="item.variableCoding"
  159. ></el-option>
  160. </el-select>
  161. </el-form-item>
  162. </el-col>
  163. <el-col :span="8" :gutter="20">
  164. <div class="grid-content bg-purple">
  165. <div class="grid-content bg-purple-light">
  166. <!-- 站点照片start -->
  167. <div class="blockTitle mb-20">站点照片</div>
  168. <!-- <img v-if="ruleForm.value.sitePictureOne" :src="ruleForm.value.sitePictureOne" alt=""> -->
  169. <el-form-item label="选择文件:" prop="delivery">
  170. <el-upload
  171. :action="uploadUrl"
  172. :on-success="handleUpAvatar"
  173. :on-remove="handleRemove"
  174. :show-file-list="true"
  175. list-type="picture-card"
  176. :limit="3"
  177. :file-list="fileListImages"
  178. :on-preview="handlePictureCardPreview"
  179. :headers="{ accessToken: [accessToken] }"
  180. >
  181. <i class="el-icon-plus"></i>
  182. </el-upload>
  183. <el-dialog v-model="dialogVisible" width="400px">
  184. <img style="width: 100%" :src="dialogImageUrl" alt="" />
  185. </el-dialog>
  186. </el-form-item>
  187. <!-- 站点照片end -->
  188. <el-form-item label="联系人:" prop="userName">
  189. <el-input v-model="ruleForm.userName"></el-input>
  190. </el-form-item>
  191. <el-form-item label="联系方式:" prop="phone">
  192. <el-input v-model="ruleForm.phone"></el-input>
  193. </el-form-item>
  194. <el-form-item label="联系人2:" prop="spareUserName">
  195. <el-input v-model="ruleForm.spareUserName"></el-input>
  196. </el-form-item>
  197. <el-form-item label="联系方式2:" prop="sparePhone">
  198. <el-input v-model="ruleForm.sparePhone"></el-input>
  199. </el-form-item>
  200. </div>
  201. <br />
  202. <el-form-item>
  203. <el-button type="primary" @click="submitForm('formInfo')">
  204. 保存
  205. </el-button>
  206. <el-button @click="resetForm('formInfo')">取消</el-button>
  207. </el-form-item>
  208. </div>
  209. </el-col>
  210. </el-row>
  211. </el-form>
  212. </div>
  213. </template>
  214. <script>
  215. import { defineComponent, ref, onMounted, reactive, toRefs, watch } from 'vue'
  216. import * as api from '@/api/siteManage/basicInfo'
  217. import { ElMessage } from 'element-plus'
  218. import { useStore } from 'vuex'
  219. import { parseTime, validatorPhone } from '@/utils'
  220. export default defineComponent({
  221. name: 'BasicInfo',
  222. props: {
  223. siteId: Number,
  224. siteName: String,
  225. groupingId:Number
  226. },
  227. setup(props,context) {
  228. const fileImages = ref(window.PLATFROM_CONFIG.images)
  229. const store = useStore()
  230. const routeDropData = ref([])
  231. const formInfo = ref(null)
  232. const formStatus = ref('')
  233. const dialogImageUrl = ref('')
  234. const dialogVisible = ref(false)
  235. const disabled = ref(false)
  236. const accessToken = ref(store.state.user.accessToken)
  237. const dropData = ref([])
  238. const fileListImages = ref(['https://qhome.usky.cn/file/chart3-1.png'])
  239. const dropData2 = ref([])
  240. const platFormData = ref([])
  241. const ruleForm = ref({})
  242. function handlePictureCardPreview(file) {
  243. console.log('file')
  244. console.log(file)
  245. dialogImageUrl.value = file.url
  246. dialogVisible.value = true
  247. }
  248. const dataSet = reactive({
  249. uploadUrl:
  250. window.PLATFROM_CONFIG.baseUrl +
  251. '/patrolInspectionDevice/pictureUpload',
  252. // uploadUrl:'https://wx.ewoogi.com/USKYOF/USKYOF.php/Home/MonitoringReporting/setUpload',
  253. fileList: [],
  254. })
  255. //上传成功的回调
  256. function handleUpAvatar(res) {
  257. console.log('res')
  258. console.log(res)
  259. dataSet.fileList.push(res.data)
  260. console.log(dataSet.fileList)
  261. }
  262. //删除照片
  263. function handleRemove(res) {
  264. // console.log('删除')
  265. // console.log(res.name)
  266. Array.prototype.indexOf = function (val) {
  267. for (var i = 0; i < this.length; i++) {
  268. if (this[i] == val) return i
  269. }
  270. return -1
  271. }
  272. Array.prototype.remove = function (val) {
  273. var index = this.indexOf(val)
  274. if (index > -1) {
  275. this.splice(index, 1)
  276. }
  277. }
  278. dataSet.fileList.remove(res.name)
  279. console.log(dataSet.fileList)
  280. }
  281. function resetForm() {
  282. formInfo.value.resetFields()
  283. }
  284. // 动态属性下拉请求
  285. function dynamicPropertiesDroplist(dataArea) {
  286. api.dynamicPropertiesDroplist({ dataArea: dataArea }).then((requset) => {
  287. if (requset.status === 'SUCCESS') {
  288. if (dataArea == 1) {
  289. //模拟量
  290. dropData2.value = requset.data
  291. } else {
  292. //状态量
  293. dropData.value = requset.data
  294. }
  295. } else {
  296. ElMessage.error(requset.msg)
  297. }
  298. })
  299. }
  300. //台区下拉请求
  301. function platformList() {
  302. api.platformList({ size: 0 }).then((requset) => {
  303. if (requset.status === 'SUCCESS') {
  304. platFormData.value = requset.data.records
  305. } else {
  306. ElMessage.error(requset.msg)
  307. }
  308. })
  309. }
  310. //所属线路下拉
  311. function routeDroplist() {
  312. api.routeDroplist().then((requset) => {
  313. if (requset.status === 'SUCCESS') {
  314. routeDropData.value = requset.data
  315. console.log('routeDropData.value')
  316. console.log(routeDropData.value)
  317. } else {
  318. ElMessage.error(requset.msg)
  319. }
  320. })
  321. }
  322. //站点详情请求
  323. function getSite() {
  324. console.log('props.siteId')
  325. console.log(props.siteId)
  326. console.log('props.siteName')
  327. console.log(props.siteName)
  328. fileListImages.value = []
  329. api.getSite({ id: props.siteId }).then((requset) => {
  330. if (requset.status === 'SUCCESS') {
  331. console.log(requset.data[0])
  332. ruleForm.value = requset.data[0]
  333. ruleForm.value.region
  334. ? (ruleForm.value.region = requset.data[0].region.toString())
  335. : ''
  336. ruleForm.value.powerSupplyType = ruleForm.value.powerSupplyType
  337. ? requset.data[0].powerSupplyType.toString()
  338. : ''
  339. ruleForm.value.demolitionStandardCoal
  340. ? (ruleForm.value.demolitionStandardCoal =
  341. requset.data[0].demolitionStandardCoal.toString())
  342. : ''
  343. if (requset.data[0].sitePictureOne) {
  344. fileListImages.value.push({
  345. name: '1',
  346. url: fileImages.value + requset.data[0].sitePictureOne,
  347. })
  348. }
  349. if (requset.data[0].sitePictureTwo) {
  350. fileListImages.value.push({
  351. name: '2',
  352. url: fileImages.value + requset.data[0].sitePictureTwo,
  353. })
  354. }
  355. if (requset.data[0].sitePictureThree) {
  356. fileListImages.value.push({
  357. name: '3',
  358. url: fileImages.value + requset.data[0].sitePictureThree,
  359. })
  360. }
  361. if(props.siteName){
  362. alert(1)
  363. ruleForm.value.siteName = props.siteName
  364. }
  365. console.log('fileListImages.value')
  366. console.log(fileListImages.value)
  367. } else {
  368. ElMessage.error(requset.msg)
  369. }
  370. })
  371. }
  372. //表单提交
  373. function submitForm() {
  374. ruleForm.value.sitePictureOne = dataSet.fileList[0]
  375. ruleForm.value.sitePictureTwo = dataSet.fileList[1]
  376. ruleForm.value.sitePictureThree = dataSet.fileList[2]
  377. ruleForm.value.operationTime
  378. ? (ruleForm.value.operationTime = parseTime(
  379. ruleForm.value.operationTime
  380. ).substring(0, 10))
  381. : ''
  382. ruleForm.value.serviceDeadline
  383. ? (ruleForm.value.serviceDeadline = parseTime(
  384. ruleForm.value.serviceDeadline
  385. ).substring(0, 10))
  386. : ''
  387. formInfo.value.validate((valid) => {
  388. if (valid) {
  389. store
  390. // store.commit('TimeAll_function')
  391. // const time = store.state.Time_Data
  392. // ruleForm.value.operationTime = time[0]
  393. // ruleForm.value.serviceDeadline = time[1]
  394. var params = {
  395. site: {
  396. id: props.siteId,
  397. siteName: ruleForm.value.siteName,
  398. installedCapacity: ruleForm.value.installedCapacity,
  399. siteAddress: ruleForm.value.siteAddress,
  400. region: ruleForm.value.region,
  401. stationAreaId: ruleForm.value.stationAreaId,
  402. longitude: ruleForm.value.longitude,
  403. latitude: ruleForm.value.latitude,
  404. userName: ruleForm.value.userName,
  405. phone: ruleForm.value.phone,
  406. spareUserName: ruleForm.value.spareUserName,
  407. sparePhone: ruleForm.value.sparePhone,
  408. rheologicalChange: ruleForm.value.rheologicalChange,
  409. routeId: ruleForm.value.routeId,
  410. groupingId: props.siteId,
  411. },
  412. siteDynamicProperties: {
  413. id: ruleForm.value.siteDynamicPropertiesId,
  414. siteType: ruleForm.value.siteType,
  415. userCompany: ruleForm.value.userCompany,
  416. operationTime: ruleForm.value.operationTime,
  417. serviceDeadline: ruleForm.value.serviceDeadline,
  418. powerSupplyType: ruleForm.value.powerSupplyType,
  419. voltageLevel: ruleForm.value.voltageLevel,
  420. demolitionStandardCoal: ruleForm.value.demolitionStandardCoal,
  421. demolitionStandardCoal1: ruleForm.value.demolitionStandardCoal1,
  422. faultStatus: ruleForm.value.faultStatus,
  423. realTimeLoad: ruleForm.value.realTimeLoad,
  424. totalElectricity: ruleForm.value.totalElectricity,
  425. powerFactor: ruleForm.value.powerFactor,
  426. sitePictureOne: ruleForm.value.sitePictureOne,
  427. sitePictureTwo: ruleForm.value.sitePictureTwo,
  428. sitePictureThree: ruleForm.value.sitePictureThree,
  429. },
  430. id: formStatus.value == '修改' ? 1 : 0,
  431. }
  432. if(formStatus.value == '新增'){
  433. alert('新增')
  434. alert(props.groupingId.value)
  435. params.groupingId=props.groupingId.value
  436. return
  437. }
  438. api.siteAdd(params).then((requset) => {
  439. if (requset.status === 'SUCCESS') {
  440. ElMessage.success({
  441. message: '保存成功',
  442. type: 'success',
  443. })
  444. context.emit('func')
  445. } else {
  446. ElMessage.error(requset.msg)
  447. }
  448. })
  449. } else {
  450. console.log('error submit!!')
  451. return false
  452. }
  453. })
  454. }
  455. //监听变化
  456. watch(
  457. () => props.siteId,
  458. (newVal) => {
  459. console.log('newVal')
  460. console.log(newVal)
  461. getSite()
  462. }
  463. )
  464. onMounted(() => {
  465. // alert(props.groupingId.value)
  466. if(props.siteName&&(!props.siteId)){
  467. alert('新增站点不带模板')
  468. ruleForm.value.siteName = props.siteName
  469. formStatus.value = '新增'
  470. }
  471. if(props.siteName&&props.siteId){
  472. alert('新增站点带模板')
  473. formStatus.value = '新增'
  474. getSite()
  475. }
  476. if(props.siteId&&(!props.siteName)){
  477. alert('修改站点')
  478. formStatus.value = '修改'
  479. getSite()
  480. }
  481. platformList()
  482. routeDroplist()
  483. dynamicPropertiesDroplist(2)
  484. dynamicPropertiesDroplist(1)
  485. })
  486. return {
  487. ...toRefs(dataSet),
  488. formInfo,
  489. dialogImageUrl,
  490. dialogVisible,
  491. disabled,
  492. dropData,
  493. dropData2,
  494. platFormData,
  495. fileListImages,
  496. accessToken,
  497. ruleForm,
  498. rules: {
  499. siteName: [
  500. { required: true, message: '请输入站点名称', trigger: 'blur' },
  501. {
  502. min: 1,
  503. max: 11,
  504. message: '长度在 1 到 11 个字符',
  505. trigger: 'blur',
  506. },
  507. ],
  508. siteType: [
  509. { required: true, message: '请输入站点类型', trigger: 'blur' },
  510. ],
  511. userCompany: [
  512. { required: true, message: '请输入用户公司', trigger: 'blur' },
  513. {
  514. min: 1,
  515. max: 11,
  516. message: '长度在 1 到 11 个字符',
  517. trigger: 'blur',
  518. },
  519. ],
  520. operationTime: [
  521. { required: true, message: '请选择运投时间', trigger: 'change' },
  522. ],
  523. serviceDeadline: [
  524. { required: true, message: '请选择服务截止时间', trigger: 'change' },
  525. ],
  526. installedCapacity: [
  527. { required: true, message: '请输入装机容量', trigger: 'blur' },
  528. {
  529. min: 1,
  530. max: 20,
  531. message: '长度在 1 到 20 个字符',
  532. trigger: 'blur',
  533. },
  534. ],
  535. voltageLevel: [
  536. { required: true, message: '请输入电压等级', trigger: 'blur' },
  537. ],
  538. siteAddress: [
  539. { required: true, message: '请输入站点地址', trigger: 'blur' },
  540. {
  541. min: 1,
  542. max: 20,
  543. message: '长度在 1 到 20 个字符',
  544. trigger: 'blur',
  545. },
  546. ],
  547. stationAreaId: [
  548. { required: true, message: '请选择所属台区', trigger: 'change' },
  549. ],
  550. longitude: [{ required: true, message: '请输入经度', trigger: 'blur' }],
  551. latitude: [{ required: true, message: '请输入纬度', trigger: 'blur' }],
  552. demolitionStandardCoal1: [
  553. { required: true, message: '请输入折煤标准', trigger: 'blur' },
  554. ],
  555. routeId: [
  556. { required: true, message: '选择所属线路', trigger: 'change' },
  557. ],
  558. rheologicalChange: [
  559. { required: true, message: '请输入流变变比', trigger: 'blur' },
  560. ],
  561. userName: [
  562. { required: true, message: '请输入联系人1', trigger: 'blur' },
  563. {
  564. min: 1,
  565. max: 11,
  566. message: '长度在 1 到 11 个字符',
  567. trigger: 'blur',
  568. },
  569. ],
  570. phone: [
  571. {
  572. required: true,
  573. message: '请输入联系方式1',
  574. trigger: 'blur',
  575. },
  576. {
  577. validator: validatorPhone,
  578. message: '输入的电话号码不正确',
  579. trigger: 'blur',
  580. },
  581. ],
  582. spareUserName: [
  583. { required: true, message: '请输入联系人2', trigger: 'blur' },
  584. {
  585. min: 1,
  586. max: 11,
  587. message: '长度在 1 到 11 个字符',
  588. trigger: 'blur',
  589. },
  590. ],
  591. sparePhone: [
  592. { required: true, message: '请输入联系方式2', trigger: 'blur' },
  593. {
  594. min: 1,
  595. max: 11,
  596. message: '长度在 1 到 11 个字符',
  597. trigger: 'blur',
  598. },
  599. ],
  600. },
  601. handleRemove,
  602. handlePictureCardPreview,
  603. submitForm,
  604. routeDropData,
  605. resetForm,
  606. handleUpAvatar,
  607. fileImages,
  608. getSite
  609. }
  610. },
  611. })
  612. </script>
  613. <style lang="scss">
  614. .basic-info-page {
  615. .el-date-editor.el-input,
  616. .el-date-editor.el-input__inner {
  617. width: 100% !important;
  618. }
  619. // .el-icon-zoom-in {
  620. // display: none;
  621. // }
  622. // .el-upload-list--picture-card .el-upload-list__item-actions span + span {
  623. // margin-left: 0;
  624. // }
  625. }
  626. </style>