d18ca1e48866304344bcfe2a83f6b6c7467ecef1.svn-base 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. <template>
  2. <div>
  3. <el-container>
  4. <!-- <el-aside id="dxdcAside" width="300px">
  5. <provTreeList
  6. rootCode=""
  7. style="max-height:calc(100vh - 100px)"
  8. @provTreeSelectChange="provTreeSelectChangeHandler"
  9. ></provTreeList>
  10. </el-aside> -->
  11. <el-container>
  12. <el-header id="dcdxHeader">
  13. <el-form :inline="true" class="demo-form-inline" size="mini">
  14. <el-form-item label="会议室号">
  15. <el-input style="width:120px;" v-model="searchObj.meetingNumber" clearable placeholder="输入名称"></el-input>
  16. </el-form-item>
  17. <el-form-item>
  18. <el-button type="primary" @click="onSubmit">查询</el-button>
  19. <el-button type="primary" @click="toAddRoom('添加')" v-if="ownPriv('manage')">添加</el-button>
  20. </el-form-item>
  21. </el-form>
  22. </el-header>
  23. <el-main id="dxryListMain" style="padding:5px 20px;">
  24. <el-table border stripe :data="roomList" tooltip-effect="dark" style="width: 100%" :height="tableHeight">
  25. <el-table-column align="center" type="index" label="序号" min-width="45">
  26. <template slot-scope="scope">
  27. {{ (pageIndex - 1) * pageSize + (scope.$index + 1) }}
  28. </template>
  29. </el-table-column>
  30. <el-table-column align="center" show-overflow-tooltip prop="meetingName" label="会议室名称" min-width="100"></el-table-column>
  31. <el-table-column align="center" show-overflow-tooltip prop="meetingNumber" label="会议号" min-width="120"></el-table-column>
  32. <el-table-column align="center" show-overflow-tooltip prop="usOrgNm" label="分配单位" min-width="100"></el-table-column>
  33. <el-table-column align="center" show-overflow-tooltip prop="requirePassword" label="是否需要密码" min-width="110">
  34. <template slot-scope="scope">
  35. <span>{{scope.row.requirePassword | yesOrNo}}</span>
  36. </template>
  37. </el-table-column>
  38. <el-table-column align="center" show-overflow-tooltip prop="inPassword" label="会议室密码" min-width="100"></el-table-column>
  39. <el-table-column align="center" show-overflow-tooltip prop="controlPassword" label="主持会议密码" min-width="110"></el-table-column>
  40. <el-table-column align="center" show-overflow-tooltip prop="maxParticipant" label="最大参加人数" min-width="110"></el-table-column>
  41. <el-table-column align="center" show-overflow-tooltip prop="autoRecord" label="是否自动录制" min-width="110">
  42. <template slot-scope="scope">
  43. <span>{{scope.row.autoRecord | yesOrNo}}</span>
  44. </template>
  45. </el-table-column>
  46. <el-table-column align="center" show-overflow-tooltip prop="autoMute" label="是否静音" min-width="100">
  47. <template slot-scope="scope">
  48. <span>{{scope.row.autoMute | autoMute}}</span>
  49. </template>
  50. </el-table-column>
  51. <el-table-column align="center" show-overflow-tooltip prop="smartMuteperson" label="智能静音人数" min-width="110"></el-table-column>
  52. <el-table-column align="center" show-overflow-tooltip prop="startTime" label="开始时间" min-width="150"></el-table-column>
  53. <el-table-column align="center" show-overflow-tooltip prop="endTime" label="结束时间" min-width="150"></el-table-column>
  54. <el-table-column align="center" show-overflow-tooltip prop="intm" label="创建时间" min-width="150"></el-table-column>
  55. <el-table-column align="center" show-overflow-tooltip label="操作" v-if="ownPriv('manage')" min-width="160" fixed="right">
  56. <template slot-scope="scope">
  57. <el-button type="success" plain @click="toAddRoom('编辑',scope.row)" >编辑</el-button>
  58. <el-button type="danger" plain @click="deleteRoom(scope.row)" >删除</el-button>
  59. </template>
  60. </el-table-column>
  61. </el-table>
  62. </el-main>
  63. <el-footer id="dxdcFooter">
  64. <el-pagination background @current-change="handleCurrentChange" @size-change="handleSizeChange" :pager-count="5" :current-page.sync="pageIndex"
  65. :page-size="pageSize" :page-sizes="[10, 20, 30, 40, 50, 100]"
  66. layout="sizes, total, prev, pager, next" :total="total"></el-pagination>
  67. </el-footer>
  68. </el-container>
  69. <!-- 添加/编辑会议室弹窗 -->
  70. <el-dialog :title="curOperate+'会议室'" :visible.sync="dialogFormVisible">
  71. <el-form :model="addObj" :rules="rules" ref="ruleForm" :label-width="formLabelWidth">
  72. <p style="margin-top:10px;margin-bottom: 10px">
  73. <i class="el-icon-caret-right"></i>
  74. <span style="width:120px;padding-left: 8px;color: red">必填</span>
  75. <span class="hrs"></span>
  76. </p>
  77. <el-form-item label="会议室名称" prop="meetingName">
  78. <el-input v-model="addObj.meetingName" autocomplete="off"></el-input>
  79. </el-form-item>
  80. <el-form-item label="会议号" prop="meetingNumber">
  81. <el-input v-model="addObj.meetingNumber" placeholder="选填" autocomplete="off"></el-input>
  82. </el-form-item>
  83. <el-form-item label="是否需要密码" prop="requirePassword">
  84. <el-select v-model="addObj.requirePassword" placeholder="请选择">
  85. <el-option label="是" value="1"></el-option>
  86. <el-option label="否" value="0"></el-option>
  87. </el-select>
  88. </el-form-item>
  89. <el-form-item label="会议室密码" prop="inPassword" v-if="addObj.requirePassword == '1'">
  90. <el-input v-model="addObj.inPassword" type="password" autocomplete="off"></el-input>
  91. </el-form-item>
  92. <el-form-item label="主持会议密码" prop="controlPassword">
  93. <el-input v-model="addObj.controlPassword" type="password" autocomplete="off"></el-input>
  94. </el-form-item>
  95. <el-form-item label="最大参加人数" prop="maxParticipant">
  96. <el-input v-model="addObj.maxParticipant" autocomplete="off"></el-input>
  97. </el-form-item>
  98. <el-form-item label="是否静音" prop="autoMute">
  99. <el-select v-model="addObj.autoMute" placeholder="请选择">
  100. <el-option label="智能静音" value="0"></el-option>
  101. <el-option label="全部静音" value="1"></el-option>
  102. <el-option label="不静音" value="2"></el-option>
  103. </el-select>
  104. </el-form-item>
  105. <el-form-item label="智能静音人数" prop="smartMuteperson" v-if="addObj.autoMute == '0'">
  106. <el-input v-model="addObj.smartMuteperson" autocomplete="off"></el-input>
  107. </el-form-item>
  108. <el-form-item label="分配单位" prop="orgNm">
  109. <el-input v-model="orgNm" autocomplete="off" placeholder="请选择机构" readonly></el-input>
  110. <provTreeList
  111. rootCode=""
  112. style="max-height:200px"
  113. @provTreeSelectChange="selectJigouCode"
  114. ></provTreeList>
  115. </el-form-item>
  116. <el-form-item label="开始时间" prop="startTime">
  117. <el-date-picker
  118. v-model="addObj.startTime"
  119. type="datetime"
  120. placeholder="选择日期时间"
  121. value-format="yyyy-MM-dd HH:mm:ss"
  122. :picker-options="pickerOptions">
  123. </el-date-picker>
  124. </el-form-item>
  125. <el-form-item label="结束时间" prop="endTime">
  126. <el-date-picker
  127. v-model="addObj.endTime"
  128. type="datetime"
  129. placeholder="选择日期时间"
  130. value-format="yyyy-MM-dd HH:mm:ss"
  131. :picker-options="pickerOptions">
  132. </el-date-picker>
  133. </el-form-item>
  134. <p style="margin-top:10px;margin-bottom: 10px">
  135. <i class="el-icon-caret-right"></i>
  136. <span style="width:120px;padding-left: 8px;color: #37c448">选填</span>
  137. <span class="hrs"></span>
  138. </p>
  139. <el-form-item label="是否自动录制" prop="autoRecord">
  140. <el-select v-model="addObj.autoRecord" placeholder="请选择">
  141. <el-option label="是" value="1"></el-option>
  142. <el-option label="否" value="0"></el-option>
  143. </el-select>
  144. </el-form-item>
  145. </el-form>
  146. <div slot="footer" class="dialog-footer">
  147. <el-button @click="dialogFormVisible = false">取 消</el-button>
  148. <el-button type="primary" @click="addRoom">确 定</el-button>
  149. </div>
  150. </el-dialog>
  151. </el-container>
  152. </div>
  153. </template>
  154. <script>
  155. import provTreeList from "../../widgets/jigouTreeList.vue";
  156. import request from "../../utils/gw_ajax_request.js"
  157. import {formatDateTime2,meetRoomStarTime,meetRoomEndTime} from "../../utils/gw_date.js"
  158. export default {
  159. components: {
  160. provTreeList: provTreeList
  161. },
  162. props: [],
  163. data() {
  164. return {
  165. tableHeight: window.innerHeight - 210,
  166. searchObj: {
  167. meetingNumber: '',
  168. pageNum: 1,
  169. pageSize: 20,
  170. persId: ''
  171. },
  172. addObj: {
  173. meetingName : '',
  174. meetingNumber: '',
  175. requirePassword: '',
  176. inPassword: '',
  177. controlPassword: '',
  178. maxParticipant: '',
  179. autoMute: '',
  180. autoRecord : '1',
  181. smartMuteperson: '',
  182. startTime: '',
  183. endTime: '',
  184. usOrgId: '',
  185. persId: '',
  186. },
  187. orgNm: '',
  188. efficientTime:[],
  189. ruleForm:{
  190. meetingName : '',
  191. requirePassword: '',
  192. inPassword: '',
  193. controlPassword: '',
  194. maxParticipant: '',
  195. autoMute: '',
  196. autoRecord : '',
  197. smartMuteperson: '',
  198. efficientTime: '',
  199. orgNm: ''
  200. },
  201. rules: {
  202. // meetingName: {required: true,message: '请输入会议室名称',trigger: 'blur'},
  203. // requirePassword: {required: true,message: '请选择是否需要密码',trigger: 'change'},
  204. // autoMute: {required: true,message: '请选择是否静音',trigger: 'change'},
  205. // autoRecord: {required: true,message: '请选择是否自动录制',trigger: 'change'},
  206. // maxParticipant: {required: true,message: '请输入最大人数',trigger: 'blur'},
  207. // orgNm: {required: true,message: '请选择分配单位',trigger: 'blur'}
  208. },
  209. pageIndex: 1,
  210. pageSize: 20,
  211. total: 50,
  212. roomList: [],
  213. dialogFormVisible: false,
  214. addform: [],
  215. formLabelWidth: '120px',
  216. curOperate: '',
  217. isSelected: false,
  218. changeJigou: false,
  219. pickerOptions: {
  220. disabledDate(time) {
  221. return time.getTime() < Date.now() - 8.64e7;
  222. }
  223. }
  224. }
  225. },
  226. computed:{
  227. persId(){
  228. return localStorage.getItem('userid') ? localStorage.getItem('userid') : ''
  229. },
  230. orgId(){
  231. return localStorage.getItem('guid') ? localStorage.getItem('guid') : ''
  232. }
  233. },
  234. mounted() {
  235. this.getRoomList()
  236. },
  237. watch: {
  238. },
  239. methods: {
  240. getRoomList(){
  241. this.searchObj.pageNum = this.pageIndex
  242. this.searchObj.persId = this.persId
  243. // this.searchObj.persId = '250'
  244. let paramsObj = this.searchObj
  245. request.post('/bis/insp/meet/room/getRoomByPersId',paramsObj).then((res)=>{
  246. if(res.success){
  247. this.roomList = res.data.list
  248. this.total = res.data.total
  249. }
  250. })
  251. },
  252. toAddRoom(type,row){
  253. this.curOperate = type
  254. if(this.curOperate == '编辑'){
  255. let rowObj = {}
  256. Object.assign(rowObj,row)
  257. request.get(`/bis/insp/meet/room/${rowObj.id}`).then(res=>{
  258. if(res.success){
  259. this.addObj = res.data
  260. }else{
  261. this.$message.error(res.message)
  262. }
  263. })
  264. }else{
  265. for (var obj in this.addObj) {
  266. if(obj != 'orgId' && obj != 'orgNm'){
  267. this.addObj[obj] = ''
  268. }
  269. }
  270. this.addObj.autoRecord = '1'
  271. this.addObj.startTime = meetRoomStarTime()
  272. this.addObj.endTime = meetRoomEndTime()
  273. }
  274. //是否显示弹框内的机构树
  275. if(!this.addObj.orgId || this.curOperate == '编辑'){
  276. this.changeJigou = true
  277. }else{
  278. this.changeJigou = false
  279. }
  280. this.dialogFormVisible = true
  281. },
  282. addRoom(){
  283. for (var obj in this.addObj) {
  284. if(this.addObj[obj] == 'null' || !this.addObj[obj]){
  285. this.addObj[obj] = ''
  286. }
  287. }
  288. let insertUrl = `/bis/insp/meet/room/add`
  289. let editUrl = `/bis/insp/meet/room/update`// 校验
  290. if(
  291. !this.addObj.meetingName || !this.addObj.requirePassword || !this.addObj.controlPassword
  292. || !this.addObj.maxParticipant || !this.addObj.autoMute
  293. || !this.addObj.startTime || !this.addObj.endTime || !this.addObj.usOrgId
  294. ){
  295. this.$message.warning('请完善必填项信息')
  296. return
  297. }
  298. if(this.addObj.requirePassword == '1' && !this.addObj.inPassword){
  299. this.$message.warning('请输入密码')
  300. return
  301. }
  302. if(this.addObj.autoMute != '0'){
  303. this.addObj.smartMuteperson = ''
  304. }
  305. if(this.addObj.requirePassword == '0'){
  306. this.addObj.inPassword = ''
  307. }
  308. this.$refs['ruleForm'].validate(valid=>{
  309. if(valid){
  310. if(this.curOperate == '添加'){
  311. this.addObj.orgId = this.orgId
  312. this.addObj.persId = this.persId
  313. request.post(insertUrl,this.addObj).then((res)=>{
  314. if(res.success){
  315. this.getRoomList()
  316. this.addObj.orgId = ''
  317. // this.addObj.orgNm = ''
  318. this.dialogFormVisible = false
  319. this.$message.success('添加成功')
  320. }else{
  321. this.$message.error(res.message)
  322. }
  323. })
  324. }else if(this.curOperate == '编辑'){
  325. request.post(editUrl,this.addObj).then((res)=>{
  326. if(res.success){
  327. this.getRoomList()
  328. this.addObj.orgId = ''
  329. // this.addObj.orgNm = ''
  330. this.dialogFormVisible = false
  331. this.$message.success('修改成功')
  332. }else{
  333. this.$message.error(res.message)
  334. }
  335. })
  336. }
  337. }else{
  338. return false
  339. }
  340. })
  341. },
  342. deleteRoom(row){
  343. this.$confirm('确定删除该会议室吗?', '提示', {
  344. confirmButtonText: '确定',
  345. cancelButtonText: '取消',
  346. type: 'warning'
  347. }).then(() => {
  348. request.post(`/bis/insp/meet/room/delete/${row.id}`).then((res)=>{
  349. if(res.success){
  350. this.getRoomList()
  351. this.dialogFormVisible = false
  352. this.$message({
  353. type: 'success',
  354. message: '删除成功!'
  355. });
  356. }
  357. })
  358. }).catch(() => {
  359. this.$message({
  360. type: 'info',
  361. message: '已取消删除'
  362. });
  363. });
  364. },
  365. onSubmit(){
  366. this.searchObj.orgId = ''
  367. this.getRoomList()
  368. },
  369. handleCurrentChange(val) {
  370. this.getRoomList()
  371. },
  372. handleSizeChange(val){
  373. this.searchObj.pageSize = val;
  374. this.pageSize = val
  375. this.getRoomList();
  376. },
  377. provTreeSelectChangeHandler(params) {
  378. this.isSelected = true
  379. this.addObj.orgId = params.code
  380. this.addObj.orgNm = params.name
  381. this.searchObj.orgId = params.code;
  382. this.getRoomList();
  383. },
  384. selectJigouCode(params){
  385. this.addObj.usOrgId = params.code
  386. this.orgNm = params.name
  387. },
  388. isOpen(val){
  389. return val == '0' ? '否' : '是'
  390. },
  391. timeFormat(val){
  392. return formatDateTime2(val)
  393. }
  394. },
  395. filters:{
  396. yesOrNo(val){
  397. return val == '0' ? '否' : val == '1' ? '是' : ''
  398. },
  399. autoMute (val){
  400. return val == '0' ? '智能静音' : val == '1' ? '全部静音' : val == '2' ? '不静音' : ''
  401. }
  402. },
  403. watch:{
  404. efficientTime(val){
  405. this.addObj.startTime = this.efficientTime[0]
  406. this.addObj.endTime = this.efficientTime[1]
  407. }
  408. }
  409. }
  410. </script>
  411. <style scoped>
  412. #dcdxHeader {
  413. padding: 15px 20px 0;
  414. height: auto !important;
  415. }
  416. #dxdcFooter {
  417. text-align: center;
  418. }
  419. #dxdcAside {
  420. border:1px solid #d5d5ff;
  421. }
  422. #dcdxHeader .el-dialog__wrapper .el-treeWhite{
  423. max-height: 260px !important;
  424. }
  425. </style>