123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
- var Controller = {
- index: () => {
- const { reactive, onMounted } = Vue
- const { ElMessageBox } = ElementPlus
- const index = {
- setup() {
- const state = reactive({
- data: [],
- order: '',
- sort: '',
- })
- function getData() {
- Fast.api.ajax({
- url: 'shopro/data/page',
- type: 'GET',
- data: {
- page: pagination.page,
- list_rows: pagination.list_rows,
- order: state.order,
- sort: state.sort,
- },
- }, function (ret, res) {
- state.data = res.data.data
- pagination.total = res.data.total
- return false
- }, function (ret, res) { })
- }
- function onChangeSort({ prop, order }) {
- state.order = order == 'ascending' ? 'asc' : 'desc';
- state.sort = prop;
- getData();
- }
- const pagination = reactive({
- page: 1,
- list_rows: 10,
- total: 0,
- })
- const batchHandle = reactive({
- data: [],
- })
- function onChangeSelection(val) {
- batchHandle.data = val
- }
- function onBatchHandle(type) {
- let ids = []
- batchHandle.data.forEach((item) => {
- ids.push(item.id)
- })
- switch (type) {
- case 'delete':
- ElMessageBox.confirm('此操作将删除, 是否继续?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning',
- }).then(() => {
- onDelete(ids.join(','))
- });
- break;
- }
- }
- function onAdd() {
- Fast.api.open("shopro/data/page/add?type=add", "添加", {
- callback() {
- getData()
- }
- })
- }
- function onEdit(id) {
- Fast.api.open(`shopro/data/page/edit?type=edit&id=${id}`, "编辑", {
- callback() {
- getData()
- }
- })
- }
- function onDelete(id) {
- Fast.api.ajax({
- url: `shopro/data/page/delete/id/${id}`,
- type: 'DELETE',
- }, function (ret, res) {
- getData()
- }, function (ret, res) { })
- }
- onMounted(() => {
- getData()
- })
- return {
- state,
- getData,
- onChangeSort,
- pagination,
- batchHandle,
- onChangeSelection,
- onBatchHandle,
- onAdd,
- onEdit,
- onDelete
- }
- }
- }
- createApp('index', index);
- },
- add: () => {
- Controller.form();
- },
- edit: () => {
- Controller.form();
- },
- form: () => {
- const { reactive, onMounted, getCurrentInstance } = Vue
- const addEdit = {
- setup() {
- const { proxy } = getCurrentInstance();
- const state = reactive({
- type: new URLSearchParams(location.search).get('type'),
- id: new URLSearchParams(location.search).get('id')
- })
- const form = reactive({
- model: {
- name: '',
- path: '',
- group: '',
- },
- rules: {
- name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
- path: [{ required: true, message: '请输入路径', trigger: 'blur' }],
- group: [{ required: true, message: '请输入分组', trigger: 'blur' }],
- },
- })
- function getDetail() {
- Fast.api.ajax({
- url: `shopro/data/page/detail/id/${state.id}`,
- type: 'GET',
- }, function (ret, res) {
- form.model = res.data;
- return false
- }, function (ret, res) { })
- }
- function onConfirm() {
- proxy.$refs['formRef'].validate((valid) => {
- if (valid) {
- Fast.api.ajax({
- url: state.type == 'add' ? 'shopro/data/page/add' : `shopro/data/page/edit/id/${state.id}`,
- type: 'POST',
- data: form.model
- }, function (ret, res) {
- Fast.api.close()
- }, function (ret, res) { })
- }
- });
- }
- onMounted(() => {
- state.type == 'edit' && getDetail()
- })
- return {
- state,
- form,
- onConfirm
- }
- }
- }
- createApp('addEdit', addEdit);
- },
- select: () => {
- const { ref, reactive, onMounted, getCurrentInstance, nextTick } = Vue
- const select = {
- setup() {
- const { proxy } = getCurrentInstance();
- const state = reactive({
- data: [],
- height: [],
- currentIndex: 0,
- selected: {},
- });
- async function getSelect() {
- Fast.api.ajax({
- url: 'shopro/data/page/select',
- type: 'GET',
- }, function (ret, res) {
- state.data = res.data;
- nextTick(() => {
- getHeight();
- });
- return false
- }, function (ret, res) { })
- }
- function onChangeIndex(index) {
- proxy.$refs.rightScrollRef.setScrollTop(state.height[index]);
- state.currentIndex = index;
- }
- function onRightScroll(e) {
- let index = state.height.findIndex((item) => {
- return item > e.scrollTop;
- });
- if (index > 0) {
- state.currentIndex = index - 1;
- } else if (index == -1) {
- state.currentIndex = state.height.length - 1;
- }
- }
- function onSelect(link) {
- state.selected = { ...link };
- if (link.path == '/pages/index/page') {
- Fast.api.open('shopro/decorate/template/select', "选择自定义页面", {
- callback(data) {
- state.selected.path += (!isEmpty(data.id) ? '?id=' + data.id : '');
- }
- })
- } else if (link.path == '/pages/goods/index') {
- Fast.api.open('shopro/goods/goods/select', "选择商品", {
- callback(data) {
- state.selected.path += (!isEmpty(data.id) ? '?id=' + data.id : '');
- }
- })
- } else if (link.path == '/pages/index/category') {
- Fast.api.open('shopro/category/select?from=page-category', "选择分类", {
- callback(data) {
- state.selected.path += (!isEmpty(data.ids) ? '?id=' + data.ids : '');
- }
- })
- } else if (link.path == '/pages/goods/list') {
- Fast.api.open('shopro/category/select?from=page-goods', "选择分类", {
- callback(data) {
- state.selected.path += (!isEmpty(data.ids) ? '?categoryId=' + data.ids : '');
- }
- })
- } else if (link.path == '/pages/public/richtext') {
- Fast.api.open('shopro/data/richtext/select', "选择富文本", {
- callback(data) {
- state.selected.path += (!isEmpty(data.id) ? '?id=' + data.id : '');
- }
- })
- } else if (
- link.path == '/pages/activity/groupon/list' ||
- link.path == '/pages/activity/seckill/list'
- ) {
- let activityType = {
- groupon: 'groupon,groupon_ladder',
- seckill: 'seckill',
- };
- Fast.api.open(`shopro/activity/activity/select?type=${activityType[link.path.split('/')[3]]}`, "选择活动", {
- callback(data) {
- state.selected.path += (!isEmpty(data.id) ? '?id=' + data.id : '');
- }
- })
- } else if (link.path == '/pages/goods/groupon' || link.path == '/pages/goods/seckill') {
- let activityType = {
- groupon: 'groupon,groupon_ladder',
- seckill: 'seckill',
- };
- Fast.api.open(`shopro/activity/activity/select?type=${activityType[link.path.split('/').pop()]}`, "选择活动", {
- callback(data) {
- state.selected.path += (!isEmpty(data.id) ? '?activity_id=' + data.id : '');
- Fast.api.open(`shopro/goods/goods/select?goods_ids=${data.goods_ids}`, "选择商品", {
- callback(data) {
- state.selected.path += (!isEmpty(data.id) ? '&id=' + data.id : '');
- }
- })
- }
- })
- } else if (link.path == '/pages/goods/score') {
- Fast.api.open(`shopro/app/score_shop/select`, "选择积分商品", {
- callback(data) {
- state.selected.path += (!isEmpty(data.id) ? '?id=' + data.id : '');
- }
- })
- } else if (link.path == '/pages/coupon/detail') {
- Fast.api.open(`shopro/coupon/select?status=normal`, "选择优惠券", {
- callback(data) {
- state.selected.path += (!isEmpty(data.id) ? '?id=' + data.id : '');
- }
- })
- }
- }
- const rightRef = {};
- function setRightRef(el, item, index) {
- rightRef[item.group + index] = el;
- }
- function getHeight() {
- state.height = [];
- for (let e in rightRef) {
- state.height.push(rightRef[e].offsetTop);
- }
- }
- const platformUrl = ref({});
- function getPlatformUrl() {
- Fast.api.ajax({
- url: 'shopro/config/getPlatformUrl',
- type: 'GET',
- }, function (ret, res) {
- platformUrl.value = res.data
- return false
- }, function (ret, res) { })
- }
- async function onConfirm() {
- state.selected.fullPath = {
- url: `${platformUrl.value.url.endsWith('/')
- ? platformUrl.value.url.substr(0, platformUrl.value.url.length - 1)
- : platformUrl.value.url
- }${state.selected.path}`,
- appid: platformUrl.value.appid,
- pagepath: state.selected.path
- ? '/pages/index/index?page=' + encodeURIComponent(state.selected.path)
- : '/pages/index/index',
- };
- Fast.api.close(state.selected)
- }
- onMounted(() => {
- getSelect();
- getPlatformUrl();
- });
- return {
- state,
- getSelect,
- onRightScroll,
- onChangeIndex,
- onSelect,
- rightRef,
- setRightRef,
- getHeight,
- platformUrl,
- getPlatformUrl,
- onConfirm,
- }
- }
- }
- createApp('select', select);
- }
- };
- return Controller;
- });
|