index.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728
  1. <template>
  2. <template-page ref="pageRef" :get-list="getList" :exportList="exportList" :table-attributes="tableAttributes"
  3. :table-events="tableEvents" :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters"
  4. :column-parsing="columnParsing" :operation="operation()" :replaceOrNotMap="false">
  5. <div class="cartographer">
  6. <el-dialog title="增值服务配置" width="100%" :modal="false" :visible.sync="formDialog" :before-close="formCancel">
  7. <zj-form-container v-if="formDialog" ref="formRef" :form-data="formData" :styleSwitch="false">
  8. <zj-form-module title="新增" label-width="120px" :showPackUp="false" :form-data="formData"
  9. :form-items="formItems">
  10. </zj-form-module>
  11. </zj-form-container>
  12. <div slot="footer" class="dialog-footer">
  13. <el-button size="mini" @click="formCancel">取 消</el-button>
  14. <el-button size="mini" @click="formConfirm" type="primary">确定</el-button>
  15. </div>
  16. </el-dialog>
  17. </div>
  18. </template-page>
  19. </template>
  20. <script>
  21. import TemplatePage from '@/components/template/template-page-1.vue'
  22. import import_mixin from '@/components/template/import_mixin.js'
  23. import { increConfigList, increConfigListExport, increConfigDetail, increConfigAdd, increConfigUpdate, increConfigUpOrDown } from "@/api/valueAddedConfig.js"
  24. import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
  25. import { getClassifyList } from '@/api/goods'
  26. import { getDataDictionary } from '@/api/dataDictionary.js'
  27. import operation_mixin from '@/components/template/operation_mixin.js'
  28. import { getWebsit } from "@/api/customerManagement.js"
  29. export default {
  30. props: {
  31. storageType: {
  32. type: String,
  33. default: ""
  34. }
  35. },
  36. components: { TemplatePage },
  37. mixins: [import_mixin, operation_mixin],
  38. data() {
  39. return {
  40. // 表格属性
  41. tableAttributes: {
  42. // 启用勾选列
  43. selectColumn: false
  44. },
  45. // 表格事件
  46. tableEvents: {
  47. 'selection-change': this.selectionChange
  48. },
  49. // 勾选选中数据
  50. recordSelected: [],
  51. formData: {
  52. "companyWechatId": "",
  53. "companyWechatName": "",
  54. "intro": "",
  55. "reason": "",
  56. "remark": "",
  57. "status": true,
  58. "type": "",
  59. "usedType": "",
  60. pgIncreItems: [],
  61. pgIncreWebsits: []
  62. },
  63. formDialog: false,
  64. isEditIndex: -1,
  65. orderBrands: [],
  66. classifyList: [],
  67. classifyListLv2: [],
  68. clickLook: true,
  69. websitList: [],
  70. websitIndex: -1
  71. }
  72. },
  73. computed: {
  74. // 事件组合
  75. optionsEvensGroup() {
  76. return [
  77. [
  78. [
  79. this.optionsEvensAuth("add", {
  80. click: () => {
  81. this.openForm()
  82. }
  83. })
  84. ],
  85. ]
  86. ]
  87. },
  88. // 更多参数
  89. moreParameters() {
  90. return []
  91. },
  92. columns() {
  93. return [
  94. {
  95. columnAttributes: {
  96. label: '品牌',
  97. prop: 'brandId'
  98. },
  99. render: (h, { row, column, index }) => {
  100. return this.isEditIndex == index ? <div class="redbordererr">
  101. <el-form-item label="" label-width="0px" prop={`pgIncreItems.${index}.${column.columnAttributes.prop}`} rules={required}>
  102. <el-select
  103. value={row[column.columnAttributes.prop]}
  104. onInput={(val) => { row[column.columnAttributes.prop] = val }}
  105. onChange={(val) => {
  106. if (val) {
  107. var data = this.orderBrands.find(item => item.value == val)
  108. row.brandName = data.label
  109. } else {
  110. row.brandName = ""
  111. }
  112. }}
  113. placeholder="请选择">
  114. {this.orderBrands.map((item, index_) => <el-option key={index_} label={item.label} value={item.value}></el-option>)}
  115. </el-select>
  116. </el-form-item>
  117. </div> : <div style="padding-left:10px">{row.brandName}</div>
  118. }
  119. },
  120. {
  121. columnAttributes: {
  122. label: '产品大类',
  123. prop: 'mainId'
  124. },
  125. render: (h, { row, column, index }) => {
  126. return this.isEditIndex == index ? <div class="redbordererr">
  127. <el-form-item label="" label-width="0px" prop={`pgIncreItems.${index}.${column.columnAttributes.prop}`} rules={required}>
  128. <el-select
  129. value={row[column.columnAttributes.prop]}
  130. onInput={(val) => { row[column.columnAttributes.prop] = val }}
  131. onChange={(val) => {
  132. if (val) {
  133. var data = this.classifyList.find(item => item.categoryId == val)
  134. row.mainName = data.name
  135. } else {
  136. row.mainName = ""
  137. }
  138. }}
  139. placeholder="请选择">
  140. {this.classifyList.map((item, index_) => <el-option key={index_} label={item.name} value={item.categoryId}></el-option>)}
  141. </el-select>
  142. </el-form-item>
  143. </div> : <div style="padding-left:10px">{row.mainName}</div>
  144. }
  145. },
  146. {
  147. columnAttributes: {
  148. label: '服务内容',
  149. prop: 'content'
  150. },
  151. render: (h, { row, column, index }) => {
  152. return this.isEditIndex == index ? <div class="redbordererr">
  153. <el-form-item label="" label-width="0px" prop={`pgIncreItems.${index}.${column.columnAttributes.prop}`} rules={required}>
  154. <el-input
  155. value={row[column.columnAttributes.prop]}
  156. onInput={(val) => { row[column.columnAttributes.prop] = val }}
  157. placeholder="请输入内容"
  158. >
  159. </el-input>
  160. </el-form-item>
  161. </div> : <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
  162. }
  163. },
  164. {
  165. columnAttributes: {
  166. label: '使用限值',
  167. prop: 'limitNum'
  168. },
  169. render: (h, { row, column, index }) => {
  170. return this.isEditIndex == index ? <div class="redbordererr">
  171. <el-form-item label="" label-width="0px" prop={`pgIncreItems.${index}.${column.columnAttributes.prop}`} rules={required} >
  172. <el-input
  173. value={row[column.columnAttributes.prop]}
  174. onInput={(val) => { row[column.columnAttributes.prop] = val }}
  175. placeholder="请输入内容"
  176. >
  177. </el-input>
  178. </el-form-item>
  179. </div> : <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
  180. }
  181. },
  182. {
  183. columnAttributes: {
  184. label: '服务金额(元)',
  185. prop: 'amount'
  186. },
  187. render: (h, { row, column, index }) => {
  188. return this.isEditIndex == index ? <div class="redbordererr">
  189. <el-form-item label="" label-width="0px" prop={`pgIncreItems.${index}.${column.columnAttributes.prop}`} rules={required}>
  190. <el-input
  191. type="number"
  192. value={row[column.columnAttributes.prop]}
  193. onInput={(val) => {
  194. row[column.columnAttributes.prop] = val
  195. if (val && row.workerAmount && Number(row.workerAmount) > Number(val)) {
  196. row.workerAmount = val
  197. }
  198. }}
  199. placeholder="请输入内容"
  200. >
  201. </el-input>
  202. </el-form-item>
  203. </div> : <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
  204. }
  205. },
  206. {
  207. columnAttributes: {
  208. label: '师傅分成金额',
  209. prop: 'workerAmount'
  210. },
  211. render: (h, { row, column, index }) => {
  212. return this.isEditIndex == index ? <div class="redbordererr">
  213. <el-form-item label="" label-width="0px" prop={`pgIncreItems.${index}.${column.columnAttributes.prop}`} rules={required}>
  214. <el-input
  215. type="number"
  216. value={row[column.columnAttributes.prop]}
  217. onInput={(val) => {
  218. row[column.columnAttributes.prop] = val && row.amount && Number(val) > Number(row.amount) ? row.amount : val
  219. }}
  220. placeholder="请输入内容"
  221. >
  222. </el-input>
  223. </el-form-item>
  224. </div> : <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
  225. }
  226. },
  227. {
  228. columnAttributes: {
  229. label: '网点分成金额',
  230. prop: 'websitAmount'
  231. },
  232. render: (h, { row, column, index }) => {
  233. row[column.columnAttributes.prop] = (Number(row["amount"]) - Number(row["workerAmount"])).toFixed(2)
  234. return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
  235. }
  236. },
  237. {
  238. columnAttributes: {
  239. label: '创建人',
  240. prop: 'createBy'
  241. }
  242. },
  243. {
  244. columnAttributes: {
  245. label: '创建时间',
  246. prop: 'createTime'
  247. }
  248. },
  249. {
  250. columnAttributes: {
  251. label: '修改人',
  252. prop: 'updateBy'
  253. }
  254. },
  255. {
  256. columnAttributes: {
  257. label: '修改时间',
  258. prop: 'updateTime'
  259. }
  260. },
  261. {
  262. columnAttributes: {
  263. label: '操作',
  264. },
  265. render: (h, { row, column, index }) => {
  266. return <div style="padding-left:10px">
  267. <el-button type="text" onClick={() => {
  268. if (this.isEditIndex === index) {
  269. this.isEditIndex = -1
  270. }
  271. this.formData.pgIncreItems.splice(index, 1)
  272. }}>删除</el-button>
  273. {this.isEditIndex == index && <el-button type="text" onClick={() => {
  274. if (this.panduancp()) {
  275. this.$refs.formRef.validateField(this.getVfyKey(index), (valid, invalidFields, errLabels) => {
  276. if (valid) {
  277. this.isEditIndex = -1
  278. }
  279. })
  280. }
  281. }}>确定</el-button>}
  282. {this.isEditIndex == -1 && <el-button type="text" onClick={() => {
  283. this.isEditIndex = index
  284. }}>编辑</el-button>}
  285. </div>
  286. }
  287. }
  288. ]
  289. },
  290. formItems() {
  291. return [
  292. {
  293. name: 'el-input',
  294. md: 8,
  295. attributes: { disabled: true, placeholder: '请输入' },
  296. formItemAttributes: {
  297. label: '所属商户',
  298. prop: 'companyWechatName',
  299. }
  300. },
  301. {
  302. name: 'slot-component',
  303. md: 16,
  304. formItemAttributes: { label: '', prop: '' },
  305. render: (h, { props }) => { return null }
  306. },
  307. {
  308. name: 'el-select',
  309. md: 8,
  310. options: [{ label: "延保", value: 1 }, { label: "清洗", value: 2 }],
  311. attributes: {
  312. placeholder: '请选择',
  313. clearable: true,
  314. filterable: true
  315. },
  316. formItemAttributes: {
  317. label: '服务类型',
  318. prop: 'type',
  319. rules: [...required]
  320. },
  321. events: {
  322. change: (val) => {
  323. if (val == 1) {
  324. this.formData.usedType = "YEAR"
  325. }
  326. }
  327. }
  328. },
  329. {
  330. name: 'slot-component',
  331. md: 16,
  332. formItemAttributes: { label: '', prop: '' },
  333. render: (h, { props }) => { return null }
  334. },
  335. {
  336. name: 'el-select',
  337. md: 8,
  338. options: [{ label: "使用次数", value: "COUNT" }, { label: "使用年限", value: "YEAR" }],
  339. attributes: {
  340. placeholder: '请选择',
  341. clearable: true,
  342. filterable: true,
  343. disabled: this.formData.type == 1
  344. },
  345. formItemAttributes: {
  346. label: '使用类型',
  347. prop: 'usedType',
  348. rules: [...required]
  349. }
  350. },
  351. {
  352. name: 'slot-component',
  353. md: 16,
  354. formItemAttributes: { label: '', prop: '' },
  355. render: (h, { props }) => { return null }
  356. },
  357. {
  358. name: 'el-input',
  359. md: 8,
  360. name: 'el-radio',
  361. options: [{ label: "上架", value: true }, { label: "下架", value: false }],
  362. formItemAttributes: {
  363. label: '状态',
  364. prop: 'status',
  365. rules: [...required]
  366. }
  367. },
  368. {
  369. md: 24,
  370. isShow: true,
  371. name: 'slot-component',
  372. formItemAttributes: {
  373. label: '服务内容',
  374. prop: 'pgIncreItems',
  375. rules: [...required]
  376. },
  377. render: (h, { props, onInput }) => {
  378. var { value } = props
  379. return (
  380. <div>
  381. <div style="margin-bottom:8px">
  382. <el-button onClick={() => {
  383. if (this.panduancp()) {
  384. if (this.formData.pgIncreItems.length == 0) {
  385. this.formData.pgIncreItems.push({
  386. "amount": "",
  387. "brandId": "",
  388. "brandName": "",
  389. "content": "",
  390. "limitNum": "",
  391. "mainId": "",
  392. "mainName": "",
  393. "websitAmount": "",
  394. "workerAmount": "",
  395. })
  396. this.isEditIndex = this.formData.pgIncreItems.length - 1
  397. } else {
  398. this.$refs.formRef.validateField(this.getVfyKey(this.isEditIndex), (valid, invalidFields, errLabels) => {
  399. if (valid) {
  400. this.formData.pgIncreItems.push({
  401. "amount": "",
  402. "brandId": "",
  403. "brandName": "",
  404. "content": "",
  405. "limitNum": "",
  406. "mainId": "",
  407. "mainName": "",
  408. "websitAmount": "",
  409. "workerAmount": "",
  410. })
  411. this.isEditIndex = this.formData.pgIncreItems.length - 1
  412. }
  413. })
  414. }
  415. }
  416. }}>添加</el-button>
  417. </div>
  418. <zj-table
  419. columns={this.columns}
  420. tableData={this.formData.pgIncreItems}
  421. tableAttributes={{
  422. size: 'mini',
  423. border: true,
  424. }} />
  425. </div>
  426. )
  427. }
  428. },
  429. {
  430. name: 'el-input',
  431. md: 24,
  432. attributes: {
  433. disabled: false,
  434. placeholder: '请输入',
  435. type: "textarea",
  436. autosize: { minRows: 2, maxRows: 4 },
  437. maxlength: 50,
  438. 'show-word-limit': true
  439. },
  440. formItemAttributes: {
  441. label: '服务介绍',
  442. prop: 'intro',
  443. rules: [...required]
  444. }
  445. },
  446. {
  447. md: 24,
  448. name: 'slot-component',
  449. formItemAttributes: {
  450. label: '服务说明',
  451. prop: 'reason',
  452. rules: [...required]
  453. },
  454. render: (h, { props, onInput }) => {
  455. var { value } = props
  456. return (
  457. <v-quill-editor value={value} onInput={onInput} />
  458. )
  459. }
  460. },
  461. {
  462. md: 24,
  463. name: 'slot-component',
  464. formItemAttributes: {
  465. label: '服务网点',
  466. prop: 'pgIncreWebsits',
  467. rules: [...required]
  468. },
  469. render: (h, { props, onInput }) => {
  470. var { value } = props
  471. return (
  472. <div>
  473. <div style="margin-bottom:8px">
  474. <el-button onClick={() => {
  475. this.formData.pgIncreWebsits.push({
  476. websitId: "",
  477. linkName: "",
  478. websitPhone: "",
  479. address: "",
  480. });
  481. this.websitIndex = this.formData.pgIncreWebsits.length - 1
  482. }}>添加</el-button>
  483. </div>
  484. <zj-table
  485. columns={[{
  486. columnAttributes: {
  487. label: '网点名称',
  488. prop: 'websitId'
  489. },
  490. render: (h, { row, column, index }) => {
  491. return <div>
  492. <el-form-item label="" label-width="0px" prop={`pgIncreWebsits.${index}.${column.columnAttributes.prop}`} rules={required}>
  493. <el-select
  494. value={row[column.columnAttributes.prop]}
  495. onInput={(val) => { row[column.columnAttributes.prop] = val }}
  496. disabled={!(this.websitIndex == index)}
  497. onChange={(val) => {
  498. if (val) {
  499. var data = this.websitList.find(item => item.value == val)
  500. row.linkName = data.data.linkName
  501. row.websitPhone = data.data.websitPhone
  502. row.address = data.data.address
  503. } else {
  504. row.linkName = ""
  505. row.websitPhone = ""
  506. row.address = ""
  507. }
  508. }}
  509. placeholder="请选择">
  510. {this.websitList.filter(item => (row.websitId == item.value || !this.formData.pgIncreWebsits.find(val => (val.websitId == item.value)))).map((item, index_) => <el-option key={index_} label={item.label} value={item.value}></el-option>)}
  511. </el-select>
  512. </el-form-item>
  513. </div>
  514. }
  515. },
  516. {
  517. columnAttributes: {
  518. label: '联系人',
  519. prop: 'linkName'
  520. }
  521. },
  522. {
  523. columnAttributes: {
  524. label: '联系电话',
  525. prop: 'websitPhone'
  526. }
  527. },
  528. {
  529. columnAttributes: {
  530. label: '地址',
  531. prop: 'address'
  532. }
  533. },
  534. {
  535. columnAttributes: {
  536. label: '操作',
  537. },
  538. render: (h, { row, column, index }) => {
  539. return <div style="padding-left:10px">
  540. {this.websitIndex == index ? <el-button type="text" onClick={() => {
  541. this.websitIndex = -1
  542. }}>确定</el-button> : null}
  543. {this.websitIndex != index ? <el-button type="text" onClick={() => {
  544. this.websitIndex = index
  545. }}>编辑</el-button> : null}
  546. <el-button type="text" onClick={() => {
  547. if (this.websitIndex == index) {
  548. this.websitIndex = -1
  549. }
  550. this.formData.pgIncreWebsits.splice(index, 1)
  551. }}>删除</el-button>
  552. </div>
  553. }
  554. }]}
  555. tableData={this.formData.pgIncreWebsits}
  556. tableAttributes={{
  557. size: 'mini',
  558. border: true,
  559. }} />
  560. </div>
  561. )
  562. }
  563. },
  564. {
  565. name: 'el-input',
  566. md: 24,
  567. attributes: { disabled: false, placeholder: '请输入', type: "textarea" },
  568. formItemAttributes: {
  569. label: '备注',
  570. prop: 'remark',
  571. rules: []
  572. }
  573. },
  574. ]
  575. }
  576. },
  577. methods: {
  578. // 列表请求函数
  579. getList: increConfigList,
  580. // 列表导出函数
  581. exportList: increConfigListExport,
  582. // 表格列解析渲染数据更改
  583. columnParsing(item, defaultData) {
  584. return defaultData
  585. },
  586. // 监听勾选变化
  587. selectionChange(data) {
  588. this.recordSelected = data
  589. },
  590. // 表格操作列
  591. operation() {
  592. return this.operationBtn({
  593. detail: {
  594. btnType: 'text',
  595. click: ({ row, index, column }) => {
  596. this.getDetail(row.id)
  597. }
  598. }
  599. })
  600. },
  601. panduancp() {
  602. try {
  603. this.formData.pgIncreItems.map((row, index) => {
  604. this.formData.pgIncreItems.map((item, index_) => {
  605. if (
  606. `${row.brandId}_${row.mainId}_${row.content}` == `${item.brandId}_${item.mainId}_${item.content}` &&
  607. index_ != index
  608. ) {
  609. throw new Error('');
  610. }
  611. })
  612. })
  613. } catch (error) {
  614. this.$message.warning('服务内容重复')
  615. return false
  616. }
  617. return true
  618. },
  619. getDetail(id) {
  620. increConfigDetail({ id }).then(res => {
  621. Object.assign(this.formData, res.data, {
  622. pgIncreWebsits: res.data.pgIncreWebsits || []
  623. })
  624. this.openForm()
  625. })
  626. },
  627. getVfyKey(index, bool = true) {
  628. return [
  629. ...(() => {
  630. if (bool) {
  631. return [
  632. `pgIncreItems`,
  633. ]
  634. }
  635. return []
  636. })(),
  637. ...(() => {
  638. if (index > -1) {
  639. return [
  640. `pgIncreItems.${index}.brandId`,
  641. `pgIncreItems.${index}.mainId`,
  642. `pgIncreItems.${index}.content`,
  643. `pgIncreItems.${index}.limitNum`,
  644. `pgIncreItems.${index}.amount`,
  645. `pgIncreItems.${index}.websitAmount`,
  646. `pgIncreItems.${index}.workerAmount`,
  647. ]
  648. }
  649. return []
  650. })()
  651. ]
  652. },
  653. openForm() {
  654. Promise.all([
  655. getDataDictionary({ "pageNum": 1, "pageSize": -1, "params": [{ "param": "a.status", "compare": "=", "value": "ON" }, { "param": "a.dict_type", "compare": "=", "value": "BRAND" }] }),
  656. getClassifyList({ type: 2, status: true }),
  657. getWebsit({ isIncre: true, status:true })
  658. ]).then(([res1, res2, res3]) => {
  659. // 获取品牌
  660. this.orderBrands = res1.data.records.map(item => ({
  661. value: item.dictCode,
  662. label: item.dictValue
  663. }))
  664. // 获取产品大类小类
  665. var classifyListLv2 = []
  666. this.classifyList = res2.data.map(item => {
  667. var { children, ...data } = item
  668. classifyListLv2.push(...(children || []))
  669. return {
  670. ...data
  671. }
  672. });
  673. this.classifyListLv2 = classifyListLv2
  674. this.websitList = res3.data.map(item => ({
  675. label: item.name,
  676. value: item.websitId,
  677. data: item
  678. }))
  679. var { companyWechatId, companyName } = JSON.parse(localStorage.getItem('greemall_user'))
  680. this.formData.companyWechatId = companyWechatId
  681. this.formData.companyWechatName = companyName
  682. // 打开弹窗
  683. this.formDialog = true
  684. })
  685. },
  686. // 关闭弹窗
  687. formCancel() {
  688. this.$refs.formRef.$refs.inlineForm.clearValidate()
  689. this.$data.formData = this.$options.data().formData
  690. this.isEditIndex = -1
  691. this.formDialog = false
  692. },
  693. formConfirm() {
  694. if (this.clickLook && this.panduancp()) {
  695. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  696. if (valid) {
  697. this.clickLook = false;
  698. ([increConfigAdd, increConfigUpdate][this.formData.id ? 1 : 0])({
  699. ...this.formData
  700. }).then(res => {
  701. this.$message({ type: 'success', message: `成功!` })
  702. this.formCancel()
  703. this.$refs.pageRef.refreshList()
  704. this.clickLook = true
  705. }).catch(() => {
  706. this.clickLook = true
  707. })
  708. }
  709. })
  710. } else {
  711. this.$message.warning('服务内容没有确认')
  712. }
  713. },
  714. }
  715. }
  716. </script>
  717. <style lang="scss">
  718. .redbordererr {
  719. .el-form-item {
  720. margin: 0 !important;
  721. overflow: hidden;
  722. }
  723. }
  724. </style>