123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- <template>
- <view class="page-content">
- <view class="cu-form-group justify-between">
- <view class="" @tap="cancal()">取消</view>
- <view class="text-title">{{title}}</view>
- <view :style="{color: themeColor}" @tap="submit()">确认</view>
- </view>
- <scroll-view scroll-y style="max-height: 600rpx;">
- <template v-if="checkedList.length">
- <block v-for="(item, index) in checkedList" :key="index">
- <view class="cu-form-group justify-between" @tap="changeCheck(item)">
- <view class="my-items-title">{{item[showParam]}} <text style="margin-left: 10rpx;">{{item[showParam]?item[showOther] :""}}</text></view>
- <template v-if="item.isCheck">
- <view class="iconfont icon-duihao" :style="{color: themeColor}"></view>
- </template>
- </view>
- </block>
- </template>
- <template v-else>
- <view class="text-center">暂无数据~</view>
- </template>
- </scroll-view>
- <slot></slot>
- </view>
- </template>
- <script>
- Object.clone = (obj, func = false) => {
- if (!obj || !(obj instanceof Object) || (typeof obj == "function")) {
- if (typeof obj == "function" && func) {
- return null;
- }
- return obj;
- }
- var constructor = obj.constructor;
- var result = new constructor();
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- result[key] = Object.clone(obj[key]);
- }
- }
- return result;
- };
- /**********
- * @author fjj
- * @list 需要选择的列表数据,如果没有传空数组
- * @showParam 显示字段
- * @defaultValue 默认选中数据,数据对象格式
- * @title 标题名称
- * @isMultiple 是否多选,默认多选
- * @cancel 方法 点击取消时触发
- * @change 方法 点击确定时触发 返回selectedList数据
- * ********/
- export default {
- props: {
- list: {
- require: true,
- type: Array,
- default () {
- return [];
- },
- },
- isMultiple: {
- require: false,
- type: Boolean,
- default: true,
- },
- showParam: {
- require: true,
- type: String,
- default: 'name',
- },
- showOther: {
- require: true,
- type: String,
- default: '',
- },
- defaultValue: {
- require: true,
- type: Array,
- default () {
- return [];
- },
- },
- title: {
- require: true,
- type: String,
- },
- },
- watch: {
- list(arr) {
- this.checkedList = Object.clone(arr);
- this.resetDefaultValueFun();
- },
- },
- computed: {
- },
- data() {
- return {
- checkedList: [],
- themeColor: this.$ThemeColor || '#1890FF',
- };
- },
- mounted() {
- this.checkedList = Object.clone(this.list);
- this.resetDefaultValueFun();
- },
- methods: {
- resetDefaultValueFun() {
- if (this.defaultValue.length) {
- this.defaultValue.map(arrParam => {
- for (let i = 0; i < this.checkedList.length; i++) {
- if (arrParam === this.checkedList[i][this.showParam]) {
- this.checkedList[i].isCheck = true;
- return;
- }
- }
- });
- }
- },
- resetCheckedList() {
- this.checkedList = Object.clone(this.list);
- this.resetDefaultValueFun();
- },
- cancal() {
- this.resetCheckedList();
- this.$emit("cancel");
- },
- submit() {
- this.$emit("change", {
- selectedList: this.checkedList.filter((item) => {
- return item.isCheck === true;
- }),
- })
- },
- changeCheck(item) {
- if (!this.isMultiple) {
- this.checkedList.map((item) => {
- return item.isCheck = false;
- })
- }
- item.isCheck = item.isCheck ? false : true;
- this.$forceUpdate();
- },
- }
- }
- </script>
- <style lang="scss" scoped>
- .page-content {
- background: #FFFFFF;
- padding: 0;
- .text-title {
- color: $uni-text-color;
- }
- .text-theme {
- //设定自己的主题色
- }
- .cu-form-group {
- font-size: 30rpx;
- color: $uni-text-color;
- background-color: #ffffff;
- padding: 1rpx 30rpx;
- display: flex;
- -webkit-box-align: center;
- align-items: center;
- min-height: 100rpx;
- }
- .justify-between {
- -webkit-box-pack: justify;
- justify-content: space-between;
- }
- .text-center {
- text-align: center;
- }
- }
- //勾选符号
- // @font-face {
- // font-family: "iconfont";
- // src: url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAKMAAsAAAAABjQAAAJCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcApAXAE2AiQDCAsGAAQgBYRtBzAbggXIHpIkRaoQRWE8BAUAhAg+9vv9nmuIa1TNKpEhUQKVBCVQOoRK8vy1hHc1bfdP6w7cjv8uKbWo1L2kX+ayoTeP0Yzv40HyjuJQSNJSa9Mn7p3+CfRBRj2g3PaksSZN6gLq4kAKcC+MukhKKOOGsQtcwn0ClXplpHZGp5dZrYy1LBB3jqWx2lxYJmO5cqGo2ZuJJ7ny5CF5wzyG34//SlFLIk9ZDfu3Iybr/1VlF6T3pWPXPiFCQIdzpJjGZMRxbXpXhWBchcp0pUFsX7XBr6pSyXeJvdoF++us6mrQDRX3pHSXCpDAbY1Vi45RbyVqr+4+Vv41lNf8mPUeld/ee48O4td8LZrlbRstDQ91t8/t+uHP0te0gaUQLDR1zCstK//lVRn4WRjsDm2Zfl6mfA+e4E8oe/ZkutpyJpmqrB1M1J6hqVIlSrC/0ddYS8tp86FcywhvmZ4UqXLDZMZOI1dlBoVy66g0ZexwlSZShcgqMOkCINS7l+/T9AKRqvdOZuwncq3+UKiPClQ6jaYzq4yGU78tUSM0Qd8BxxAhd9xUH9UuopX4msyqQ34VZezEoJgrFHNjGKKcY0O8aZWIOHApAhgFj6HvC4ikcNGgnE0UdebzvO5FOUMErN42CWkIMgHdDuAwCCHuDyf1pc8vQpaETyNbumqyq5AUcyYHRTmFHuSYIezVdS/PxDZZSgjhACcJATAKZiGfTwBR/SwXMpAce0Qy0ilv9+N9Dbn1TcHXHYFKljUJe1qquEkcWxOMAQ==') format('woff2');
- // }
- .iconfont {
- border: 2px solid #007aff;
- border-left: 0;
- border-top: 0;
- height: 12px;
- width: 6px;
- transform-origin: center;
- /* #ifndef APP-NVUE */
- transition: all 0.3s;
- /* #endif */
- transform: rotate(45deg);
- }
- .icon-duihao:before {
- // content: "\e60b";
- }
- </style>
|