announcement.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. <template>
  2. <div class="hc-system-announcement-box">
  3. <div class="classify-card">
  4. <div class="card-body">
  5. <div class="card-main">
  6. <div class="header">
  7. <div class="title">系统分类</div>
  8. <div class="extra">
  9. <el-button icon="el-icon-plus" size="mini" type="primary" @click="addSystemClick"></el-button>
  10. </div>
  11. </div>
  12. <div class="content">
  13. <el-menu :default-active="systemClassify" class="classify-data" @select="systemClassifySelect">
  14. <el-submenu index="1">
  15. <div slot="title">
  16. <div @contextmenu.prevent="editSystemClick($event, '1')">电子档案系统</div>
  17. </div>
  18. <el-menu-item index="1-1" @contextmenu.native.prevent="editSystemClick($event, '1-1')">质检系统</el-menu-item>
  19. <el-menu-item index="1-2" @contextmenu.native.prevent="editSystemClick($event, '1-2')">档案系统</el-menu-item>
  20. <el-menu-item index="1-3" @contextmenu.native.prevent="editSystemClick($event, '1-3')">计量系统</el-menu-item>
  21. </el-submenu>
  22. <el-submenu index="2">
  23. <div slot="title">
  24. <div @contextmenu.prevent="editSystemClick($event, '2')">规发中心</div>
  25. </div>
  26. <el-menu-item index="2-1" @contextmenu.native.prevent="editSystemClick($event, '2-1')">数据分析系统</el-menu-item>
  27. </el-submenu>
  28. </el-menu>
  29. </div>
  30. </div>
  31. </div>
  32. </div>
  33. <div class="data-card">
  34. <div class="card-body">
  35. <div class="card-main">
  36. <div class="header">
  37. <div class="title">
  38. <div style="width: 140px">
  39. <el-select v-model="searchForm.type" class="block" clearable filterable placeholder="请选择公告类型" size="small">
  40. <el-option label="系统发布公告" value="1"></el-option>
  41. <el-option label="系统说明公告" value="2"></el-option>
  42. </el-select>
  43. </div>
  44. <div style="width: 100px; margin-left: 12px; margin-right: 12px;">
  45. <el-select v-model="searchForm.state" class="block" clearable filterable placeholder="发布状态" size="small">
  46. <el-option label="已发布" value="1"></el-option>
  47. <el-option label="待发布" value="2"></el-option>
  48. <el-option label="已取消" value="3"></el-option>
  49. </el-select>
  50. </div>
  51. <el-button size="small" type="primary">搜索</el-button>
  52. </div>
  53. <div class="extra">
  54. <el-badge :value="3" style="margin-right: 18px;">
  55. <el-button size="small" @click="releasedShow">待发布</el-button>
  56. </el-badge>
  57. <el-button size="small" type="primary" @click="generalShow">发布普通公告</el-button>
  58. <el-button size="small" type="warning" @click="systemUpdateShow">发布系统公告</el-button>
  59. <el-button size="small" type="danger">批量删除公告</el-button>
  60. </div>
  61. </div>
  62. <div class="content">
  63. <el-table ref="tableRef" :data="tableData" border style="width: 100%;" height="100%" @selection-change="tableSelection">
  64. <el-table-column type="selection" width="50" align="center" fixed="left"></el-table-column>
  65. <el-table-column type="index" label="序号" width="50" align="center"></el-table-column>
  66. <el-table-column prop="type" label="公告类型" width="140"></el-table-column>
  67. <el-table-column prop="name" label="公告内容" min-width="240"></el-table-column>
  68. <el-table-column prop="address" label="发布备注" width="300"></el-table-column>
  69. <el-table-column prop="time" label="创建时间" width="180"></el-table-column>
  70. <el-table-column prop="user" label="创建人" width="100"></el-table-column>
  71. <el-table-column prop="date" label="取消时间" width="180"></el-table-column>
  72. <el-table-column prop="state" label="发布状态" width="100" align="center">
  73. <template slot-scope="{row}">
  74. <el-tag type="danger" effect="dark" v-if="row.state==='已取消'">{{ row.state }}</el-tag>
  75. <el-tag type="success" effect="dark" v-if="row.state==='已发布'">{{ row.state }}</el-tag>
  76. <el-tag type="info" effect="dark" v-if="row.state==='待发布'">{{ row.state }}</el-tag>
  77. </template>
  78. </el-table-column>
  79. <el-table-column prop="action" label="操作" width="150" align="center" fixed="right">
  80. <template slot-scope="{row, $index}">
  81. <el-button size="mini" @click="handleEdit($index, row)">编辑</el-button>
  82. <el-button size="mini" type="danger" @click="handleDelete($index, row)">删除</el-button>
  83. </template>
  84. </el-table-column>
  85. </el-table>
  86. </div>
  87. <div class="action">
  88. <el-pagination
  89. @size-change="handleSizeChange"
  90. @current-change="handleCurrentChange"
  91. :current-page="searchForm.current"
  92. :page-sizes="[100, 200, 300, 400]"
  93. :page-size="searchForm.size"
  94. layout="total, prev, pager, next, sizes, jumper"
  95. :total="searchForm.total"
  96. >
  97. </el-pagination>
  98. </div>
  99. </div>
  100. </div>
  101. </div>
  102. <!--新增/编辑 系统-->
  103. <el-dialog
  104. class="hc-system-announcement-dialog"
  105. :title="`${systemInfoData.id?'编辑':'新增'}系统`"
  106. :visible.sync="isSystemInfoShow"
  107. append-to-body center
  108. destroy-on-close
  109. width="400px"
  110. @closed="systemFormCancel"
  111. >
  112. <el-form :model="systemInfoData" :rules="systemInfoRules" ref="systemInfoRef" label-width="auto">
  113. <el-form-item label="数据类型:" prop="type">
  114. <el-radio-group v-model="systemInfoData.type">
  115. <el-radio label="1">系统分组</el-radio>
  116. <el-radio label="2">项目系统</el-radio>
  117. </el-radio-group>
  118. </el-form-item>
  119. <el-form-item label="分组名称:" prop="name" v-if="systemInfoData.type === '1'">
  120. <el-input v-model="systemInfoData.name" placeholder="请输入分组名称"></el-input>
  121. </el-form-item>
  122. <el-form-item label="上级分组:" prop="groupId" v-if="systemInfoData.type === '2'">
  123. <el-select v-model="systemInfoData.groupId" class="block" clearable filterable placeholder="请选择上级分组">
  124. <el-option label="电子档案系统" value="1"></el-option>
  125. <el-option label="规发中心" value="2"></el-option>
  126. </el-select>
  127. </el-form-item>
  128. <el-form-item label="关联应用:" prop="client" v-if="systemInfoData.type === '2'">
  129. <el-select v-model="systemInfoData.client" class="block" clearable filterable placeholder="请选择关联应用">
  130. <el-option label="client(质检试验)" value="client"></el-option>
  131. <el-option label="archives(档案管理)" value="archives"></el-option>
  132. <el-option label="measure(计量系统)" value="measure"></el-option>
  133. </el-select>
  134. </el-form-item>
  135. <el-form-item label="项目名称:" prop="title" v-if="systemInfoData.type === '2'">
  136. <el-input v-model="systemInfoData.title" placeholder="请输入项目名称"></el-input>
  137. </el-form-item>
  138. </el-form>
  139. <div slot="footer">
  140. <el-button @click="systemFormCancel">取消</el-button>
  141. <el-popconfirm title="确定要删除当前数据吗?" @confirm="systemFormDel" v-if="systemInfoData.id">
  142. <el-button slot="reference" type="danger">删除</el-button>
  143. </el-popconfirm>
  144. <el-button type="primary" @click="systemFormSubmit">确定</el-button>
  145. </div>
  146. </el-dialog>
  147. <!--待发布-->
  148. <el-dialog
  149. class="hc-system-announcement-dialog black-card" title="待发布的公告" :visible.sync="isReleasedShow"
  150. append-to-body center destroy-on-close width="620px" @closed="releasedCancel"
  151. >
  152. <el-divider content-position="left" class="hc-system-announcement-black-divider top">系统公告</el-divider>
  153. <div class="hc-system-announcement-black-card">
  154. <div class="icon-box">
  155. <div class="name">前 端</div>
  156. <div class="icon">
  157. <i class="iconfont iconicon_notice"></i>
  158. </div>
  159. </div>
  160. <div class="content">
  161. <div class="top-box">
  162. <div class="left">
  163. <span class="name">待发布:</span>
  164. <span class="num">1</span>
  165. </div>
  166. <div class="right">
  167. <span class="name">创建人:</span>
  168. <span class="user">黄飞鸿</span>
  169. </div>
  170. </div>
  171. <div class="time-box">
  172. <span class="name">发布时间:</span>
  173. <span class="time">2024年7月31日 14:40:30</span>
  174. </div>
  175. </div>
  176. </div>
  177. <div class="hc-system-announcement-black-card">
  178. <div class="icon-box">
  179. <div class="name">后 端</div>
  180. <div class="icon">
  181. <i class="iconfont iconicon_notice"></i>
  182. </div>
  183. </div>
  184. <div class="content">
  185. <div class="top-box">
  186. <div class="left">
  187. <span class="name">待发布:</span>
  188. <span class="num">1</span>
  189. </div>
  190. <div class="right">
  191. <span class="name">创建人:</span>
  192. <span class="user">祝炜</span>
  193. </div>
  194. </div>
  195. <div class="time-box">
  196. <span class="name">发布时间:</span>
  197. <span class="time">2024年7月31日 14:40:30</span>
  198. </div>
  199. </div>
  200. </div>
  201. <el-divider content-position="left" class="hc-system-announcement-black-divider">普通公告</el-divider>
  202. <div class="hc-system-announcement-black-card">
  203. <div class="icon-box">
  204. <div class="name">公 告</div>
  205. <div class="icon">
  206. <i class="iconfont iconicon_notice"></i>
  207. </div>
  208. </div>
  209. <div class="content">
  210. <div class="top-box">
  211. <div class="left">
  212. <span class="name">待发布:</span>
  213. <span class="num">1</span>
  214. </div>
  215. <div class="right">
  216. <span class="name">创建人:</span>
  217. <span class="user">豆海涛</span>
  218. </div>
  219. </div>
  220. <div class="text-box">
  221. <div class="name">公告内容:</div>
  222. <div class="text">系统xxxxxx</div>
  223. </div>
  224. <div class="time-box">
  225. <span class="name">发布时间:</span>
  226. <span class="time">2024年7月31日 14:40:30</span>
  227. </div>
  228. </div>
  229. </div>
  230. </el-dialog>
  231. <!--发布普通公告-->
  232. <el-dialog
  233. class="hc-system-announcement-dialog w-700px" title="发布普通公告" :visible.sync="isGeneralShow"
  234. width="700px" append-to-body center destroy-on-close @closed="generalCancel"
  235. >
  236. <el-form :model="generalFormModel" :rules="generalFormRules" ref="generalFormRef" class="hc-system-announcement-form" label-position="top">
  237. <el-form-item label="公告内容:" prop="key">
  238. <el-input type="textarea" v-model="generalFormModel.key" rows="3"></el-input>
  239. </el-form-item>
  240. <el-form-item label="发布备注:" prop="desc">
  241. <el-input type="textarea" v-model="generalFormModel.desc"></el-input>
  242. </el-form-item>
  243. <el-form-item label="发布配置:" prop="key1">
  244. <el-radio-group v-model="generalFormModel.key1">
  245. <el-radio label="0">现在</el-radio>
  246. <el-radio label="3">三分钟后</el-radio>
  247. <el-radio label="5">五分钟后</el-radio>
  248. <el-radio label="10">十分钟后</el-radio>
  249. <el-radio label="999">
  250. <el-date-picker v-model="generalFormModel.key1Val" type="datetime" placeholder="选择日期时间" size="small"></el-date-picker>
  251. </el-radio>
  252. </el-radio-group>
  253. </el-form-item>
  254. <el-form-item label="公告停留时间:" prop="key2">
  255. <el-radio-group v-model="generalFormModel.key2">
  256. <el-radio label="1">一分钟</el-radio>
  257. <el-radio label="3">三分钟</el-radio>
  258. <el-radio label="5">五分钟</el-radio>
  259. <el-radio label="10">十分钟</el-radio>
  260. <el-radio label="999">
  261. <el-select v-model="generalFormModel.key2Val" clearable filterable size="small" style="width: 90px;">
  262. <el-option v-for="i in 60" :label="`${i}分钟`" :value="i"></el-option>
  263. </el-select>
  264. </el-radio>
  265. </el-radio-group>
  266. </el-form-item>
  267. <el-form-item label="涉及系统:" prop="key3">
  268. <el-checkbox-group v-model="generalFormModel.key3">
  269. <el-checkbox label="1">质检系统</el-checkbox>
  270. <el-checkbox label="2">档案系统</el-checkbox>
  271. <el-checkbox label="3">计量系统</el-checkbox>
  272. </el-checkbox-group>
  273. </el-form-item>
  274. </el-form>
  275. <div slot="footer">
  276. <el-button @click="generalCancel">取消</el-button>
  277. <el-button type="primary" @click="generalFormSubmit">确定</el-button>
  278. </div>
  279. </el-dialog>
  280. <!--发布系统公告-->
  281. <el-dialog
  282. class="hc-system-announcement-dialog h-full w-700px" title="发布系统公告" :visible.sync="isSystemUpdateShow"
  283. width="700px" append-to-body center destroy-on-close @closed="systemUpdateCancel"
  284. >
  285. <el-form :model="updateFormModel" :rules="updateFormRules" ref="updateFormRef" class="hc-system-announcement-form" label-position="top">
  286. <el-form-item label="公告内容:" prop="key">
  287. <el-input type="textarea" v-model="updateFormModel.key" rows="3"></el-input>
  288. </el-form-item>
  289. <el-form-item label="发布备注:" prop="desc">
  290. <el-input type="textarea" v-model="updateFormModel.desc"></el-input>
  291. </el-form-item>
  292. <el-form-item label="更新类型:" prop="key4">
  293. <el-checkbox-group v-model="updateFormModel.key4">
  294. <el-checkbox label="1">前端页面</el-checkbox>
  295. <el-checkbox label="2">后端接口</el-checkbox>
  296. </el-checkbox-group>
  297. </el-form-item>
  298. <el-form-item label="更新原因:" prop="key5">
  299. <el-radio-group v-model="updateFormModel.key5">
  300. <el-radio label="1">新功能需求</el-radio>
  301. <el-radio label="2">bug修复</el-radio>
  302. </el-radio-group>
  303. </el-form-item>
  304. <el-form-item label="发布配置:" prop="key1">
  305. <el-radio-group v-model="updateFormModel.key1">
  306. <el-radio label="0">现在</el-radio>
  307. <el-radio label="3">三分钟后</el-radio>
  308. <el-radio label="5">五分钟后</el-radio>
  309. <el-radio label="10">十分钟后</el-radio>
  310. <el-radio label="999">
  311. <el-date-picker v-model="updateFormModel.key1Val" type="datetime" placeholder="选择日期时间" size="small"></el-date-picker>
  312. </el-radio>
  313. </el-radio-group>
  314. </el-form-item>
  315. <el-form-item label="时间配置:" prop="key2">
  316. <span>剩余</span>
  317. <span style="margin-left: 5px">
  318. <el-select v-model="updateFormModel.key2Val" clearable filterable size="small" style="width: 90px;" placeholder="分钟">
  319. <el-option v-for="i in 60" :label="`${i}分钟`" :value="i"></el-option>
  320. </el-select>
  321. </span>
  322. <span style="margin-left: 5px">进行提醒,</span>
  323. <span style="margin-left: 5px">
  324. <el-select v-model="updateFormModel.key2Val1" clearable filterable size="small" style="width: 70px;" placeholder="时间">
  325. <el-option v-for="i in 60" :label="i" :value="i"></el-option>
  326. </el-select>
  327. </span>
  328. <span style="margin-left: 5px">
  329. <el-select v-model="updateFormModel.key2Val2" clearable filterable size="small" style="width: 80px;" placeholder="单位">
  330. <el-option label="分钟" value="1"></el-option>
  331. <el-option label="秒钟" value="2"></el-option>
  332. </el-select>
  333. </span>
  334. <span style="margin-left: 5px">开始进入倒计时</span>
  335. </el-form-item>
  336. <el-form-item label="涉及系统:" prop="key3">
  337. <el-checkbox-group v-model="updateFormModel.key3">
  338. <el-checkbox label="1">质检系统</el-checkbox>
  339. <el-checkbox label="2">档案系统</el-checkbox>
  340. <el-checkbox label="3">计量系统</el-checkbox>
  341. </el-checkbox-group>
  342. </el-form-item>
  343. </el-form>
  344. <div slot="footer">
  345. <el-button @click="systemUpdateCancel">取消</el-button>
  346. <el-button type="primary" @click="updateFormSubmit">确定</el-button>
  347. </div>
  348. </el-dialog>
  349. </div>
  350. </template>
  351. <script>
  352. import '@/styles/announcement.scss'
  353. export default {
  354. data() {
  355. return {
  356. //系统索引
  357. systemClassify: '1-1',
  358. //系统信息
  359. isSystemInfoShow: false,
  360. systemInfoData: {type: '1'},
  361. systemInfoRules: {
  362. type: [{ required: true, message: '请选择数据类型', trigger: 'blur' }],
  363. name: [{ required: true, message: '请输入分组名称', trigger: 'blur' }],
  364. groupId: [{ required: true, message: '请选择上级分组', trigger: 'blur' }],
  365. client: [{ required: true, message: '请选择关联应用', trigger: 'blur' }],
  366. title: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
  367. },
  368. //搜索
  369. searchForm: {current: 1, size: 20, total: 0},
  370. //公告列表
  371. tableData: [{
  372. date: '2016-05-02',
  373. name: '王小虎',
  374. address: '上海市普陀区金沙江路 1518 弄',
  375. state: '已取消'
  376. }, {
  377. date: '2016-05-04',
  378. name: '王小虎',
  379. address: '上海市普陀区金沙江路 1517 弄',
  380. state: '待发布'
  381. }, {
  382. date: '2016-05-01',
  383. name: '王小虎',
  384. address: '上海市普陀区金沙江路 1519 弄',
  385. state: '已发布'
  386. }, {
  387. date: '2016-05-03',
  388. name: '王小虎',
  389. address: '上海市普陀区金沙江路 1516 弄'
  390. }],
  391. //待发布
  392. isReleasedShow: false,
  393. //普通公告
  394. isGeneralShow: false,
  395. generalFormModel: {
  396. key1Val: null,
  397. key2Val: null,
  398. key3: [],
  399. },
  400. generalFormRules: {},
  401. //系统更新
  402. isSystemUpdateShow: false,
  403. updateFormModel: {
  404. key3: [], key4: []
  405. },
  406. updateFormRules: {},
  407. }
  408. },
  409. computed: {
  410. },
  411. created() {
  412. },
  413. methods: {
  414. //系统分类被选择
  415. systemClassifySelect(index) {
  416. this.systemClassify = index
  417. },
  418. //新增系统
  419. addSystemClick() {
  420. this.systemInfoData = {type: '1'}
  421. this.isSystemInfoShow = true
  422. },
  423. //编辑系统
  424. editSystemClick(event, index) {
  425. // 阻止默认右键菜单
  426. event.preventDefault();
  427. console.log(index)
  428. this.systemInfoData = {id:'11', type: '1'}
  429. this.isSystemInfoShow = true
  430. },
  431. //确定新增编辑系统
  432. async systemFormSubmit() {
  433. const isForm = await this.getFormValidate('systemInfoRef')
  434. if (!isForm) return
  435. console.log(this.systemInfoData)
  436. },
  437. //删除系统分类
  438. systemFormDel() {
  439. console.log('操作删除')
  440. },
  441. //取消新增编辑系统
  442. systemFormCancel() {
  443. this.isSystemInfoShow = false
  444. this.systemInfoData = {}
  445. },
  446. handleSizeChange(val) {
  447. this.searchForm.size = val
  448. },
  449. handleCurrentChange(val) {
  450. this.searchForm.current = val
  451. },
  452. //表格多选
  453. tableSelection(val) {
  454. console.log(val)
  455. },
  456. //表格编辑
  457. handleEdit(index, row) {
  458. console.log(index, row);
  459. },
  460. //表格删除
  461. handleDelete(index, row) {
  462. console.log(index, row);
  463. },
  464. //待发布打开
  465. releasedShow() {
  466. this.isReleasedShow = true
  467. },
  468. //待发布关闭
  469. releasedCancel() {
  470. this.isReleasedShow = false
  471. },
  472. //打开普通公告
  473. generalShow() {
  474. this.isGeneralShow = true
  475. },
  476. generalFormSubmit() {
  477. this.generalCancel()
  478. },
  479. //普通公告关闭
  480. generalCancel() {
  481. this.isGeneralShow = false
  482. },
  483. //系统更新公告关闭
  484. systemUpdateShow() {
  485. this.isSystemUpdateShow = true
  486. },
  487. //系统更新公告提交
  488. updateFormSubmit() {
  489. this.systemUpdateCancel()
  490. },
  491. //系统更新公告关闭
  492. systemUpdateCancel() {
  493. this.isSystemUpdateShow = false
  494. },
  495. //验证表单
  496. async getFormValidate(ref) {
  497. return new Promise(resolve => {
  498. if (!ref) {
  499. resolve(false)
  500. return
  501. }
  502. this.$refs[ref].validate((valid) => {
  503. resolve(!!valid)
  504. });
  505. })
  506. }
  507. },
  508. }
  509. </script>
  510. <style lang="scss">
  511. </style>