index.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888
  1. <template>
  2. <div id="flow">
  3. <search-box-new
  4. ref="searchBox"
  5. :formData="formData"
  6. :formList="formList"
  7. @search="search"
  8. @init="init"
  9. />
  10. <table-list
  11. :tableSets="tableSet"
  12. :tableData="tableData"
  13. :navText="navText"
  14. @addClick="addClick"
  15. :loading="loading"
  16. @editInfo="editInfo"
  17. >
  18. <!-- <template slot="customize">
  19. <el-button size="small" type="success" @click="moreActive"
  20. >同步BL频道</el-button
  21. >
  22. </template> -->
  23. <template slot="btn" slot-scope="props">
  24. <el-button type="text" @click="addClick(props.scope.row, 0)"
  25. >修改</el-button
  26. >
  27. <el-button type="text" @click="del(props.scope.row)">删除</el-button>
  28. </template>
  29. </table-list>
  30. <pagination
  31. :total="total"
  32. :pageSize="formData.pageSize"
  33. :currentPage="formData.pageNum"
  34. @handleSizeChange="handleSizeChange"
  35. @handleCurrentChange="handleCurrentChange"
  36. />
  37. <el-dialog
  38. :visible.sync="dialogVisible"
  39. width="630px"
  40. :show-close="false"
  41. :close-on-click-modal="false"
  42. >
  43. <div slot="title" class="hearders">
  44. <div class="leftTitle">
  45. {{ statusPop === 1 ? "添加" : statusPop === 0 ? "修改" : "详情" }}
  46. </div>
  47. <div class="rightBoxs">
  48. <img src="@/assets/images/Close@2x.png" alt="" @click="close" />
  49. </div>
  50. </div>
  51. <div>
  52. <el-form
  53. label-position="right"
  54. label-width="110px"
  55. :model="listData"
  56. :rules="rules"
  57. ref="listData"
  58. >
  59. <template v-for="(items, indexs) in listitem">
  60. <el-form-item
  61. :key="indexs"
  62. :label="items.label"
  63. :prop="items.prop"
  64. v-if="pdTypes(items)"
  65. >
  66. <el-radio-group
  67. v-if="items.scope === 'status'"
  68. v-model="listData[items.prop]"
  69. >
  70. <el-radio
  71. v-for="(item, index) in items.options"
  72. :key="index"
  73. :label="item.value"
  74. :disabled="statusPop === 2"
  75. >{{ item.label }}</el-radio
  76. >
  77. </el-radio-group>
  78. <el-input
  79. :disabled="statusPop === 2"
  80. v-else-if="items.scope === 'textarea'"
  81. type="textarea"
  82. v-model="listData[items.prop]"
  83. ></el-input>
  84. <div v-else-if="items.scope === 'activeType'">
  85. <div :class="changeHeight ? 'ach' : 'clh'">
  86. <div
  87. v-for="(item, index) in zhType"
  88. :key="index"
  89. class="listBoxStys"
  90. >
  91. {{
  92. item.educationName +
  93. " - " +
  94. item.projectName +
  95. "-" +
  96. item.businessName
  97. }}
  98. <i
  99. class="el-icon-error closeIcons"
  100. @click="closeType(item.id)"
  101. ></i>
  102. </div>
  103. </div>
  104. <el-button
  105. size="mini"
  106. v-if="zhType.length > 1"
  107. @click="changeType"
  108. >{{ changeHeight ? "展开" : "关闭" }}</el-button
  109. >
  110. </div>
  111. <div
  112. v-else-if="items.scope === 'certificate'"
  113. style="display: flex; align-items: center"
  114. >
  115. <el-select
  116. v-model="eduType"
  117. placeholder="请选择教育类型"
  118. @change="eduChange"
  119. >
  120. <el-option
  121. v-for="item in itemOption1"
  122. :key="item.value"
  123. :label="item.label"
  124. :value="item.value"
  125. >
  126. </el-option>
  127. </el-select>
  128. <el-popover
  129. placement="bottom"
  130. width="200"
  131. trigger="click"
  132. :disabled="eduType ? false : true"
  133. >
  134. <el-checkbox-group v-model="cauType" class="checkboxSty">
  135. <el-checkbox
  136. v-for="(item, index) in itemOption2"
  137. :label="item.id"
  138. :key="index"
  139. >{{
  140. item.projectName + "-" + item.businessName
  141. }}</el-checkbox
  142. >
  143. </el-checkbox-group>
  144. <el-button
  145. slot="reference"
  146. style="margin-left: 12px"
  147. @click="getMessage"
  148. >请选择业务层次</el-button
  149. >
  150. </el-popover>
  151. <span style="margin-left: 10px">注:可多选</span>
  152. </div>
  153. <el-select
  154. v-else-if="items.scope === 'select'"
  155. v-model="listData[items.prop]"
  156. >
  157. <el-option
  158. v-for="(item, index) in items.options"
  159. :key="index"
  160. :label="item.label"
  161. :value="item.value"
  162. >
  163. </el-option>
  164. </el-select>
  165. <div v-else-if="items.scope === 'showText'">
  166. <el-input
  167. :disabled="statusPop === 2"
  168. v-model="listData[items.prop]"
  169. ></el-input>
  170. <div>
  171. {{
  172. listData["streamingType"] === 1
  173. ? items.ch
  174. : listData["streamingType"] === 2 ||
  175. listData["streamingType"] === 3
  176. ? items.ch1
  177. : ""
  178. }}
  179. </div>
  180. </div>
  181. <div v-else>
  182. <el-input
  183. :disabled="statusPop === 2"
  184. v-model="listData[items.prop]"
  185. ></el-input>
  186. <div v-if="items.ch">{{ items.ch }}</div>
  187. </div>
  188. </el-form-item>
  189. </template>
  190. </el-form>
  191. </div>
  192. <span slot="footer" class="dialog-footer">
  193. <el-button @click="close">取 消</el-button>
  194. <el-button
  195. type="primary"
  196. v-if="statusPop !== 2"
  197. @click="submit('listData')"
  198. >确 定</el-button
  199. >
  200. </span>
  201. </el-dialog>
  202. <el-dialog
  203. :visible.sync="disBoxs"
  204. width="440px"
  205. :show-close="false"
  206. :close-on-click-modal="false"
  207. >
  208. <div slot="title" class="hearders">
  209. <div class="leftTitle">选择同步BL频道分类</div>
  210. <div class="rightBoxs">
  211. <img
  212. src="@/assets/images/Close@2x.png"
  213. alt=""
  214. @click="disBoxs = false"
  215. />
  216. </div>
  217. </div>
  218. <div class="max-heightSty">
  219. <el-tree :props="props" :load="loadNode" lazy show-checkbox> </el-tree>
  220. </div>
  221. <span slot="footer" class="dialog-footer">
  222. <el-button @click="disBoxs = false">取 消</el-button>
  223. <el-button @click="submitForms">确 定</el-button>
  224. </span>
  225. </el-dialog>
  226. </div>
  227. </template>
  228. <script>
  229. import searchBoxNew from "@/components/searchBoxNew";
  230. import tableList from "@/components/tableList";
  231. import pagination from "@/components/pagination";
  232. export default {
  233. name: "Flow",
  234. components: { searchBoxNew, tableList, pagination },
  235. data() {
  236. return {
  237. disBoxs: false, //弹窗Bool
  238. changeHeight: true,
  239. loading: false, //当前表单加载是否加载动画
  240. navText: {
  241. title: "流地址管理",
  242. index: 0,
  243. ch: "条",
  244. num: true,
  245. border: true,
  246. choice: true,
  247. addHide: false,
  248. backFatherBtn: {
  249. status: false,
  250. title: "未定义",
  251. },
  252. },
  253. // 表单
  254. tableSet: [
  255. {
  256. label: "流地址编码",
  257. prop: "code",
  258. hidden: true,
  259. width: "160px",
  260. },
  261. {
  262. label: "流地址名称",
  263. prop: "streamingName",
  264. hidden: true,
  265. scope: "editInfo",
  266. width: "120px",
  267. },
  268. {
  269. label: "直播/录播/回放地址",
  270. prop: "streamingType",
  271. prop1: "liveUrl",
  272. prop2: "recordingVideoId",
  273. prop3: "playbackUrl",
  274. hidden: true,
  275. width: "160px",
  276. scope: "urlStatus",
  277. },
  278. {
  279. label: "适用业务层级",
  280. prop: "businessList",
  281. hidden: true,
  282. scope: "mapTypes",
  283. width: "240px",
  284. },
  285. {
  286. label: "视频类型",
  287. prop: "streamingType",
  288. hidden: true,
  289. scope: "sectionTypes",
  290. },
  291. {
  292. label: "流地址类型",
  293. prop: "streamingAddressType",
  294. hidden: true,
  295. scope: "streamType",
  296. },
  297. ],
  298. tableData: [], //表单数据
  299. //搜索
  300. formList: [
  301. {
  302. prop: "educationTypeId",
  303. placeholder: "教育类型",
  304. scope: "educationType",
  305. },
  306. {
  307. prop: "businessId",
  308. placeholder: "业务层次",
  309. scope: "businessLevel",
  310. edu: "educationTypeId",
  311. },
  312. {
  313. prop: "streamingType",
  314. placeholder: "视频类型",
  315. scope: "select",
  316. options: [
  317. {
  318. label: "直播",
  319. value: 1,
  320. },
  321. {
  322. label: "录播",
  323. value: 2,
  324. },
  325. {
  326. label: "回放",
  327. value: 3,
  328. },
  329. ],
  330. },
  331. {
  332. prop: "streamingAddressType",
  333. placeholder: "流地址类型",
  334. scope: "select",
  335. options: [
  336. {
  337. label: "正式",
  338. value: 1,
  339. },
  340. {
  341. label: "测试",
  342. value: 2,
  343. },
  344. ],
  345. },
  346. {
  347. prop: "streamingName",
  348. placeholder: "请输入流地址名称",
  349. },
  350. ],
  351. formData: {
  352. status: "0,1",
  353. pageSize: 10,
  354. pageNum: 1,
  355. },
  356. total: 0, //一共多少条
  357. options1: [],
  358. options2: [],
  359. courseProjectType: [],
  360. itemOption1: [],
  361. itemOption2: [],
  362. eduType: "",
  363. cauType: [],
  364. zhType: [],
  365. // 弹窗字段
  366. listitem: [
  367. {
  368. label: "适用业务层级",
  369. scope: "certificate",
  370. },
  371. {
  372. label: "",
  373. scope: "activeType",
  374. },
  375. {
  376. label: "视频类型",
  377. prop: "streamingType",
  378. scope: "select",
  379. options: [
  380. {
  381. label: "直播",
  382. value: 1,
  383. },
  384. {
  385. label: "录播",
  386. value: 2,
  387. },
  388. {
  389. label: "回放",
  390. value: 3,
  391. },
  392. ],
  393. },
  394. {
  395. label: "流地址名称",
  396. prop: "streamingName",
  397. scope: "showText",
  398. ch: "注:请填写第三方直播间的直播名称",
  399. ch1: "注:请填写与节相关的名称",
  400. },
  401. {
  402. label: "录播地址",
  403. prop: "recordingVideoId",
  404. hide: "one",
  405. },
  406. {
  407. label: "回放地址",
  408. prop: "playbackUrl",
  409. hide: "three",
  410. },
  411. {
  412. label: "直播间频道号",
  413. prop: "liveChannelNumber",
  414. hide: "two",
  415. ch: "注:请填写第三方直播间的频道号",
  416. },
  417. {
  418. label: " 推流地址",
  419. prop: "livePushUrl",
  420. hide: "two",
  421. },
  422. {
  423. label: " 直播拉流(播放)地址",
  424. prop: "livePullUrl",
  425. hide: "two",
  426. },
  427. {
  428. label: "直播地址",
  429. prop: "liveUrl",
  430. hide: "two",
  431. },
  432. {
  433. label: "流地址类型",
  434. prop: "streamingAddressType",
  435. scope: "select",
  436. options: [
  437. {
  438. label: "正式",
  439. value: 1,
  440. },
  441. {
  442. label: "测试",
  443. value: 2,
  444. },
  445. ],
  446. },
  447. {
  448. label: "描述",
  449. prop: "introduce",
  450. scope: "textarea",
  451. },
  452. ],
  453. // 弹窗数据
  454. listData: {},
  455. statusPop: -1,
  456. dialogVisible: false,
  457. //表单验证
  458. rules: {
  459. streamingType: [
  460. {
  461. required: true,
  462. message: "请选择视频类型",
  463. trigger: ["change", "blur"],
  464. },
  465. ],
  466. streamingName: [
  467. { required: true, message: "请输入流地址名称", trigger: "blur" },
  468. ],
  469. liveChannelNumber: [
  470. { required: true, message: "请输入直播间频道号", trigger: "blur" },
  471. ],
  472. // livePushUrl: [
  473. // { required: true, message: "请输入推流地址", trigger: "blur" },
  474. // ],
  475. // livePullUrl: [
  476. // { required: true, message: "请输入直播拉流(播放)地址", trigger: "blur" },
  477. // ],
  478. liveUrl: [
  479. { required: true, message: "请输入直播地址", trigger: "blur" },
  480. ],
  481. recordingVideoId: [
  482. { required: true, message: "请输入录播地址", trigger: "blur" },
  483. ],
  484. playbackUrl: [
  485. { required: true, message: "请输入回放地址", trigger: "blur" },
  486. ],
  487. streamingAddressType: [
  488. {
  489. required: true,
  490. message: "请选择流地址类型",
  491. trigger: ["change", "blur"],
  492. },
  493. ],
  494. },
  495. props: {
  496. label: "cataname",
  497. children: "children",
  498. },
  499. };
  500. },
  501. watch: {
  502. cauType: function () {
  503. this.changeTypes();
  504. },
  505. },
  506. mounted() {
  507. this.search();
  508. this.initOptions();
  509. this.getInfosPL();
  510. },
  511. activated() {
  512. this.search();
  513. this.initOptions();
  514. this.getInfosPL();
  515. },
  516. methods: {
  517. loadNode(node, resolve) {
  518. console.log(node);
  519. if (node.level === 0) {
  520. this.$api.obtainpolyvvideosignlistCata({ cataid: 1 }).then((res) => {
  521. return resolve(res.rows);
  522. });
  523. }
  524. if (node.level >= 1) {
  525. this.$api
  526. .obtainpolyvvideosignlistCata({ parentid: node.data.cataid })
  527. .then((res) => {
  528. return resolve(res.rows);
  529. });
  530. }
  531. },
  532. getInfosPL() {
  533. this.$api.obtainpolyvvideosignlistCata().then((res) => {});
  534. },
  535. submitForms() {},
  536. moreActive() {
  537. this.disBoxs = true;
  538. },
  539. getMessage() {
  540. if (!this.eduType) {
  541. this.$message.warning("请先选择教育类型");
  542. }
  543. },
  544. changeType() {
  545. this.changeHeight = !this.changeHeight;
  546. },
  547. changeTypes() {
  548. var arrays = [];
  549. this.cauType.map((item) => {
  550. this.courseProjectType.map((items, indexs) => {
  551. if (items.id === item) {
  552. arrays.push(items);
  553. }
  554. });
  555. });
  556. this.zhType = arrays;
  557. },
  558. eduChange() {
  559. var array = [];
  560. this.options2.map((item) => {
  561. if (item.educationId === this.eduType) {
  562. array.push(item);
  563. }
  564. });
  565. this.itemOption2 = array;
  566. },
  567. initOptions() {
  568. this.$api.inquireCourseEducationType({ status: 1 }).then((res) => {
  569. var array = [];
  570. res.rows.map((item) => {
  571. array.push({ label: item.educationName, value: item.id });
  572. });
  573. this.options1 = array;
  574. });
  575. this.$api.inquirebusinessList({ status: 1 }).then((res) => {
  576. this.courseProjectType = res.rows;
  577. this.options2 = res.rows;
  578. });
  579. },
  580. editInfo(v) {
  581. this.addClick(v, 0);
  582. },
  583. pdTypes(items) {
  584. if (items.hide === "two") {
  585. if (this.listData.streamingType === 1) {
  586. return true;
  587. } else {
  588. return false;
  589. }
  590. }
  591. if (items.hide === "three") {
  592. if (this.listData.streamingType === 3) {
  593. return true;
  594. } else {
  595. return false;
  596. }
  597. }
  598. if (items.hide === "one") {
  599. if (this.listData.streamingType === 2) {
  600. return true;
  601. } else {
  602. return false;
  603. }
  604. }
  605. return true;
  606. },
  607. search(int) {
  608. this.loading = true;
  609. if (int === 1) {
  610. this.formData.pageNum = 1;
  611. }
  612. if (int === 2) {
  613. this.formData = {
  614. status: "0,1",
  615. pageSize: 10,
  616. pageNum: 1,
  617. };
  618. }
  619. this.$api
  620. .inquireCourseStreaming(this.formData)
  621. .then((res) => {
  622. this.tableData = res.rows;
  623. this.total = res.total;
  624. this.navText.index = res.total;
  625. })
  626. .finally(() => {
  627. this.loading = false;
  628. });
  629. },
  630. init() {
  631. this.search(2);
  632. },
  633. closeType(id) {
  634. this.cauType.splice(this.cauType.indexOf(id), 1);
  635. },
  636. del(v) {
  637. this.$alert(
  638. "确定删除此内容?<br />内容删除后将无法恢复,请慎重考虑",
  639. "提示",
  640. {
  641. dangerouslyUseHTMLString: true,
  642. }
  643. )
  644. .then(() => {
  645. var data = {
  646. id: v.id,
  647. status: -1,
  648. };
  649. this.$api.editCourseBusinessCourseStreaming(data).then((res) => {
  650. this.$message.success("删除成功");
  651. this.search();
  652. });
  653. })
  654. .catch(() => {
  655. this.$message({
  656. type: "info",
  657. message: "已取消删除",
  658. });
  659. });
  660. },
  661. addClick(v, int) {
  662. if (v === undefined) {
  663. this.statusPop = 1;
  664. this.listData = {
  665. status: 1,
  666. streamingAddressType: 1,
  667. };
  668. this.eduType = "";
  669. this.cauType = [];
  670. this.zhType = [];
  671. } else {
  672. this.statusPop = int;
  673. this.listData = JSON.parse(JSON.stringify(v));
  674. this.eduType = "";
  675. this.$api.obtainCourseStreamingsq(v.id).then((res) => {
  676. var array = [];
  677. res.data.map((items, indexs) => {
  678. array.push(items.businessId);
  679. });
  680. this.cauType = array;
  681. });
  682. }
  683. this.itemOption1 = JSON.parse(JSON.stringify(this.options1));
  684. this.itemOption2 = JSON.parse(JSON.stringify(this.options2));
  685. this.$nextTick(() => {
  686. this.changeHeight = true;
  687. this.$refs.listData.clearValidate();
  688. });
  689. this.dialogVisible = true;
  690. },
  691. submit(formName) {
  692. this.$refs[formName].validate((valid) => {
  693. if (valid) {
  694. this.rulesTableSumbit();
  695. } else {
  696. return false;
  697. }
  698. });
  699. },
  700. rulesTableSumbit() {
  701. var pushRays = [];
  702. this.zhType.map((item) => {
  703. pushRays.push({
  704. businessId: item.id,
  705. educationTypeId: item.educationId,
  706. projectId: item.projectId,
  707. });
  708. });
  709. var dataInfos = {
  710. status: 1,
  711. streamingName: this.listData.streamingName,
  712. businessList: pushRays,
  713. introduce: this.listData.introduce,
  714. streamingAddressType: this.listData.streamingAddressType,
  715. };
  716. if (this.listData.streamingType === 1) {
  717. dataInfos.streamingType = 1;
  718. dataInfos.liveUrl = this.listData.liveUrl;
  719. dataInfos.liveChannelNumber = this.listData.liveChannelNumber;
  720. dataInfos.livePullUrl = this.listData.livePullUrl;
  721. dataInfos.livePushUrl = this.listData.livePushUrl;
  722. }
  723. if (this.listData.streamingType === 2) {
  724. dataInfos.streamingType = 2;
  725. dataInfos.recordingVideoId = this.listData.recordingVideoId;
  726. }
  727. if (this.listData.streamingType === 3) {
  728. dataInfos.streamingType = 3;
  729. dataInfos.playbackUrl = this.listData.playbackUrl;
  730. }
  731. if (this.statusPop === 1) {
  732. this.$api.appCourseStreaming(dataInfos).then((res) => {
  733. this.$message.success("新增成功");
  734. this.dialogVisible = false;
  735. this.search();
  736. });
  737. }
  738. if (this.statusPop === 0) {
  739. dataInfos.id = this.listData.id;
  740. this.$api.editCourseBusinessCourseStreaming(dataInfos).then((res) => {
  741. this.$message.success("修改成功");
  742. this.dialogVisible = false;
  743. this.search();
  744. });
  745. }
  746. },
  747. close() {
  748. this.dialogVisible = false;
  749. },
  750. handleSizeChange(v) {
  751. this.formData.pageSize = v;
  752. this.formData.pageNum = 1;
  753. this.search();
  754. },
  755. handleCurrentChange(v) {
  756. this.formData.pageNum = v;
  757. this.search();
  758. },
  759. },
  760. };
  761. </script>
  762. <style lang="less" scoped>
  763. .max-heightSty {
  764. max-height: 500px;
  765. overflow-y: auto;
  766. }
  767. /deep/.el-button {
  768. border-radius: 8px;
  769. }
  770. /deep/.el-dialog {
  771. border-radius: 8px;
  772. .el-dialog__header {
  773. padding: 0;
  774. .hearders {
  775. height: 40px;
  776. display: flex;
  777. align-items: center;
  778. justify-content: space-between;
  779. padding: 0px 18px 0px 20px;
  780. border-bottom: 1px solid #e2e2e2;
  781. .leftTitle {
  782. font-size: 14px;
  783. font-weight: bold;
  784. color: #2f4378;
  785. }
  786. .rightBoxs {
  787. display: flex;
  788. align-items: center;
  789. img {
  790. width: 14px;
  791. height: 14px;
  792. margin-left: 13px;
  793. cursor: pointer;
  794. }
  795. }
  796. }
  797. }
  798. .el-dialog__footer {
  799. padding: 0;
  800. .dialog-footer {
  801. padding: 0px 40px;
  802. height: 70px;
  803. border-top: 1px solid #e2e2e2;
  804. display: flex;
  805. align-items: center;
  806. justify-content: flex-end;
  807. }
  808. }
  809. }
  810. .imgBox {
  811. width: 100%;
  812. // height: 210px;
  813. border: 1px solid #e2e2e2;
  814. border-radius: 8px;
  815. padding: 8px 8px 3px;
  816. display: flex;
  817. flex-direction: column;
  818. align-items: center;
  819. .imgLabel {
  820. flex: 1;
  821. width: 100%;
  822. border: 1px dotted #e2e2e2;
  823. color: #999;
  824. font-size: 14px;
  825. cursor: pointer;
  826. border-radius: 8px;
  827. .msPhoto {
  828. display: flex;
  829. justify-content: center;
  830. align-items: center;
  831. max-width: 100%;
  832. max-height: 270px;
  833. img {
  834. max-width: 100%;
  835. max-height: 270px;
  836. }
  837. }
  838. .imgbbx {
  839. display: flex;
  840. flex-direction: column;
  841. align-items: center;
  842. justify-content: center;
  843. width: 100%;
  844. height: 100%;
  845. i {
  846. font-weight: bold;
  847. margin: 14px 0;
  848. font-size: 24px;
  849. }
  850. }
  851. }
  852. p {
  853. margin: 5px 0px;
  854. }
  855. }
  856. .checkboxSty {
  857. max-height: 210px;
  858. overflow: auto;
  859. display: flex;
  860. flex-direction: column;
  861. }
  862. .listBoxStys {
  863. flex-shrink: 0;
  864. padding: 0px 10px;
  865. border-radius: 8px;
  866. border: 1px solid #eee;
  867. margin-right: 10px;
  868. margin-bottom: 6px;
  869. }
  870. .closeIcons {
  871. color: red;
  872. cursor: pointer;
  873. margin-left: 6px;
  874. }
  875. .ach {
  876. display: flex;
  877. align-items: center;
  878. overflow: hidden;
  879. }
  880. .clh {
  881. display: flex;
  882. align-items: center;
  883. flex-wrap: wrap;
  884. }
  885. </style>