123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- <template>
- <div class="module-box link-select" :class="styleType && 'style'+styleType">
- <div class="link-select__warp">
- <div class="module-box__title">
- <label class="module-box__label">{{title}}</label>
- </div>
- <el-select class="link-select__select" :popper-append-to-body="false" v-model="selsectValue" placeholder="请选择跳转到的页面" @change="selectChanged">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- </el-option>
- </el-select>
- </div>
- <div class="link-select__confirm" v-show="confirmBtnVisible">
- <div class="btn" v-if="!selectName" @click="openDialog">
- <span class="iconfont"></span> 添加{{typeText}}
- </div>
- <div class="info" v-else>
- <span class="text">{{typeText}}</span>
- <span class="name">{{selectName}}</span>
- <span class="iconfont" @click="openDialog"></span>
- <span class="iconfont" @click="delSelect"></span>
- </div>
- </div>
- <el-dialog width="600px" title="选择类别" :visible.sync="categoryVisible">
- <category-select ref="categorySelect"></category-select>
- <span slot="footer" class="dialog-footer">
- <el-button @click="categoryVisible = false">取 消</el-button>
- <el-button type="primary" @click="categoryChanged">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog title="选择商品" :visible.sync="productVisible">
- <product-select ref="productSelect"></product-select>
- <span slot="footer" class="dialog-footer">
- <el-button @click="productVisible = false">取 消</el-button>
- <el-button type="primary" @click="productChanged">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog title="选择店辅" :visible.sync="shopVisible">
- <shop-select ref="shopSelect"></shop-select>
- <span slot="footer" class="dialog-footer">
- <el-button @click="shopVisible = false">取 消</el-button>
- <el-button type="primary" @click="shopChanged">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog title="选择自定义页面" :visible.sync="customVisible">
- <custom-page-select ref="customPageSelect"></custom-page-select>
- <span slot="footer" class="dialog-footer">
- <el-button @click="customVisible = false">取 消</el-button>
- <el-button type="primary" @click="customChanged">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog title="选择公告" :visible.sync="noticeVisible">
- <notice-select ref="noticeSelect"></notice-select>
- <span slot="footer" class="dialog-footer">
- <el-button @click="noticeVisible = false">取 消</el-button>
- <el-button type="primary" @click="noticeChanged">确 定</el-button>
- </span>
- </el-dialog>
- </div>
- </template>
- <script>
- import ProductSelect from './product-select'
- import ShopSelect from './shop-select'
- import CategorySelect from './category-select'
- import CustomPageSelect from './custom-page-select'
- import NoticeSelect from "./notice-select";
- export default {
- name: 'tool-select-link',
- components: {NoticeSelect, CustomPageSelect, CategorySelect, ShopSelect, ProductSelect },
- data () {
- return {
- selsectValue: '',
- confirmBtnVisible: false,
- selectName: '',
- typeText: '',
- productVisible: false,
- shopVisible: false,
- categoryVisible: false,
- customVisible: false,
- noticeVisible: false
- }
- },
- props: {
- title: {
- type: String,
- default: '链接'
- },
- styleType: {
- type: String,
- default: ''
- },
- linkObj: {
- type: Object,
- default: () => ({
- selsectValue: '',
- selectName: '',
- typeText: '',
- url: ''
- })
- },
- options: {
- type: Array,
- default: () => [
- // {
- // value: '/index',
- // label: '首页'
- // },
- {
- value: '/category',
- label: '分类页面'
- },
- {
- value: '/shop',
- label: '店辅主页'
- },
- {
- value: '/detail',
- label: '商品详情'
- },
- {
- value: '/notice',
- label: '公告'
- },
- // {
- // value: '/custom',
- // label: '自定义页面'
- // }
- ]
- }
- },
- mounted () {
- this.selsectValue = this.linkObj.selsectValue
- this.selectName = this.linkObj.selectName
- this.typeText = this.linkObj.typeText
- this.confirmBtnVisible = this.selsectValue !== '/index' && this.selsectValue
- },
- methods: {
- // 链接选择
- selectChanged (value) {
- this.categoryVisible = false
- this.shopVisible = false
- this.productVisible = false
- this.confirmBtnVisible = true
- this.selectName = ''
- this.typeText = ''
- switch (value) {
- case '/category':
- this.typeText = '类别'
- break
- case '/shop':
- this.typeText = '店辅'
- break
- case '/detail':
- this.typeText = '商品'
- break
- case '/custom':
- this.typeText = '自定义'
- case '/notice':
- this.typeText = '公告'
- break
- default:
- this.confirmBtnVisible = false
- let linkObj = {
- selsectValue: this.selsectValue,
- selectName: '',
- typeText: '',
- url: '/'
- }
- this.$emit('update:linkObj', linkObj)
- }
- },
- // 打开添加弹窗
- openDialog () {
- switch (this.typeText) {
- case '类别':
- this.categoryVisible = true
- break
- case '店辅':
- this.shopVisible = true
- break
- case '商品':
- this.productVisible = true
- break
- case '自定义':
- this.customVisible = true
- case '公告':
- this.noticeVisible = true
- break
- }
- },
- // 类别选择
- categoryChanged () {
- let nodesObj = this.$refs.categorySelect.$refs['cascader'].getCheckedNodes()
- if (nodesObj) {
- var data = nodesObj[0].data
- this.selectName = nodesObj[0].label
- this.categoryVisible = false
- let linkObj = {
- selsectValue: this.selsectValue,
- selectName: this.selectName,
- typeText: this.typeText,
- data: data
- }
- this.$emit('update:linkObj', linkObj)
- }
- },
- // 商品选择
- productChanged () {
- console.log(this.$refs.productSelect)
- var data = this.$refs.productSelect.tableRadio
- this.productVisible = false
- this.selectName = this.$refs.productSelect.tableRadio.productName
- let linkObj = {
- selsectValue: this.selsectValue,
- selectName: this.selectName,
- typeText: this.typeText,
- data: data
- }
- this.$emit('update:linkObj', linkObj)
- },
- // 店辅选择
- shopChanged () {
- var data = this.$refs.shopSelect.tableRadio
- this.shopVisible = false
- this.selectName = this.$refs.shopSelect.tableRadio.shopName
- let linkObj = {
- selsectValue: this.selsectValue,
- selectName: this.selectName,
- typeText: this.typeText,
- data: data
- }
- this.$emit('update:linkObj', linkObj)
- },
- // 自定义页面选择
- customChanged () {
- var data = this.$refs.customPageSelect.tableRadio
- this.customVisible = false
- this.selectName = this.$refs.customPageSelect.tableRadio.name
- let linkObj = {
- selsectValue: this.selsectValue,
- selectName: this.selectName,
- typeText: this.typeText,
- data: data
- }
- this.$emit('update:linkObj', linkObj)
- },
- // 公告选择
- noticeChanged () {
- var data = this.$refs.noticeSelect.tableRadio
- this.noticeVisible = false
- this.selectName = this.$refs.noticeSelect.tableRadio.noticeTitle
- let linkObj = {
- selsectValue: this.selsectValue,
- selectName: this.selectName,
- typeText: this.typeText,
- data: data
- }
- this.$emit('update:linkObj', linkObj)
- },
- // 删除选择
- delSelect () {
- let linkObj = {
- selsectValue: '',
- selectName: '',
- typeText: '',
- data: {}
- }
- this.$emit('update:linkObj', linkObj)
- }
- },
- watch: {
- linkObj: {
- handler (newVal, oldVal) {
- this.selsectValue = newVal.selsectValue
- this.selectName = newVal.selectName
- this.typeText = newVal.typeText
- this.confirmBtnVisible = this.selsectValue !== '/index' && this.selsectValue
- },
- deep: true
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .link-select{
- &__select{
- width: 100%;
- }
- &__confirm{
- margin-top: 10px;
- .btn{
- text-align: center;
- background-color: $mainColor;
- color: #fff;
- height: 36px;
- line-height: 36px;
- border-radius: 4px;
- cursor: pointer;
- }
- .info{
- height: 36px;
- line-height: 36px;
- border-radius: 4px;
- padding: 0 10px;
- border:1px solid $mainColor;
- display: flex;
- .text{
- color: $mainColor;
- }
- .name{
- flex: 1;
- margin-left: 10px;
- overflow: hidden;
- text-overflow:ellipsis;
- white-space: nowrap;
- }
- .iconfont{
- margin-left: 10px;
- cursor: pointer;
- color: #666;
- }
- }
- }
- &.style1{
- .link-select__warp{
- display: flex;
- justify-content: space-between;
- width: 100%;
- align-items: center;
- }
- width: 100%;
- margin-bottom: 0;
- .module-box__title{
- margin-bottom: 0;
- }
- .link-select__select{
- width: auto;
- }
- }
- }
- </style>
|