├── stu-app
├── skyeye.keystore
├── static
│ ├── logo.png
│ ├── mine
│ │ ├── pwd.png
│ │ ├── about.png
│ │ ├── card.png
│ │ ├── calendar.png
│ │ ├── message.png
│ │ ├── problem.png
│ │ ├── question.png
│ │ └── no-userphoto.png
│ ├── common
│ │ ├── to.png
│ │ ├── empty.png
│ │ ├── exam.png
│ │ └── endExam.png
│ ├── login-icon.png
│ ├── tabBar
│ │ ├── mine.png
│ │ ├── customer.png
│ │ ├── message.png
│ │ ├── mine-se.png
│ │ ├── customer-se.png
│ │ ├── message-se.png
│ │ ├── sparepart.png
│ │ ├── workbench.png
│ │ ├── workorder.png
│ │ ├── sparepart-se.png
│ │ ├── workbench-se.png
│ │ └── workorder-se.png
│ └── chunLei-modal
│ │ └── close.png
├── .gitignore
├── components
│ ├── mescroll-uni
│ │ ├── mescroll-body.css
│ │ ├── mescroll-uni.css
│ │ ├── mixins
│ │ │ ├── mescroll-comp.js
│ │ │ ├── mescroll-more-item.js
│ │ │ └── mescroll-more.js
│ │ ├── components
│ │ │ ├── mescroll-up.css
│ │ │ ├── mescroll-up.vue
│ │ │ ├── mescroll-down.css
│ │ │ ├── mescroll-down.vue
│ │ │ ├── mescroll-top.vue
│ │ │ └── mescroll-empty.vue
│ │ ├── mescroll-uni-option.js
│ │ └── mescroll-mixins.js
│ ├── ly-tree
│ │ └── tool
│ │ │ └── util.js
│ ├── uni-list
│ │ ├── uni-list.vue
│ │ ├── uni-refresh.vue
│ │ └── uni-refresh.wxs
│ ├── chunLei-modal
│ │ └── tabMask.js
│ ├── uni-icons
│ │ └── icons.js
│ ├── pickerAddress
│ │ └── pickerAddress.vue
│ ├── uni-badge
│ │ └── uni-badge.vue
│ ├── vmeitime-http
│ │ └── index.js
│ └── watch-login
│ │ └── watch-button.vue
├── .project
├── App.vue
├── pages
│ ├── exam
│ │ ├── endExam
│ │ │ ├── endExamList.vue
│ │ │ └── endExamListItem.vue
│ │ └── waitExam
│ │ │ ├── waitExamList.vue
│ │ │ └── waitExamListItem.vue
│ ├── common
│ │ ├── webView.vue
│ │ └── imgPreview.vue
│ ├── mine
│ │ ├── myMation.vue
│ │ └── myEditPwd.vue
│ └── workbench
│ │ └── workbench.vue
├── main.js
├── uni.scss
└── socket.js
├── cloud-seal
├── skyeye.keystore
├── static
│ ├── logo.png
│ ├── common
│ │ ├── to.png
│ │ └── empty.png
│ ├── login-icon.png
│ ├── mine
│ │ ├── about.png
│ │ ├── card.png
│ │ ├── pwd.png
│ │ ├── message.png
│ │ ├── problem.png
│ │ ├── calendar.png
│ │ └── question.png
│ ├── tabBar
│ │ ├── mine.png
│ │ ├── customer.png
│ │ ├── message.png
│ │ ├── mine-se.png
│ │ ├── message-se.png
│ │ ├── sparepart.png
│ │ ├── workbench.png
│ │ ├── workorder.png
│ │ ├── customer-se.png
│ │ ├── sparepart-se.png
│ │ ├── workbench-se.png
│ │ └── workorder-se.png
│ ├── needdelete
│ │ ├── face.jpg
│ │ ├── icon_file.png
│ │ ├── icon_note.png
│ │ ├── icon_notes.png
│ │ ├── icon_holiday.png
│ │ ├── icon_journal.png
│ │ └── icon_attendance.png
│ ├── fileconsole
│ │ ├── share.png
│ │ ├── my-share.png
│ │ ├── new-folder.png
│ │ └── my-recycle-bin.png
│ ├── chunLei-modal
│ │ └── close.png
│ └── workordericon
│ │ ├── workorder-add.png
│ │ ├── workorder-all.png
│ │ ├── workorder-do.png
│ │ ├── workorder-sign.png
│ │ ├── workorder-wechat.png
│ │ ├── workorder-complate.png
│ │ ├── workorder-evaluate.png
│ │ ├── workorder-examine.png
│ │ ├── workorder-recepit.png
│ │ ├── workorder-success.png
│ │ └── workorder-waitperson.png
├── .gitignore
├── components
│ ├── mescroll-uni
│ │ ├── mescroll-body.css
│ │ ├── mescroll-uni.css
│ │ ├── mixins
│ │ │ ├── mescroll-comp.js
│ │ │ ├── mescroll-more-item.js
│ │ │ └── mescroll-more.js
│ │ ├── components
│ │ │ ├── mescroll-up.css
│ │ │ ├── mescroll-up.vue
│ │ │ ├── mescroll-down.css
│ │ │ ├── mescroll-down.vue
│ │ │ ├── mescroll-top.vue
│ │ │ └── mescroll-empty.vue
│ │ ├── mescroll-uni-option.js
│ │ └── mescroll-mixins.js
│ ├── ly-tree
│ │ └── tool
│ │ │ └── util.js
│ ├── uni-list
│ │ ├── uni-list.vue
│ │ ├── uni-refresh.vue
│ │ └── uni-refresh.wxs
│ ├── chunLei-modal
│ │ └── tabMask.js
│ ├── uni-icons
│ │ └── icons.js
│ ├── pickerAddress
│ │ └── pickerAddress.vue
│ ├── uni-badge
│ │ └── uni-badge.vue
│ └── watch-login
│ │ └── watch-button.vue
├── .project
├── App.vue
├── pages
│ ├── notice
│ │ ├── noticeDetail.vue
│ │ └── myNotice
│ │ │ ├── myNoticeList.vue
│ │ │ └── myNoticeListItem.vue
│ ├── product
│ │ ├── productAllList
│ │ │ ├── productAllListItem.vue
│ │ │ └── productAllList.vue
│ │ ├── productChoose.vue
│ │ └── productChooseItem.vue
│ ├── sparepart
│ │ ├── sparepartAllList
│ │ │ ├── sparepartAllListItem.vue
│ │ │ └── sparepartAllList.vue
│ │ ├── sparepartChoose
│ │ │ ├── sparepartChoose.vue
│ │ │ └── sparepartChooseItem.vue
│ │ ├── sparepartMyUse
│ │ │ ├── sparepartMyUseList.vue
│ │ │ └── sparepartMyUseListItem.vue
│ │ ├── sparepartMyApply
│ │ │ ├── sparepartMyApplyList.vue
│ │ │ └── sparepartMyApplyListItem.vue
│ │ ├── sparepartMyOrder
│ │ │ ├── sparepartMyOrder.vue
│ │ │ └── itemModel.vue
│ │ └── sparepartExamine
│ │ │ ├── itemModel.vue
│ │ │ └── sparepartExamine.vue
│ ├── customer
│ │ ├── customerList.vue
│ │ ├── customerChoose.vue
│ │ ├── customerListItem.vue
│ │ └── customerChooseItem.vue
│ ├── workorder
│ │ ├── workorderChoose
│ │ │ ├── workorderChoose.vue
│ │ │ └── workorderChooseItem.vue
│ │ ├── workMyWriteorder
│ │ │ ├── workMyWriteorder.vue
│ │ │ └── workMyWriteorderItem.vue
│ │ ├── workorderState
│ │ │ └── workorderState.vue
│ │ └── workAllorderState
│ │ │ └── workAllorderState.vue
│ ├── fileconsole
│ │ ├── recycleBin
│ │ │ ├── recycleBinList.vue
│ │ │ └── recycleBinItem.vue
│ │ └── myShareFile
│ │ │ ├── myShareFileList.vue
│ │ │ └── myShareFileItem.vue
│ ├── message
│ │ └── messageItem
│ │ │ └── groupItem.vue
│ ├── worker
│ │ ├── workerChoose.vue
│ │ └── workerChooseItem.vue
│ ├── common
│ │ ├── webView.vue
│ │ └── imgPreview.vue
│ ├── user
│ │ └── userChoose
│ │ │ └── userChooseState.vue
│ ├── mine
│ │ ├── myEditPwd.vue
│ │ └── myMation.vue
│ └── workbench
│ │ └── workbench.vue
├── main.js
├── uni.scss
└── socket.js
├── .gitignore
├── README.en.md
└── README.md
/stu-app/skyeye.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/skyeye.keystore
--------------------------------------------------------------------------------
/stu-app/static/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/logo.png
--------------------------------------------------------------------------------
/cloud-seal/skyeye.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/skyeye.keystore
--------------------------------------------------------------------------------
/cloud-seal/static/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/logo.png
--------------------------------------------------------------------------------
/stu-app/static/mine/pwd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/mine/pwd.png
--------------------------------------------------------------------------------
/stu-app/static/common/to.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/common/to.png
--------------------------------------------------------------------------------
/stu-app/static/login-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/login-icon.png
--------------------------------------------------------------------------------
/stu-app/static/mine/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/mine/about.png
--------------------------------------------------------------------------------
/stu-app/static/mine/card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/mine/card.png
--------------------------------------------------------------------------------
/cloud-seal/static/common/to.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/common/to.png
--------------------------------------------------------------------------------
/cloud-seal/static/login-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/login-icon.png
--------------------------------------------------------------------------------
/cloud-seal/static/mine/about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/mine/about.png
--------------------------------------------------------------------------------
/cloud-seal/static/mine/card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/mine/card.png
--------------------------------------------------------------------------------
/cloud-seal/static/mine/pwd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/mine/pwd.png
--------------------------------------------------------------------------------
/stu-app/static/common/empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/common/empty.png
--------------------------------------------------------------------------------
/stu-app/static/common/exam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/common/exam.png
--------------------------------------------------------------------------------
/stu-app/static/mine/calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/mine/calendar.png
--------------------------------------------------------------------------------
/stu-app/static/mine/message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/mine/message.png
--------------------------------------------------------------------------------
/stu-app/static/mine/problem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/mine/problem.png
--------------------------------------------------------------------------------
/stu-app/static/mine/question.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/mine/question.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/mine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/mine.png
--------------------------------------------------------------------------------
/cloud-seal/static/common/empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/common/empty.png
--------------------------------------------------------------------------------
/cloud-seal/static/mine/message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/mine/message.png
--------------------------------------------------------------------------------
/cloud-seal/static/mine/problem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/mine/problem.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/mine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/mine.png
--------------------------------------------------------------------------------
/stu-app/static/common/endExam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/common/endExam.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/customer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/customer.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/message.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/mine-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/mine-se.png
--------------------------------------------------------------------------------
/cloud-seal/static/mine/calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/mine/calendar.png
--------------------------------------------------------------------------------
/cloud-seal/static/mine/question.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/mine/question.png
--------------------------------------------------------------------------------
/cloud-seal/static/needdelete/face.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/needdelete/face.jpg
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/customer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/customer.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/message.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/message.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/mine-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/mine-se.png
--------------------------------------------------------------------------------
/stu-app/static/mine/no-userphoto.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/mine/no-userphoto.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/customer-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/customer-se.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/message-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/message-se.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/sparepart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/sparepart.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/workbench.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/workbench.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/workorder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/workorder.png
--------------------------------------------------------------------------------
/cloud-seal/static/fileconsole/share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/fileconsole/share.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/message-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/message-se.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/sparepart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/sparepart.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/workbench.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/workbench.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/workorder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/workorder.png
--------------------------------------------------------------------------------
/stu-app/static/chunLei-modal/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/chunLei-modal/close.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/sparepart-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/sparepart-se.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/workbench-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/workbench-se.png
--------------------------------------------------------------------------------
/stu-app/static/tabBar/workorder-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/stu-app/static/tabBar/workorder-se.png
--------------------------------------------------------------------------------
/cloud-seal/static/chunLei-modal/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/chunLei-modal/close.png
--------------------------------------------------------------------------------
/cloud-seal/static/fileconsole/my-share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/fileconsole/my-share.png
--------------------------------------------------------------------------------
/cloud-seal/static/needdelete/icon_file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/needdelete/icon_file.png
--------------------------------------------------------------------------------
/cloud-seal/static/needdelete/icon_note.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/needdelete/icon_note.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/customer-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/customer-se.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/sparepart-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/sparepart-se.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/workbench-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/workbench-se.png
--------------------------------------------------------------------------------
/cloud-seal/static/tabBar/workorder-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/tabBar/workorder-se.png
--------------------------------------------------------------------------------
/cloud-seal/static/fileconsole/new-folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/fileconsole/new-folder.png
--------------------------------------------------------------------------------
/cloud-seal/static/needdelete/icon_notes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/needdelete/icon_notes.png
--------------------------------------------------------------------------------
/cloud-seal/static/needdelete/icon_holiday.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/needdelete/icon_holiday.png
--------------------------------------------------------------------------------
/cloud-seal/static/needdelete/icon_journal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/needdelete/icon_journal.png
--------------------------------------------------------------------------------
/cloud-seal/static/fileconsole/my-recycle-bin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/fileconsole/my-recycle-bin.png
--------------------------------------------------------------------------------
/cloud-seal/static/needdelete/icon_attendance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/needdelete/icon_attendance.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-add.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-all.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-do.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-do.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-sign.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-sign.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-wechat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-wechat.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-complate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-complate.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-evaluate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-evaluate.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-examine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-examine.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-recepit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-recepit.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-success.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-success.png
--------------------------------------------------------------------------------
/cloud-seal/static/workordericon/workorder-waitperson.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/main0c/cloud-after-sale/HEAD/cloud-seal/static/workordericon/workorder-waitperson.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.class
2 |
3 | # Package Files #
4 | *.war
5 | *.ear
6 |
7 | class
8 | .settings
9 | *.classpath
10 | /bin
11 | classes
12 | /target/
13 | /unpackage/
14 | /.project/
15 | /logs/
16 | /.idea/
17 | *.iml
--------------------------------------------------------------------------------
/stu-app/.gitignore:
--------------------------------------------------------------------------------
1 | *.class
2 |
3 | # Package Files #
4 | *.war
5 | *.ear
6 |
7 | class
8 | .settings
9 | *.classpath
10 | /bin
11 | classes
12 | /target/
13 | /unpackage/
14 | /.project/
15 | /logs/
16 | /.idea/
17 | *.iml
--------------------------------------------------------------------------------
/cloud-seal/.gitignore:
--------------------------------------------------------------------------------
1 | *.class
2 |
3 | # Package Files #
4 | *.war
5 | *.ear
6 |
7 | class
8 | .settings
9 | *.classpath
10 | /bin
11 | classes
12 | /target/
13 | /unpackage/
14 | /.project/
15 | /logs/
16 | /.idea/
17 | *.iml
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/mescroll-body.css:
--------------------------------------------------------------------------------
1 | page {
2 | -webkit-overflow-scrolling: touch; /* 使iOS滚动流畅 */
3 | }
4 |
5 | .mescroll-body {
6 | position: relative; /* 下拉刷新区域相对自身定位 */
7 | height: auto; /* 不可固定高度,否则overflow: hidden, 可通过设置最小高度使列表不满屏仍可下拉*/
8 | overflow: hidden; /* 遮住顶部下拉刷新区域 */
9 | box-sizing: border-box; /* 避免设置padding出现双滚动条的问题 */
10 | }
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/mescroll-body.css:
--------------------------------------------------------------------------------
1 | page {
2 | -webkit-overflow-scrolling: touch; /* 使iOS滚动流畅 */
3 | }
4 |
5 | .mescroll-body {
6 | position: relative; /* 下拉刷新区域相对自身定位 */
7 | height: auto; /* 不可固定高度,否则overflow: hidden, 可通过设置最小高度使列表不满屏仍可下拉*/
8 | overflow: hidden; /* 遮住顶部下拉刷新区域 */
9 | box-sizing: border-box; /* 避免设置padding出现双滚动条的问题 */
10 | }
--------------------------------------------------------------------------------
/cloud-seal/components/ly-tree/tool/util.js:
--------------------------------------------------------------------------------
1 | export const NODE_KEY = '$treeNodeId';
2 |
3 | export const markNodeData = function(node, data) {
4 | if (!data || data[NODE_KEY]) return;
5 | Object.defineProperty(data, NODE_KEY, {
6 | value: node.id,
7 | enumerable: false,
8 | configurable: false,
9 | writable: false
10 | });
11 | };
12 |
13 | export const getNodeKey = function(key, data) {
14 | if (!key) return data[NODE_KEY];
15 | return data[key];
16 | };
17 |
18 |
--------------------------------------------------------------------------------
/stu-app/components/ly-tree/tool/util.js:
--------------------------------------------------------------------------------
1 | export const NODE_KEY = '$treeNodeId';
2 |
3 | export const markNodeData = function(node, data) {
4 | if (!data || data[NODE_KEY]) return;
5 | Object.defineProperty(data, NODE_KEY, {
6 | value: node.id,
7 | enumerable: false,
8 | configurable: false,
9 | writable: false
10 | });
11 | };
12 |
13 | export const getNodeKey = function(key, data) {
14 | if (!key) return data[NODE_KEY];
15 | return data[key];
16 | };
17 |
18 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/mescroll-uni.css:
--------------------------------------------------------------------------------
1 | page {
2 | height: 100%;
3 | box-sizing: border-box; /* 避免设置padding出现双滚动条的问题 */
4 | }
5 |
6 | .mescroll-uni-warp{
7 | height: 100%;
8 | }
9 |
10 | .mescroll-uni {
11 | position: relative;
12 | width: 100%;
13 | height: 100%;
14 | min-height: 200rpx;
15 | overflow-y: auto;
16 | box-sizing: border-box; /* 避免设置padding出现双滚动条的问题 */
17 | }
18 |
19 | /* 定位的方式固定高度 */
20 | .mescroll-uni-fixed{
21 | z-index: 1;
22 | position: fixed;
23 | top: 0;
24 | left: 0;
25 | right: 0;
26 | bottom: 0;
27 | width: auto; /* 使right生效 */
28 | height: auto; /* 使bottom生效 */
29 | }
30 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/mescroll-uni.css:
--------------------------------------------------------------------------------
1 | page {
2 | height: 100%;
3 | box-sizing: border-box; /* 避免设置padding出现双滚动条的问题 */
4 | }
5 |
6 | .mescroll-uni-warp{
7 | height: 100%;
8 | }
9 |
10 | .mescroll-uni {
11 | position: relative;
12 | width: 100%;
13 | height: 100%;
14 | min-height: 200rpx;
15 | overflow-y: auto;
16 | box-sizing: border-box; /* 避免设置padding出现双滚动条的问题 */
17 | }
18 |
19 | /* 定位的方式固定高度 */
20 | .mescroll-uni-fixed{
21 | z-index: 1;
22 | position: fixed;
23 | top: 0;
24 | left: 0;
25 | right: 0;
26 | bottom: 0;
27 | width: auto; /* 使right生效 */
28 | height: auto; /* 使bottom生效 */
29 | }
30 |
--------------------------------------------------------------------------------
/cloud-seal/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | cloud-seal
4 |
5 |
6 |
7 |
8 |
9 | com.aptana.ide.core.unifiedBuilder
10 |
11 |
12 |
13 |
14 |
15 | com.aptana.projects.webnature
16 |
17 |
18 |
19 | 1582018957956
20 |
21 | 26
22 |
23 | org.eclipse.ui.ide.multiFilter
24 | 1.0-name-matches-false-false-node_modules
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/stu-app/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | cloud-seal
4 |
5 |
6 |
7 |
8 |
9 | com.aptana.ide.core.unifiedBuilder
10 |
11 |
12 |
13 |
14 |
15 | com.aptana.projects.webnature
16 |
17 |
18 |
19 | 1582018957956
20 |
21 | 26
22 |
23 | org.eclipse.ui.ide.multiFilter
24 | 1.0-name-matches-false-false-node_modules
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/cloud-seal/App.vue:
--------------------------------------------------------------------------------
1 |
24 |
25 |
33 |
--------------------------------------------------------------------------------
/stu-app/App.vue:
--------------------------------------------------------------------------------
1 |
24 |
25 |
33 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/mixins/mescroll-comp.js:
--------------------------------------------------------------------------------
1 | /**
2 | * mescroll-body写在子组件时,需通过mescroll的mixins补充子组件缺少的生命周期:
3 | * 当一个页面只有一个mescroll-body写在子组件时, 则使用mescroll-comp.js (参考 mescroll-comp 案例)
4 | * 当一个页面有多个mescroll-body写在子组件时, 则使用mescroll-more.js (参考 mescroll-more 案例)
5 | */
6 | const MescrollCompMixin = {
7 | // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件
8 | onPageScroll(e) {
9 | let item = this.$refs["mescrollItem"];
10 | if(item && item.mescroll) item.mescroll.onPageScroll(e);
11 | },
12 | onReachBottom() {
13 | let item = this.$refs["mescrollItem"];
14 | if(item && item.mescroll) item.mescroll.onReachBottom();
15 | },
16 | // 当down的native: true时, 还需传递此方法进到子组件
17 | onPullDownRefresh(){
18 | let item = this.$refs["mescrollItem"];
19 | if(item && item.mescroll) item.mescroll.onPullDownRefresh();
20 | }
21 | }
22 |
23 | export default MescrollCompMixin;
24 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/mixins/mescroll-comp.js:
--------------------------------------------------------------------------------
1 | /**
2 | * mescroll-body写在子组件时,需通过mescroll的mixins补充子组件缺少的生命周期:
3 | * 当一个页面只有一个mescroll-body写在子组件时, 则使用mescroll-comp.js (参考 mescroll-comp 案例)
4 | * 当一个页面有多个mescroll-body写在子组件时, 则使用mescroll-more.js (参考 mescroll-more 案例)
5 | */
6 | const MescrollCompMixin = {
7 | // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件
8 | onPageScroll(e) {
9 | let item = this.$refs["mescrollItem"];
10 | if(item && item.mescroll) item.mescroll.onPageScroll(e);
11 | },
12 | onReachBottom() {
13 | let item = this.$refs["mescrollItem"];
14 | if(item && item.mescroll) item.mescroll.onReachBottom();
15 | },
16 | // 当down的native: true时, 还需传递此方法进到子组件
17 | onPullDownRefresh(){
18 | let item = this.$refs["mescrollItem"];
19 | if(item && item.mescroll) item.mescroll.onPullDownRefresh();
20 | }
21 | }
22 |
23 | export default MescrollCompMixin;
24 |
--------------------------------------------------------------------------------
/README.en.md:
--------------------------------------------------------------------------------
1 | # cloud-after-sale
2 |
3 | #### Description
4 | 云售后管理系统手机端
5 |
6 | #### Software Architecture
7 | Software architecture description
8 |
9 | #### Installation
10 |
11 | 1. xxxx
12 | 2. xxxx
13 | 3. xxxx
14 |
15 | #### Instructions
16 |
17 | 1. xxxx
18 | 2. xxxx
19 | 3. xxxx
20 |
21 | #### Contribution
22 |
23 | 1. Fork the repository
24 | 2. Create Feat_xxx branch
25 | 3. Commit your code
26 | 4. Create Pull Request
27 |
28 |
29 | #### Gitee Feature
30 |
31 | 1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
32 | 2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
33 | 3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
34 | 4. The most valuable open source project [GVP](https://gitee.com/gvp)
35 | 5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
36 | 6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
37 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/components/mescroll-up.css:
--------------------------------------------------------------------------------
1 | /* 上拉加载区域 */
2 | .mescroll-upwarp {
3 | min-height: 60rpx;
4 | padding: 30rpx 0;
5 | text-align: center;
6 | clear: both;
7 | }
8 |
9 | /*提示文本 */
10 | .mescroll-upwarp .upwarp-tip,
11 | .mescroll-upwarp .upwarp-nodata {
12 | display: inline-block;
13 | font-size: 28rpx;
14 | vertical-align: middle;
15 | /* color: gray; 已在style设置color,此处删去*/
16 | }
17 |
18 | .mescroll-upwarp .upwarp-tip {
19 | margin-left: 16rpx;
20 | }
21 |
22 | /*旋转进度条 */
23 | .mescroll-upwarp .upwarp-progress {
24 | display: inline-block;
25 | width: 32rpx;
26 | height: 32rpx;
27 | border-radius: 50%;
28 | border: 2rpx solid gray;
29 | border-bottom-color: transparent !important; /*已在style设置border-color,此处需加 !important*/
30 | vertical-align: middle;
31 | }
32 |
33 | /* 旋转动画 */
34 | .mescroll-upwarp .mescroll-rotate {
35 | animation: mescrollUpRotate 0.6s linear infinite;
36 | }
37 |
38 | @keyframes mescrollUpRotate {
39 | 0% {
40 | transform: rotate(0deg);
41 | }
42 |
43 | 100% {
44 | transform: rotate(360deg);
45 | }
46 | }
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/components/mescroll-up.css:
--------------------------------------------------------------------------------
1 | /* 上拉加载区域 */
2 | .mescroll-upwarp {
3 | min-height: 60rpx;
4 | padding: 30rpx 0;
5 | text-align: center;
6 | clear: both;
7 | }
8 |
9 | /*提示文本 */
10 | .mescroll-upwarp .upwarp-tip,
11 | .mescroll-upwarp .upwarp-nodata {
12 | display: inline-block;
13 | font-size: 28rpx;
14 | vertical-align: middle;
15 | /* color: gray; 已在style设置color,此处删去*/
16 | }
17 |
18 | .mescroll-upwarp .upwarp-tip {
19 | margin-left: 16rpx;
20 | }
21 |
22 | /*旋转进度条 */
23 | .mescroll-upwarp .upwarp-progress {
24 | display: inline-block;
25 | width: 32rpx;
26 | height: 32rpx;
27 | border-radius: 50%;
28 | border: 2rpx solid gray;
29 | border-bottom-color: transparent !important; /*已在style设置border-color,此处需加 !important*/
30 | vertical-align: middle;
31 | }
32 |
33 | /* 旋转动画 */
34 | .mescroll-upwarp .mescroll-rotate {
35 | animation: mescrollUpRotate 0.6s linear infinite;
36 | }
37 |
38 | @keyframes mescrollUpRotate {
39 | 0% {
40 | transform: rotate(0deg);
41 | }
42 |
43 | 100% {
44 | transform: rotate(360deg);
45 | }
46 | }
--------------------------------------------------------------------------------
/cloud-seal/pages/notice/noticeDetail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{rowMation.title}}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
50 |
51 |
53 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/components/mescroll-up.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{ mOption.textLoading }}
8 |
9 |
10 | {{ mOption.textNoMore }}
11 |
12 |
13 |
14 |
36 |
37 |
40 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/components/mescroll-up.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{ mOption.textLoading }}
8 |
9 |
10 | {{ mOption.textNoMore }}
11 |
12 |
13 |
14 |
36 |
37 |
40 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/mixins/mescroll-more-item.js:
--------------------------------------------------------------------------------
1 | /**
2 | * mescroll-more-item的mixins, 仅在多个 mescroll-body 写在子组件时使用 (参考 mescroll-more 案例)
3 | */
4 | const MescrollMoreItemMixin = {
5 | props:{
6 | i: Number, // 每个tab页的专属下标
7 | index: { // 当前tab的下标
8 | type: Number,
9 | default(){
10 | return 0
11 | }
12 | }
13 | },
14 | data() {
15 | return {
16 | downOption:{
17 | auto:false // 不自动加载
18 | },
19 | upOption:{
20 | auto:false // 不自动加载
21 | },
22 | isInit: false // 当前tab是否已初始化
23 | }
24 | },
25 | watch:{
26 | // 监听下标的变化
27 | index(val){
28 | if (this.i === val && !this.isInit) {
29 | this.isInit = true; // 标记为true
30 | this.mescroll && this.mescroll.triggerDownScroll();
31 | }
32 | }
33 | },
34 | methods: {
35 | // mescroll组件初始化的回调,可获取到mescroll对象
36 | mescrollInit(mescroll) {
37 | this.mescroll = mescroll;
38 | this.mescrollInitByRef && this.mescrollInitByRef(); // 兼容字节跳动小程序 (mescroll-mixins.js)
39 | // 自动加载当前tab的数据
40 | if(this.i === this.index){
41 | this.isInit = true; // 标记为true
42 | this.mescroll.triggerDownScroll();
43 | }
44 | },
45 | }
46 | }
47 |
48 | export default MescrollMoreItemMixin;
49 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/mixins/mescroll-more-item.js:
--------------------------------------------------------------------------------
1 | /**
2 | * mescroll-more-item的mixins, 仅在多个 mescroll-body 写在子组件时使用 (参考 mescroll-more 案例)
3 | */
4 | const MescrollMoreItemMixin = {
5 | props:{
6 | i: Number, // 每个tab页的专属下标
7 | index: { // 当前tab的下标
8 | type: Number,
9 | default(){
10 | return 0
11 | }
12 | }
13 | },
14 | data() {
15 | return {
16 | downOption:{
17 | auto:false // 不自动加载
18 | },
19 | upOption:{
20 | auto:false // 不自动加载
21 | },
22 | isInit: false // 当前tab是否已初始化
23 | }
24 | },
25 | watch:{
26 | // 监听下标的变化
27 | index(val){
28 | if (this.i === val && !this.isInit) {
29 | this.isInit = true; // 标记为true
30 | this.mescroll && this.mescroll.triggerDownScroll();
31 | }
32 | }
33 | },
34 | methods: {
35 | // mescroll组件初始化的回调,可获取到mescroll对象
36 | mescrollInit(mescroll) {
37 | this.mescroll = mescroll;
38 | this.mescrollInitByRef && this.mescrollInitByRef(); // 兼容字节跳动小程序 (mescroll-mixins.js)
39 | // 自动加载当前tab的数据
40 | if(this.i === this.index){
41 | this.isInit = true; // 标记为true
42 | this.mescroll.triggerDownScroll();
43 | }
44 | },
45 | }
46 | }
47 |
48 | export default MescrollMoreItemMixin;
49 |
--------------------------------------------------------------------------------
/cloud-seal/pages/product/productAllList/productAllListItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.name}}
5 |
6 | 规格型号:
7 | {{bean.model}}
8 |
9 |
10 | 所属组:
11 | {{bean.groupName}}
12 |
13 |
14 | 单位类型:
15 | 非多单位
16 | 多单位
17 |
18 |
19 |
20 |
21 |
22 |
44 |
45 |
47 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartAllList/sparepartAllListItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.name}}
5 |
6 | 规格型号:
7 | {{bean.model}}
8 |
9 |
10 | 所属组:
11 | {{bean.groupName}}
12 |
13 |
14 | 单位类型:
15 | 非多单位
16 | 多单位
17 |
18 |
19 |
20 |
21 |
22 |
44 |
45 |
47 |
--------------------------------------------------------------------------------
/cloud-seal/pages/product/productAllList/productAllList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
44 |
45 |
47 |
--------------------------------------------------------------------------------
/cloud-seal/pages/product/productChoose.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
44 |
45 |
47 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/components/mescroll-down.css:
--------------------------------------------------------------------------------
1 | /* 下拉刷新区域 */
2 | .mescroll-downwarp {
3 | position: absolute;
4 | top: -100%;
5 | left: 0;
6 | width: 100%;
7 | height: 100%;
8 | text-align: center;
9 | }
10 |
11 | /* 下拉刷新--内容区,定位于区域底部 */
12 | .mescroll-downwarp .downwarp-content {
13 | position: absolute;
14 | left: 0;
15 | bottom: 0;
16 | width: 100%;
17 | min-height: 60rpx;
18 | padding: 20rpx 0;
19 | text-align: center;
20 | }
21 |
22 | /* 下拉刷新--提示文本 */
23 | .mescroll-downwarp .downwarp-tip {
24 | display: inline-block;
25 | font-size: 28rpx;
26 | vertical-align: middle;
27 | margin-left: 16rpx;
28 | /* color: gray; 已在style设置color,此处删去*/
29 | }
30 |
31 | /* 下拉刷新--旋转进度条 */
32 | .mescroll-downwarp .downwarp-progress {
33 | display: inline-block;
34 | width: 32rpx;
35 | height: 32rpx;
36 | border-radius: 50%;
37 | border: 2rpx solid gray;
38 | border-bottom-color: transparent !important; /*已在style设置border-color,此处需加 !important*/
39 | vertical-align: middle;
40 | }
41 |
42 | /* 旋转动画 */
43 | .mescroll-downwarp .mescroll-rotate {
44 | animation: mescrollDownRotate 0.6s linear infinite;
45 | }
46 |
47 | @keyframes mescrollDownRotate {
48 | 0% {
49 | transform: rotate(0deg);
50 | }
51 |
52 | 100% {
53 | transform: rotate(360deg);
54 | }
55 | }
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartAllList/sparepartAllList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
44 |
45 |
47 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/components/mescroll-down.css:
--------------------------------------------------------------------------------
1 | /* 下拉刷新区域 */
2 | .mescroll-downwarp {
3 | position: absolute;
4 | top: -100%;
5 | left: 0;
6 | width: 100%;
7 | height: 100%;
8 | text-align: center;
9 | }
10 |
11 | /* 下拉刷新--内容区,定位于区域底部 */
12 | .mescroll-downwarp .downwarp-content {
13 | position: absolute;
14 | left: 0;
15 | bottom: 0;
16 | width: 100%;
17 | min-height: 60rpx;
18 | padding: 20rpx 0;
19 | text-align: center;
20 | }
21 |
22 | /* 下拉刷新--提示文本 */
23 | .mescroll-downwarp .downwarp-tip {
24 | display: inline-block;
25 | font-size: 28rpx;
26 | vertical-align: middle;
27 | margin-left: 16rpx;
28 | /* color: gray; 已在style设置color,此处删去*/
29 | }
30 |
31 | /* 下拉刷新--旋转进度条 */
32 | .mescroll-downwarp .downwarp-progress {
33 | display: inline-block;
34 | width: 32rpx;
35 | height: 32rpx;
36 | border-radius: 50%;
37 | border: 2rpx solid gray;
38 | border-bottom-color: transparent !important; /*已在style设置border-color,此处需加 !important*/
39 | vertical-align: middle;
40 | }
41 |
42 | /* 旋转动画 */
43 | .mescroll-downwarp .mescroll-rotate {
44 | animation: mescrollDownRotate 0.6s linear infinite;
45 | }
46 |
47 | @keyframes mescrollDownRotate {
48 | 0% {
49 | transform: rotate(0deg);
50 | }
51 |
52 | 100% {
53 | transform: rotate(360deg);
54 | }
55 | }
--------------------------------------------------------------------------------
/stu-app/pages/exam/endExam/endExamList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
49 |
50 |
52 |
--------------------------------------------------------------------------------
/stu-app/pages/exam/waitExam/waitExamList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
49 |
50 |
52 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartChoose/sparepartChoose.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
46 |
47 |
49 |
--------------------------------------------------------------------------------
/cloud-seal/pages/notice/myNotice/myNoticeList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
50 |
51 |
53 |
--------------------------------------------------------------------------------
/cloud-seal/pages/customer/customerList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
52 |
53 |
55 |
--------------------------------------------------------------------------------
/cloud-seal/pages/customer/customerChoose.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
52 |
53 |
55 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartMyUse/sparepartMyUseList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
51 |
52 |
54 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartMyApply/sparepartMyApplyList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
51 |
52 |
54 |
--------------------------------------------------------------------------------
/cloud-seal/pages/product/productChooseItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.productName}}
5 |
6 | 所属组:
7 | {{bean.groupName}}
8 |
9 |
10 | 规格型号:
11 | {{bean.productModel}}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
53 |
54 |
56 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/components/mescroll-down.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{downText}}
7 |
8 |
9 |
10 |
11 |
44 |
45 |
48 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/mescroll-uni-option.js:
--------------------------------------------------------------------------------
1 | // 全局配置
2 | // mescroll-body 和 mescroll-uni 通用
3 | const GlobalOption = {
4 | down: {
5 | // 其他down的配置参数也可以写,这里只展示了常用的配置:
6 | textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本
7 | textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本
8 | textLoading: '加载中 ...', // 加载中的提示文本
9 | offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调
10 | native: false // 是否使用系统自带的下拉刷新; 默认false; 仅在mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例)
11 | },
12 | up: {
13 | // 其他up的配置参数也可以写,这里只展示了常用的配置:
14 | textLoading: '加载中 ...', // 加载中的提示文本
15 | textNoMore: '-- END --', // 没有更多数据的提示文本
16 | offset: 80, // 距底部多远时,触发upCallback
17 | isBounce: false, // 默认禁止橡皮筋的回弹效果, 必读事项: http://www.mescroll.com/qa.html?v=190725#q25
18 | toTop: {
19 | // 回到顶部按钮,需配置src才显示
20 | src: "http://www.mescroll.com/img/mescroll-totop.png?v=1", // 图片路径 (建议放入static目录, 如 /static/img/mescroll-totop.png )
21 | offset: 1000, // 列表滚动多少距离才显示回到顶部按钮,默认1000px
22 | right: 20, // 到右边的距离, 默认20 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx)
23 | bottom: 120, // 到底部的距离, 默认120 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx)
24 | width: 72 // 回到顶部图标的宽度, 默认72 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx)
25 | },
26 | empty: {
27 | use: true, // 是否显示空布局
28 | icon: "http://www.mescroll.com/img/mescroll-empty.png?v=1", // 图标路径 (建议放入static目录, 如 /static/img/mescroll-empty.png )
29 | tip: '~ 暂无相关数据 ~' // 提示
30 | }
31 | }
32 | }
33 |
34 | export default GlobalOption
35 |
--------------------------------------------------------------------------------
/stu-app/components/uni-list/uni-list.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
47 |
69 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/components/mescroll-down.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{downText}}
7 |
8 |
9 |
10 |
11 |
44 |
45 |
48 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/mescroll-uni-option.js:
--------------------------------------------------------------------------------
1 | // 全局配置
2 | // mescroll-body 和 mescroll-uni 通用
3 | const GlobalOption = {
4 | down: {
5 | // 其他down的配置参数也可以写,这里只展示了常用的配置:
6 | textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本
7 | textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本
8 | textLoading: '加载中 ...', // 加载中的提示文本
9 | offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调
10 | native: false // 是否使用系统自带的下拉刷新; 默认false; 仅在mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例)
11 | },
12 | up: {
13 | // 其他up的配置参数也可以写,这里只展示了常用的配置:
14 | textLoading: '加载中 ...', // 加载中的提示文本
15 | textNoMore: '-- END --', // 没有更多数据的提示文本
16 | offset: 80, // 距底部多远时,触发upCallback
17 | isBounce: false, // 默认禁止橡皮筋的回弹效果, 必读事项: http://www.mescroll.com/qa.html?v=190725#q25
18 | toTop: {
19 | // 回到顶部按钮,需配置src才显示
20 | src: "http://www.mescroll.com/img/mescroll-totop.png?v=1", // 图片路径 (建议放入static目录, 如 /static/img/mescroll-totop.png )
21 | offset: 1000, // 列表滚动多少距离才显示回到顶部按钮,默认1000px
22 | right: 20, // 到右边的距离, 默认20 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx)
23 | bottom: 120, // 到底部的距离, 默认120 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx)
24 | width: 72 // 回到顶部图标的宽度, 默认72 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx)
25 | },
26 | empty: {
27 | use: true, // 是否显示空布局
28 | icon: "http://www.mescroll.com/img/mescroll-empty.png?v=1", // 图标路径 (建议放入static目录, 如 /static/img/mescroll-empty.png )
29 | tip: '~ 暂无相关数据 ~' // 提示
30 | }
31 | }
32 | }
33 |
34 | export default GlobalOption
35 |
--------------------------------------------------------------------------------
/cloud-seal/components/uni-list/uni-list.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
47 |
69 |
--------------------------------------------------------------------------------
/cloud-seal/pages/workorder/workorderChoose/workorderChoose.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
48 |
49 |
51 |
--------------------------------------------------------------------------------
/cloud-seal/pages/fileconsole/recycleBin/recycleBinList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
54 |
55 |
57 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartMyApply/sparepartMyApplyListItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.materialName}}
5 |
6 | 单位:
7 | {{bean.unitName}}
8 |
9 |
10 | 规格型号:
11 | {{bean.materialModel}}
12 |
13 |
14 | 剩余数量:
15 | {{bean.operNumber}}
16 |
17 |
18 | 单价:
19 | {{bean.unitPrice}}
20 |
21 |
22 | 负责组:
23 | {{bean.groupName}}
24 |
25 |
26 |
27 |
28 |
29 |
51 |
52 |
54 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartMyUse/sparepartMyUseListItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.materialName}}
5 |
6 | 单位:
7 | {{bean.unitName}}
8 |
9 |
10 | 规格型号:
11 | {{bean.materialModel}}
12 |
13 |
14 | 已用数量:
15 | {{bean.operNumber}}
16 |
17 |
18 | 单价:
19 | {{bean.unitPrice}}
20 |
21 |
22 | 负责组:
23 | {{bean.groupName}}
24 |
25 |
26 |
27 |
28 |
29 |
51 |
52 |
54 |
--------------------------------------------------------------------------------
/cloud-seal/pages/message/messageItem/groupItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | 张
13 |
14 |
15 |
16 |
17 |
27 |
28 |
71 |
--------------------------------------------------------------------------------
/cloud-seal/pages/fileconsole/myShareFile/myShareFileList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
54 |
55 |
57 |
--------------------------------------------------------------------------------
/cloud-seal/pages/worker/workerChoose.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
48 |
49 |
51 |
--------------------------------------------------------------------------------
/cloud-seal/pages/workorder/workMyWriteorder/workMyWriteorder.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
58 |
59 |
61 |
--------------------------------------------------------------------------------
/cloud-seal/pages/common/webView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
67 |
68 |
70 |
--------------------------------------------------------------------------------
/stu-app/pages/common/webView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
67 |
68 |
70 |
--------------------------------------------------------------------------------
/cloud-seal/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 |
4 | // 接口请求挂载
5 | import api from '@/components/vmeitime-http/'
6 | Vue.prototype.$api = api
7 |
8 | //挂在全局socket
9 | import sockect from "socket.js"
10 | Vue.prototype.$sockect = sockect
11 |
12 | // 验证挂载到全局
13 | import validate from '@/components/form-validate/ys-validate.js'
14 | Vue.prototype.$validate = validate
15 |
16 | // 注册全局modal组件
17 | import chunLeiModal from '@/components/chunLei-modal/chunLei-modal.vue'
18 | Vue.component('chunLei-modal', chunLeiModal);
19 |
20 | //系统文件访问基础路径
21 | Vue.prototype.$fileBasePath = "http://192.168.1.104:8081/"
22 | //系统其他页面访问路径
23 | Vue.prototype.$pagePath = "http://192.168.1.104:8081/"
24 |
25 | Vue.prototype.$imageType = ["png", "jpg", "xbm", "bmp", "webp", "jpeg", "svgz", "git", "ico", "tiff", "svg", "jiff", "pjpeg", "pjp", "tif"]
26 | Vue.prototype.$officeType = ["docx", "doc", "xls", "xlsx", "ppt", "pptx", "wps", "et", "dps", "csv", "pdf"]
27 | Vue.prototype.$vedioType = ["mp4", "rm", "rmvb", "wmv", "avi", "3gp", "mkv"]
28 | Vue.prototype.$packageType = ["zip", "rar"]
29 | Vue.prototype.$epubType = ["epub"]
30 | Vue.prototype.$aceType = ["txt", "sql", "java", "css", "html", "htm", "json", "js", "tpl"]
31 |
32 | // 注册全局组件
33 | import MescrollBody from "@/components/mescroll-uni/mescroll-body.vue"
34 | import MescrollUni from "@/components/mescroll-uni/mescroll-uni.vue"
35 | Vue.component('mescroll-body', MescrollBody)
36 | Vue.component('mescroll-uni', MescrollUni)
37 |
38 | Vue.config.productionTip = false
39 |
40 | App.mpType = 'app'
41 |
42 | const app = new Vue({
43 | ...App
44 | })
45 | app.$mount()
46 |
--------------------------------------------------------------------------------
/stu-app/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App'
3 |
4 | // 接口请求挂载
5 | import api from '@/components/vmeitime-http/'
6 | Vue.prototype.$api = api
7 |
8 | //挂在全局socket
9 | import sockect from "socket.js"
10 | Vue.prototype.$sockect = sockect
11 |
12 | // 验证挂载到全局
13 | import validate from '@/components/form-validate/ys-validate.js'
14 | Vue.prototype.$validate = validate
15 |
16 | // 注册全局modal组件
17 | import chunLeiModal from '@/components/chunLei-modal/chunLei-modal.vue'
18 | Vue.component('chunLei-modal', chunLeiModal);
19 |
20 | //系统文件访问基础路径
21 | Vue.prototype.$fileBasePath = "http://192.168.1.104:8081/"
22 | //系统其他页面访问路径
23 | Vue.prototype.$pagePath = "http://192.168.1.104:8081/"
24 |
25 | Vue.prototype.$imageType = ["png", "jpg", "xbm", "bmp", "webp", "jpeg", "svgz", "git", "ico", "tiff", "svg", "jiff", "pjpeg", "pjp", "tif"]
26 | Vue.prototype.$officeType = ["docx", "doc", "xls", "xlsx", "ppt", "pptx", "wps", "et", "dps", "csv", "pdf"]
27 | Vue.prototype.$vedioType = ["mp4", "rm", "rmvb", "wmv", "avi", "3gp", "mkv"]
28 | Vue.prototype.$packageType = ["zip", "rar"]
29 | Vue.prototype.$epubType = ["epub"]
30 | Vue.prototype.$aceType = ["txt", "sql", "java", "css", "html", "htm", "json", "js", "tpl"]
31 |
32 | // 注册全局组件
33 | import MescrollBody from "@/components/mescroll-uni/mescroll-body.vue"
34 | import MescrollUni from "@/components/mescroll-uni/mescroll-uni.vue"
35 | Vue.component('mescroll-body', MescrollBody)
36 | Vue.component('mescroll-uni', MescrollUni)
37 |
38 | Vue.config.productionTip = false
39 |
40 | App.mpType = 'app'
41 |
42 | const app = new Vue({
43 | ...App
44 | })
45 | app.$mount()
46 |
--------------------------------------------------------------------------------
/stu-app/pages/exam/waitExam/waitExamListItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.examName}}
5 |
6 | 考试科目:
7 | {{bean.subjectName}}
8 |
9 |
10 | 考试年级:
11 | {{bean.gradeName}}
12 |
13 |
14 | 题目总数:
15 | {{bean.surveyQuNum}}
16 |
17 |
18 | 发卷人:
19 | {{bean.createName}}
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
56 |
57 |
59 |
--------------------------------------------------------------------------------
/cloud-seal/pages/customer/customerListItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.name}}
5 |
6 | 客户分类:
7 | {{bean.typeName}}
8 |
9 |
10 | 客户来源:
11 | {{bean.fromName}}
12 |
13 |
14 | 所属行业:
15 | {{bean.industryName}}
16 |
17 |
18 | 售后服务数:
19 | {{bean.serviceNum}}
20 |
21 |
22 |
24 |
25 |
26 |
27 |
28 |
29 |
61 |
62 |
64 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/mixins/mescroll-more.js:
--------------------------------------------------------------------------------
1 | /**
2 | * mescroll-body写在子组件时,需通过mescroll的mixins补充子组件缺少的生命周期:
3 | * 当一个页面只有一个mescroll-body写在子组件时, 则使用mescroll-comp.js (参考 mescroll-comp 案例)
4 | * 当一个页面有多个mescroll-body写在子组件时, 则使用mescroll-more.js (参考 mescroll-more 案例)
5 | */
6 | const MescrollMoreMixin = {
7 | data() {
8 | return {
9 | tabIndex: 0 // 当前tab下标
10 | }
11 | },
12 | // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件
13 | onPageScroll(e) {
14 | let mescroll = this.getMescroll(this.tabIndex);
15 | mescroll && mescroll.onPageScroll(e);
16 | },
17 | onReachBottom() {
18 | let mescroll = this.getMescroll(this.tabIndex);
19 | mescroll && mescroll.onReachBottom();
20 | },
21 | // 当down的native: true时, 还需传递此方法进到子组件
22 | onPullDownRefresh(){
23 | let mescroll = this.getMescroll(this.tabIndex);
24 | mescroll && mescroll.onPullDownRefresh();
25 | },
26 | methods:{
27 | // 根据下标获取对应子组件的mescroll
28 | getMescroll(i){
29 | if(!this.mescrollItems) this.mescrollItems = [];
30 | if(!this.mescrollItems[i]) {
31 | // v-for中的refs
32 | let vForItem = this.$refs["mescrollItem"];
33 | if(vForItem){
34 | this.mescrollItems[i] = vForItem[i]
35 | }else{
36 | // 普通的refs,不可重复
37 | this.mescrollItems[i] = this.$refs["mescrollItem"+i];
38 | }
39 | }
40 | let item = this.mescrollItems[i]
41 | return item ? item.mescroll : null
42 | },
43 | // 切换tab,恢复滚动条位置
44 | tabChange(i){
45 | let mescroll = this.getMescroll(i);
46 | if(mescroll){
47 | // 延时(比$nextTick靠谱一些),确保元素已渲染
48 | setTimeout(()=>{
49 | mescroll.scrollTo(mescroll.getScrollTop(),0)
50 | },30)
51 | }
52 | }
53 | }
54 | }
55 |
56 | export default MescrollMoreMixin;
57 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/mixins/mescroll-more.js:
--------------------------------------------------------------------------------
1 | /**
2 | * mescroll-body写在子组件时,需通过mescroll的mixins补充子组件缺少的生命周期:
3 | * 当一个页面只有一个mescroll-body写在子组件时, 则使用mescroll-comp.js (参考 mescroll-comp 案例)
4 | * 当一个页面有多个mescroll-body写在子组件时, 则使用mescroll-more.js (参考 mescroll-more 案例)
5 | */
6 | const MescrollMoreMixin = {
7 | data() {
8 | return {
9 | tabIndex: 0 // 当前tab下标
10 | }
11 | },
12 | // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件
13 | onPageScroll(e) {
14 | let mescroll = this.getMescroll(this.tabIndex);
15 | mescroll && mescroll.onPageScroll(e);
16 | },
17 | onReachBottom() {
18 | let mescroll = this.getMescroll(this.tabIndex);
19 | mescroll && mescroll.onReachBottom();
20 | },
21 | // 当down的native: true时, 还需传递此方法进到子组件
22 | onPullDownRefresh(){
23 | let mescroll = this.getMescroll(this.tabIndex);
24 | mescroll && mescroll.onPullDownRefresh();
25 | },
26 | methods:{
27 | // 根据下标获取对应子组件的mescroll
28 | getMescroll(i){
29 | if(!this.mescrollItems) this.mescrollItems = [];
30 | if(!this.mescrollItems[i]) {
31 | // v-for中的refs
32 | let vForItem = this.$refs["mescrollItem"];
33 | if(vForItem){
34 | this.mescrollItems[i] = vForItem[i]
35 | }else{
36 | // 普通的refs,不可重复
37 | this.mescrollItems[i] = this.$refs["mescrollItem"+i];
38 | }
39 | }
40 | let item = this.mescrollItems[i]
41 | return item ? item.mescroll : null
42 | },
43 | // 切换tab,恢复滚动条位置
44 | tabChange(i){
45 | let mescroll = this.getMescroll(i);
46 | if(mescroll){
47 | // 延时(比$nextTick靠谱一些),确保元素已渲染
48 | setTimeout(()=>{
49 | mescroll.scrollTo(mescroll.getScrollTop(),0)
50 | },30)
51 | }
52 | }
53 | }
54 | }
55 |
56 | export default MescrollMoreMixin;
57 |
--------------------------------------------------------------------------------
/cloud-seal/pages/customer/customerChooseItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.name}}
5 |
6 | 联系人:
7 | {{bean.contacts}}
8 |
9 |
10 | 联系电话:
11 | {{bean.mobilePhone}}
12 |
13 |
14 | 邮箱:
15 | {{bean.email}}
16 |
17 |
18 | QQ:
19 | {{bean.qq}}
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
61 |
62 |
64 |
--------------------------------------------------------------------------------
/cloud-seal/pages/fileconsole/recycleBin/recycleBinItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.recycleName}}
5 |
6 | 文件类型:
7 | {{bean.fileType}}个
8 |
9 |
10 | 删除时间:
11 | {{bean.createTime}}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
67 |
68 |
70 |
--------------------------------------------------------------------------------
/cloud-seal/pages/worker/workerChooseItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.userName}}
5 |
6 | 地址:
7 | {{bean.addDetail}}
8 |
9 |
10 | 工单数:
11 | {{bean.orderNumber}}个
12 |
13 |
14 | 状态:
15 | {{bean.stateName}}
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
58 |
59 |
68 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartMyOrder/sparepartMyOrder.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{tab}}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
42 |
43 |
75 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartExamine/itemModel.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 单号:
6 | {{pd.applyNum}}
7 |
8 |
9 | 所属工单:
10 | {{pd.orderNum}}
11 |
12 |
13 | 客户名称:
14 | {{pd.customerName}}
15 |
16 |
17 | 申领人:
18 | {{pd.applyUserName}}
19 |
20 |
21 | 申领时间:
22 | {{pd.applyTime}}
23 |
24 |
25 | {{pd.stateName}}
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
63 |
64 |
66 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartExamine/sparepartExamine.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{tab}}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
45 |
46 |
78 |
--------------------------------------------------------------------------------
/stu-app/components/uni-list/uni-refresh.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
59 |
60 |
66 |
--------------------------------------------------------------------------------
/cloud-seal/components/uni-list/uni-refresh.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
59 |
60 |
66 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/mescroll-mixins.js:
--------------------------------------------------------------------------------
1 | // mescroll-body 和 mescroll-uni 通用
2 |
3 | // import MescrollUni from "./mescroll-uni.vue";
4 | // import MescrollBody from "./mescroll-body.vue";
5 |
6 | const MescrollMixin = {
7 | // components: { // 非H5端无法通过mixin注册组件, 只能在main.js中注册全局组件或具体界面中注册
8 | // MescrollUni,
9 | // MescrollBody
10 | // },
11 | data() {
12 | return {
13 | mescroll: null //mescroll实例对象
14 | }
15 | },
16 | // 注册系统自带的下拉刷新 (配置down.native为true时生效, 还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例)
17 | onPullDownRefresh(){
18 | this.mescroll && this.mescroll.onPullDownRefresh();
19 | },
20 | // 注册列表滚动事件,用于判定在顶部可下拉刷新,在指定位置可显示隐藏回到顶部按钮 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效)
21 | onPageScroll(e) {
22 | this.mescroll && this.mescroll.onPageScroll(e);
23 | },
24 | // 注册滚动到底部的事件,用于上拉加载 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效)
25 | onReachBottom() {
26 | this.mescroll && this.mescroll.onReachBottom();
27 | },
28 | methods: {
29 | // mescroll组件初始化的回调,可获取到mescroll对象
30 | mescrollInit(mescroll) {
31 | this.mescroll = mescroll;
32 | this.mescrollInitByRef(); // 兼容字节跳动小程序
33 | },
34 | // 以ref的方式初始化mescroll对象 (兼容字节跳动小程序: http://www.mescroll.com/qa.html?v=20200107#q26)
35 | mescrollInitByRef() {
36 | if(!this.mescroll || !this.mescroll.resetUpScroll){
37 | let mescrollRef = this.$refs.mescrollRef;
38 | if(mescrollRef) this.mescroll = mescrollRef.mescroll
39 | }
40 | },
41 | // 下拉刷新的回调
42 | downCallback() {
43 | // mixin默认resetUpScroll
44 | this.mescroll.resetUpScroll()
45 | },
46 | // 上拉加载的回调
47 | upCallback() {
48 | // mixin默认延时500自动结束加载
49 | setTimeout(()=>{
50 | this.mescroll.endErr();
51 | }, 500)
52 | }
53 | },
54 | mounted() {
55 | this.mescrollInitByRef(); // 兼容字节跳动小程序, 避免未设置@init或@init此时未能取到ref的情况
56 | }
57 |
58 | }
59 |
60 | export default MescrollMixin;
61 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/mescroll-mixins.js:
--------------------------------------------------------------------------------
1 | // mescroll-body 和 mescroll-uni 通用
2 |
3 | // import MescrollUni from "./mescroll-uni.vue";
4 | // import MescrollBody from "./mescroll-body.vue";
5 |
6 | const MescrollMixin = {
7 | // components: { // 非H5端无法通过mixin注册组件, 只能在main.js中注册全局组件或具体界面中注册
8 | // MescrollUni,
9 | // MescrollBody
10 | // },
11 | data() {
12 | return {
13 | mescroll: null //mescroll实例对象
14 | }
15 | },
16 | // 注册系统自带的下拉刷新 (配置down.native为true时生效, 还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例)
17 | onPullDownRefresh(){
18 | this.mescroll && this.mescroll.onPullDownRefresh();
19 | },
20 | // 注册列表滚动事件,用于判定在顶部可下拉刷新,在指定位置可显示隐藏回到顶部按钮 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效)
21 | onPageScroll(e) {
22 | this.mescroll && this.mescroll.onPageScroll(e);
23 | },
24 | // 注册滚动到底部的事件,用于上拉加载 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效)
25 | onReachBottom() {
26 | this.mescroll && this.mescroll.onReachBottom();
27 | },
28 | methods: {
29 | // mescroll组件初始化的回调,可获取到mescroll对象
30 | mescrollInit(mescroll) {
31 | this.mescroll = mescroll;
32 | this.mescrollInitByRef(); // 兼容字节跳动小程序
33 | },
34 | // 以ref的方式初始化mescroll对象 (兼容字节跳动小程序: http://www.mescroll.com/qa.html?v=20200107#q26)
35 | mescrollInitByRef() {
36 | if(!this.mescroll || !this.mescroll.resetUpScroll){
37 | let mescrollRef = this.$refs.mescrollRef;
38 | if(mescrollRef) this.mescroll = mescrollRef.mescroll
39 | }
40 | },
41 | // 下拉刷新的回调
42 | downCallback() {
43 | // mixin默认resetUpScroll
44 | this.mescroll.resetUpScroll()
45 | },
46 | // 上拉加载的回调
47 | upCallback() {
48 | // mixin默认延时500自动结束加载
49 | setTimeout(()=>{
50 | this.mescroll.endErr();
51 | }, 500)
52 | }
53 | },
54 | mounted() {
55 | this.mescrollInitByRef(); // 兼容字节跳动小程序, 避免未设置@init或@init此时未能取到ref的情况
56 | }
57 |
58 | }
59 |
60 | export default MescrollMixin;
61 |
--------------------------------------------------------------------------------
/cloud-seal/uni.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * 这里是uni-app内置的常用样式变量
3 | *
4 | * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
5 | * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
6 | *
7 | */
8 |
9 | /**
10 | * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
11 | *
12 | * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
13 | */
14 |
15 | /* 颜色变量 */
16 |
17 | /* 行为相关颜色 */
18 | $uni-color-primary: #007aff;
19 | $uni-color-success: #4cd964;
20 | $uni-color-warning: #f0ad4e;
21 | $uni-color-error: #dd524d;
22 |
23 | /* 文字基本颜色 */
24 | $uni-text-color:#333;//基本色
25 | $uni-text-color-inverse:#fff;//反色
26 | $uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
27 | $uni-text-color-placeholder: #808080;
28 | $uni-text-color-disable:#c0c0c0;
29 |
30 | /* 背景颜色 */
31 | $uni-bg-color:#ffffff;
32 | $uni-bg-color-grey:#f8f8f8;
33 | $uni-bg-color-hover:#f1f1f1;//点击状态颜色
34 | $uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
35 |
36 | /* 边框颜色 */
37 | $uni-border-color:#c8c7cc;
38 |
39 | /* 尺寸变量 */
40 |
41 | /* 文字尺寸 */
42 | $uni-font-size-sm:24upx;
43 | $uni-font-size-base:28upx;
44 | $uni-font-size-lg:32upx;
45 |
46 | /* 图片尺寸 */
47 | $uni-img-size-sm:40upx;
48 | $uni-img-size-base:52upx;
49 | $uni-img-size-lg:80upx;
50 |
51 | /* Border Radius */
52 | $uni-border-radius-sm: 4upx;
53 | $uni-border-radius-base: 6upx;
54 | $uni-border-radius-lg: 12upx;
55 | $uni-border-radius-circle: 50%;
56 |
57 | /* 水平间距 */
58 | $uni-spacing-row-sm: 10px;
59 | $uni-spacing-row-base: 20upx;
60 | $uni-spacing-row-lg: 30upx;
61 |
62 | /* 垂直间距 */
63 | $uni-spacing-col-sm: 8upx;
64 | $uni-spacing-col-base: 16upx;
65 | $uni-spacing-col-lg: 24upx;
66 |
67 | /* 透明度 */
68 | $uni-opacity-disabled: 0.3; // 组件禁用态的透明度
69 |
70 | /* 文章场景相关 */
71 | $uni-color-title: #2C405A; // 文章标题颜色
72 | $uni-font-size-title:40upx;
73 | $uni-color-subtitle: #555555; // 二级标题颜色
74 | $uni-font-size-subtitle:36upx;
75 | $uni-color-paragraph: #3F536E; // 文章段落颜色
76 | $uni-font-size-paragraph:30upx;
--------------------------------------------------------------------------------
/stu-app/uni.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * 这里是uni-app内置的常用样式变量
3 | *
4 | * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
5 | * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
6 | *
7 | */
8 |
9 | /**
10 | * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
11 | *
12 | * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
13 | */
14 |
15 | /* 颜色变量 */
16 |
17 | /* 行为相关颜色 */
18 | $uni-color-primary: #007aff;
19 | $uni-color-success: #4cd964;
20 | $uni-color-warning: #f0ad4e;
21 | $uni-color-error: #dd524d;
22 |
23 | /* 文字基本颜色 */
24 | $uni-text-color:#333;//基本色
25 | $uni-text-color-inverse:#fff;//反色
26 | $uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
27 | $uni-text-color-placeholder: #808080;
28 | $uni-text-color-disable:#c0c0c0;
29 |
30 | /* 背景颜色 */
31 | $uni-bg-color:#ffffff;
32 | $uni-bg-color-grey:#f8f8f8;
33 | $uni-bg-color-hover:#f1f1f1;//点击状态颜色
34 | $uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
35 |
36 | /* 边框颜色 */
37 | $uni-border-color:#c8c7cc;
38 |
39 | /* 尺寸变量 */
40 |
41 | /* 文字尺寸 */
42 | $uni-font-size-sm:24upx;
43 | $uni-font-size-base:28upx;
44 | $uni-font-size-lg:32upx;
45 |
46 | /* 图片尺寸 */
47 | $uni-img-size-sm:40upx;
48 | $uni-img-size-base:52upx;
49 | $uni-img-size-lg:80upx;
50 |
51 | /* Border Radius */
52 | $uni-border-radius-sm: 4upx;
53 | $uni-border-radius-base: 6upx;
54 | $uni-border-radius-lg: 12upx;
55 | $uni-border-radius-circle: 50%;
56 |
57 | /* 水平间距 */
58 | $uni-spacing-row-sm: 10px;
59 | $uni-spacing-row-base: 20upx;
60 | $uni-spacing-row-lg: 30upx;
61 |
62 | /* 垂直间距 */
63 | $uni-spacing-col-sm: 8upx;
64 | $uni-spacing-col-base: 16upx;
65 | $uni-spacing-col-lg: 24upx;
66 |
67 | /* 透明度 */
68 | $uni-opacity-disabled: 0.3; // 组件禁用态的透明度
69 |
70 | /* 文章场景相关 */
71 | $uni-color-title: #2C405A; // 文章标题颜色
72 | $uni-font-size-title:40upx;
73 | $uni-color-subtitle: #555555; // 二级标题颜色
74 | $uni-font-size-subtitle:36upx;
75 | $uni-color-paragraph: #3F536E; // 文章段落颜色
76 | $uni-font-size-paragraph:30upx;
--------------------------------------------------------------------------------
/cloud-seal/components/chunLei-modal/tabMask.js:
--------------------------------------------------------------------------------
1 | export class TabMask{
2 | constructor(option) {
3 | this.navList = []
4 | this.tabbarList = []
5 |
6 | option = option || {}
7 |
8 | let tabbarHeight = !option.tabbarHeight&&option.tabbarHeight!=0?50:option.tabbarHeight
9 |
10 | let navHeight = !option.navHeight&&option.navHeight!=0?(uni.getSystemInfoSync().statusBarHeight + 44):option.navHeight
11 | let opacity = option.opacity || 0
12 | let fn = ()=>{}
13 | this.fn = option.fn || fn
14 |
15 | //#ifdef APP-PLUS
16 | this.creatPlusMask(navHeight,tabbarHeight,opacity)
17 | //#endif
18 | }
19 | creatPlusMask(navHeight,tabbarHeight,opacity){
20 | let opa = 1-Math.pow((1-opacity),1/10)
21 |
22 | for (let i = 1; i <= 10; i++) {
23 |
24 | let navView = this.creatView({height:`${navHeight}px`,top:0},opa)
25 | let tabbarView = this.creatView({height:`${tabbarHeight}px`,bottom:0},opa)
26 |
27 | this.navList.push(navView)
28 | this.tabbarList.push(tabbarView)
29 | }
30 | }
31 | //生成 opacity view
32 | creatView(style,opa){
33 | style = {
34 | left:'0px',
35 | width:'100%',
36 | ...style
37 | }
38 | let view = new plus.nativeObj.View('view',style);
39 | view.draw([
40 | {tag:'rect',id:'rect',color:`rgba(0,0,0,${opa})`,position:{top:'0px',left:'0px',width:'100%',height:'100%'}},
41 | ]);
42 | view.addEventListener("click", (e) => {
43 | this.fn()
44 | this.hide()
45 | }, false);
46 | return view
47 | }
48 | show(time=300){
49 |
50 | let i = 0
51 | this.timer = setInterval(()=>{
52 | if(i==10){
53 | clearInterval(this.timer)
54 | }else{
55 | if (this.navList[i]) this.navList[i].show()
56 | if (this.tabbarList[i]) this.tabbarList[i].show()
57 | i++
58 | }
59 | },time/10)
60 | }
61 | hide(){
62 |
63 | clearInterval(this.timer)
64 | for (let item of this.navList) {
65 | item.hide();
66 | }
67 | for (let item of this.tabbarList) {
68 | item.hide();
69 | }
70 | }
71 | }
72 |
73 | export default TabMask
74 |
75 |
--------------------------------------------------------------------------------
/stu-app/components/chunLei-modal/tabMask.js:
--------------------------------------------------------------------------------
1 | export class TabMask{
2 | constructor(option) {
3 | this.navList = []
4 | this.tabbarList = []
5 |
6 | option = option || {}
7 |
8 | let tabbarHeight = !option.tabbarHeight&&option.tabbarHeight!=0?50:option.tabbarHeight
9 |
10 | let navHeight = !option.navHeight&&option.navHeight!=0?(uni.getSystemInfoSync().statusBarHeight + 44):option.navHeight
11 | let opacity = option.opacity || 0
12 | let fn = ()=>{}
13 | this.fn = option.fn || fn
14 |
15 | //#ifdef APP-PLUS
16 | this.creatPlusMask(navHeight,tabbarHeight,opacity)
17 | //#endif
18 | }
19 | creatPlusMask(navHeight,tabbarHeight,opacity){
20 | let opa = 1-Math.pow((1-opacity),1/10)
21 |
22 | for (let i = 1; i <= 10; i++) {
23 |
24 | let navView = this.creatView({height:`${navHeight}px`,top:0},opa)
25 | let tabbarView = this.creatView({height:`${tabbarHeight}px`,bottom:0},opa)
26 |
27 | this.navList.push(navView)
28 | this.tabbarList.push(tabbarView)
29 | }
30 | }
31 | //生成 opacity view
32 | creatView(style,opa){
33 | style = {
34 | left:'0px',
35 | width:'100%',
36 | ...style
37 | }
38 | let view = new plus.nativeObj.View('view',style);
39 | view.draw([
40 | {tag:'rect',id:'rect',color:`rgba(0,0,0,${opa})`,position:{top:'0px',left:'0px',width:'100%',height:'100%'}},
41 | ]);
42 | view.addEventListener("click", (e) => {
43 | this.fn()
44 | this.hide()
45 | }, false);
46 | return view
47 | }
48 | show(time=300){
49 |
50 | let i = 0
51 | this.timer = setInterval(()=>{
52 | if(i==10){
53 | clearInterval(this.timer)
54 | }else{
55 | if (this.navList[i]) this.navList[i].show()
56 | if (this.tabbarList[i]) this.tabbarList[i].show()
57 | i++
58 | }
59 | },time/10)
60 | }
61 | hide(){
62 |
63 | clearInterval(this.timer)
64 | for (let item of this.navList) {
65 | item.hide();
66 | }
67 | for (let item of this.tabbarList) {
68 | item.hide();
69 | }
70 | }
71 | }
72 |
73 | export default TabMask
74 |
75 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/components/mescroll-top.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
13 |
14 |
49 |
50 |
82 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/components/mescroll-top.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
13 |
14 |
49 |
50 |
82 |
--------------------------------------------------------------------------------
/cloud-seal/pages/workorder/workorderChoose/workorderChooseItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.orderNum}}
5 |
6 | 服务类型:
7 | {{bean.serviceTypeName}}
8 |
9 |
10 | 报单时间:
11 | {{bean.declarationTime}}
12 |
13 |
14 | 客户名称:
15 | {{bean.customerName}}
16 |
17 |
18 | 联系人:
19 | {{bean.contacts}}
20 |
21 |
22 | 联系电话:
23 | {{bean.phone}}
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
75 |
76 |
78 |
--------------------------------------------------------------------------------
/stu-app/pages/mine/myMation.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
43 |
44 |
45 |
46 |
47 |
48 |
82 |
83 |
92 |
--------------------------------------------------------------------------------
/cloud-seal/pages/fileconsole/myShareFile/myShareFileItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.shareName}}
5 |
6 | 分享类型:
7 | {{bean.shareType}}
8 |
9 |
10 | 文件类型:
11 | {{bean.fileType}}个
12 |
13 |
14 | 分享时间:
15 | {{bean.createTime}}
16 |
17 |
18 | 状态:
19 | {{bean.stateName}}
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
81 |
82 |
84 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartChoose/sparepartChooseItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.name}}
5 |
6 | 所属组:
7 | {{bean.groupName}}
8 |
9 |
10 | 单位类型:
11 | 非多单位
12 | 多单位
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
71 |
72 |
74 |
--------------------------------------------------------------------------------
/cloud-seal/components/mescroll-uni/components/mescroll-empty.vue:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 | {{ tip }}
12 | {{ option.btnText }}
13 |
14 |
15 |
16 |
48 |
49 |
91 |
--------------------------------------------------------------------------------
/stu-app/components/mescroll-uni/components/mescroll-empty.vue:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 | {{ tip }}
12 | {{ option.btnText }}
13 |
14 |
15 |
16 |
48 |
49 |
91 |
--------------------------------------------------------------------------------
/stu-app/pages/exam/endExam/endExamListItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.examName}}
5 |
6 | 考试科目:
7 | {{bean.subjectName}}
8 |
9 |
10 | 考试年级:
11 | {{bean.gradeName}}
12 |
13 |
14 | 题目总数:
15 | {{bean.surveyQuNum}}
16 |
17 |
18 | 发卷人:
19 | {{bean.createName}}
20 |
21 |
22 | 考试时间:
23 | {{bean.bgAnDate}}~{{bean.endAnDate}}
24 |
25 |
26 | 用时:
27 | {{bean.totalTime}}
28 |
29 |
30 | 得分:
31 | {{bean.markFraction}}/{{bean.examFraction}}
32 |
33 |
34 | 状态:
35 | {{bean.stateName}}
36 |
37 |
38 |
39 |
40 |
41 |
69 |
70 |
79 |
--------------------------------------------------------------------------------
/cloud-seal/pages/workorder/workorderState/workorderState.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{tab}}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
66 |
67 |
99 |
--------------------------------------------------------------------------------
/cloud-seal/pages/user/userChoose/userChooseState.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
82 |
83 |
85 |
--------------------------------------------------------------------------------
/cloud-seal/socket.js:
--------------------------------------------------------------------------------
1 | import socket from '@/components/plus-websocket/index.js'
2 |
3 | //检测socket连接是否打开
4 | var socketOpen = false;
5 | //记录未发送的消息
6 | var socketMsgQueue = [];
7 |
8 | var socketTask = null;
9 |
10 | var webSocketPath = 'ws://192.168.1.104:8081/'
11 |
12 | var connect = function() {
13 | var userToken = uni.getStorageSync("userToken") || '';
14 | //用户信息不为空时创建连接
15 | if(userToken != '' && userToken != 'undefined' && userToken != null){
16 | //创建连接
17 | socketTask = uni.connectSocket({
18 | url: webSocketPath + 'phonetalkwebsocket/' + userToken,
19 | data() {
20 | return {
21 | x: ''
22 | };
23 | },
24 | header: {
25 | 'content-type': 'application/json'
26 | },
27 | success: function(res){
28 | if(res.errMsg == 'connectSocket:ok'){
29 | console.log('请求成功')
30 | }
31 | },
32 | fail: function(res){
33 | console.log(res)
34 | },
35 | complete: ()=> {}
36 | });
37 |
38 | //监听WebSocket连接打开事件
39 | socketTask.onOpen(function (res) {
40 | socketOpen = true;
41 | //注意这里有时序问题,
42 | //如果 uni.connectSocket 还没回调 uni.onSocketOpen,而先调用 uni.closeSocket,那么就做不到关闭 WebSocket 的目的。
43 | //必须在 WebSocket 打开期间调用 uni.closeSocket 才能关闭。
44 | console.log('WebSocket连接已打开!');
45 | // uni.closeSocket();
46 | })
47 |
48 | //监听WebSocket接收到服务器的消息事件
49 | socketTask.onMessage(function(res){
50 | console.log('收到服务器内容:' + res.data);
51 | plus.push.createMessage( "测试消息" );
52 | })
53 |
54 | //监听WebSocket错误
55 | socketTask.onError(function(res){
56 | console.log('WebSocket连接打开失败,请检查!');
57 | })
58 |
59 | socketTask.onClose(function(res){
60 | console.log('WebSocket 已关闭!');
61 | })
62 | }
63 |
64 | }
65 |
66 | //发送消息
67 | function sendSocketMessage(msg) {
68 | if (socketOpen && socketTask) {
69 | socketTask.send({
70 | data: msg,
71 | async success() {
72 | console.log("消息发送成功");
73 | }
74 | })
75 | } else {
76 | socketMsgQueue.push(msg);
77 | }
78 | }
79 |
80 | //关闭连接
81 | function cls(){
82 | var userToken = uni.getStorageSync("userToken") || '';
83 |
84 | //用户信息不为空时创建连接
85 | if(userToken != '' && userToken != 'undefined' && userToken != null && socketTask){
86 | socketTask.close({
87 | success(res) {
88 | this.socketOpen = false;
89 | },
90 | fail(err) {
91 | console.log("关闭失败", err)
92 | }
93 | })
94 | }
95 | }
96 | export default {
97 | sendSocketMessage,
98 | cls,
99 | connect
100 | }
101 |
--------------------------------------------------------------------------------
/stu-app/components/uni-list/uni-refresh.wxs:
--------------------------------------------------------------------------------
1 | var pullDown = {
2 | threshold: 95,
3 | maxHeight: 200,
4 | callRefresh: 'onrefresh',
5 | callPullingDown: 'onpullingdown',
6 | refreshSelector: '.uni-refresh'
7 | };
8 |
9 | function ready(newValue, oldValue, ownerInstance, instance) {
10 | var state = instance.getState()
11 | state.canPullDown = newValue;
12 | console.log(newValue);
13 | }
14 |
15 | function touchStart(e, instance) {
16 | var state = instance.getState();
17 | state.refreshInstance = instance.selectComponent(pullDown.refreshSelector);
18 | state.canPullDown = (state.refreshInstance != null && state.refreshInstance != undefined);
19 | if (!state.canPullDown) {
20 | return
21 | }
22 |
23 | console.log("touchStart");
24 |
25 | state.height = 0;
26 | state.touchStartY = e.touches[0].pageY || e.changedTouches[0].pageY;
27 | state.refreshInstance.setStyle({
28 | 'height': 0
29 | });
30 | state.refreshInstance.callMethod("onchange", true);
31 | }
32 |
33 | function touchMove(e, ownerInstance) {
34 | var instance = e.instance;
35 | var state = instance.getState();
36 | if (!state.canPullDown) {
37 | return
38 | }
39 |
40 | var oldHeight = state.height;
41 | var endY = e.touches[0].pageY || e.changedTouches[0].pageY;
42 | var height = endY - state.touchStartY;
43 | if (height > pullDown.maxHeight) {
44 | return;
45 | }
46 |
47 | var refreshInstance = state.refreshInstance;
48 | refreshInstance.setStyle({
49 | 'height': height + 'px'
50 | });
51 |
52 | height = height < pullDown.maxHeight ? height : pullDown.maxHeight;
53 | state.height = height;
54 | refreshInstance.callMethod(pullDown.callPullingDown, {
55 | height: height
56 | });
57 | }
58 |
59 | function touchEnd(e, ownerInstance) {
60 | var state = e.instance.getState();
61 | if (!state.canPullDown) {
62 | return
63 | }
64 |
65 | state.refreshInstance.callMethod("onchange", false);
66 |
67 | var refreshInstance = state.refreshInstance;
68 | if (state.height > pullDown.threshold) {
69 | refreshInstance.callMethod(pullDown.callRefresh);
70 | return;
71 | }
72 |
73 | refreshInstance.setStyle({
74 | 'height': 0
75 | });
76 | }
77 |
78 | function propObserver(newValue, oldValue, instance) {
79 | pullDown = newValue;
80 | }
81 |
82 | module.exports = {
83 | touchmove: touchMove,
84 | touchstart: touchStart,
85 | touchend: touchEnd,
86 | propObserver: propObserver
87 | }
88 |
--------------------------------------------------------------------------------
/cloud-seal/components/uni-list/uni-refresh.wxs:
--------------------------------------------------------------------------------
1 | var pullDown = {
2 | threshold: 95,
3 | maxHeight: 200,
4 | callRefresh: 'onrefresh',
5 | callPullingDown: 'onpullingdown',
6 | refreshSelector: '.uni-refresh'
7 | };
8 |
9 | function ready(newValue, oldValue, ownerInstance, instance) {
10 | var state = instance.getState()
11 | state.canPullDown = newValue;
12 | console.log(newValue);
13 | }
14 |
15 | function touchStart(e, instance) {
16 | var state = instance.getState();
17 | state.refreshInstance = instance.selectComponent(pullDown.refreshSelector);
18 | state.canPullDown = (state.refreshInstance != null && state.refreshInstance != undefined);
19 | if (!state.canPullDown) {
20 | return
21 | }
22 |
23 | console.log("touchStart");
24 |
25 | state.height = 0;
26 | state.touchStartY = e.touches[0].pageY || e.changedTouches[0].pageY;
27 | state.refreshInstance.setStyle({
28 | 'height': 0
29 | });
30 | state.refreshInstance.callMethod("onchange", true);
31 | }
32 |
33 | function touchMove(e, ownerInstance) {
34 | var instance = e.instance;
35 | var state = instance.getState();
36 | if (!state.canPullDown) {
37 | return
38 | }
39 |
40 | var oldHeight = state.height;
41 | var endY = e.touches[0].pageY || e.changedTouches[0].pageY;
42 | var height = endY - state.touchStartY;
43 | if (height > pullDown.maxHeight) {
44 | return;
45 | }
46 |
47 | var refreshInstance = state.refreshInstance;
48 | refreshInstance.setStyle({
49 | 'height': height + 'px'
50 | });
51 |
52 | height = height < pullDown.maxHeight ? height : pullDown.maxHeight;
53 | state.height = height;
54 | refreshInstance.callMethod(pullDown.callPullingDown, {
55 | height: height
56 | });
57 | }
58 |
59 | function touchEnd(e, ownerInstance) {
60 | var state = e.instance.getState();
61 | if (!state.canPullDown) {
62 | return
63 | }
64 |
65 | state.refreshInstance.callMethod("onchange", false);
66 |
67 | var refreshInstance = state.refreshInstance;
68 | if (state.height > pullDown.threshold) {
69 | refreshInstance.callMethod(pullDown.callRefresh);
70 | return;
71 | }
72 |
73 | refreshInstance.setStyle({
74 | 'height': 0
75 | });
76 | }
77 |
78 | function propObserver(newValue, oldValue, instance) {
79 | pullDown = newValue;
80 | }
81 |
82 | module.exports = {
83 | touchmove: touchMove,
84 | touchstart: touchStart,
85 | touchend: touchEnd,
86 | propObserver: propObserver
87 | }
88 |
--------------------------------------------------------------------------------
/stu-app/socket.js:
--------------------------------------------------------------------------------
1 | import socket from '@/components/plus-websocket/index.js'
2 |
3 | //检测socket连接是否打开
4 | var socketOpen = false;
5 | //记录未发送的消息
6 | var socketMsgQueue = [];
7 |
8 | var socketTask = null;
9 |
10 | var webSocketPath = 'ws://192.168.1.104:8081/'
11 |
12 | var connect = function() {
13 | var userToken = uni.getStorageSync("userStuToken") || '';
14 | //用户信息不为空时创建连接
15 | if(userToken != '' && userToken != 'undefined' && userToken != null){
16 | //创建连接
17 | socketTask = uni.connectSocket({
18 | url: webSocketPath + 'phonetalkwebsocket/' + userToken,
19 | data() {
20 | return {
21 | x: ''
22 | };
23 | },
24 | header: {
25 | 'content-type': 'application/json'
26 | },
27 | success: function(res){
28 | if(res.errMsg == 'connectSocket:ok'){
29 | console.log('请求成功')
30 | }
31 | },
32 | fail: function(res){
33 | console.log(res)
34 | },
35 | complete: ()=> {}
36 | });
37 |
38 | //监听WebSocket连接打开事件
39 | socketTask.onOpen(function (res) {
40 | socketOpen = true;
41 | //注意这里有时序问题,
42 | //如果 uni.connectSocket 还没回调 uni.onSocketOpen,而先调用 uni.closeSocket,那么就做不到关闭 WebSocket 的目的。
43 | //必须在 WebSocket 打开期间调用 uni.closeSocket 才能关闭。
44 | console.log('WebSocket连接已打开!');
45 | // uni.closeSocket();
46 | })
47 |
48 | //监听WebSocket接收到服务器的消息事件
49 | socketTask.onMessage(function(res){
50 | console.log('收到服务器内容:' + res.data);
51 | if(typeof plus != 'undefined'){
52 | plus.push.createMessage( "测试消息" );
53 | }
54 | })
55 |
56 | //监听WebSocket错误
57 | socketTask.onError(function(res){
58 | console.log('WebSocket连接打开失败,请检查!');
59 | })
60 |
61 | socketTask.onClose(function(res){
62 | console.log('WebSocket 已关闭!');
63 | })
64 | }
65 |
66 | }
67 |
68 | //发送消息
69 | function sendSocketMessage(msg) {
70 | if (socketOpen && socketTask) {
71 | socketTask.send({
72 | data: msg,
73 | async success() {
74 | console.log("消息发送成功");
75 | }
76 | })
77 | } else {
78 | socketMsgQueue.push(msg);
79 | }
80 | }
81 |
82 | //关闭连接
83 | function cls(){
84 | var userToken = uni.getStorageSync("userStuToken") || '';
85 |
86 | //用户信息不为空时创建连接
87 | if(userToken != '' && userToken != 'undefined' && userToken != null && socketTask){
88 | socketTask.close({
89 | success(res) {
90 | this.socketOpen = false;
91 | },
92 | fail(err) {
93 | console.log("关闭失败", err)
94 | }
95 | })
96 | }
97 | }
98 | export default {
99 | sendSocketMessage,
100 | cls,
101 | connect
102 | }
103 |
--------------------------------------------------------------------------------
/stu-app/components/uni-icons/icons.js:
--------------------------------------------------------------------------------
1 | export default {
2 | 'contact': '\ue100',
3 | 'person': '\ue101',
4 | 'personadd': '\ue102',
5 | 'contact-filled': '\ue130',
6 | 'person-filled': '\ue131',
7 | 'personadd-filled': '\ue132',
8 | 'phone': '\ue200',
9 | 'email': '\ue201',
10 | 'chatbubble': '\ue202',
11 | 'chatboxes': '\ue203',
12 | 'phone-filled': '\ue230',
13 | 'email-filled': '\ue231',
14 | 'chatbubble-filled': '\ue232',
15 | 'chatboxes-filled': '\ue233',
16 | 'weibo': '\ue260',
17 | 'weixin': '\ue261',
18 | 'pengyouquan': '\ue262',
19 | 'chat': '\ue263',
20 | 'qq': '\ue264',
21 | 'videocam': '\ue300',
22 | 'camera': '\ue301',
23 | 'mic': '\ue302',
24 | 'location': '\ue303',
25 | 'mic-filled': '\ue332',
26 | 'speech': '\ue332',
27 | 'location-filled': '\ue333',
28 | 'micoff': '\ue360',
29 | 'image': '\ue363',
30 | 'map': '\ue364',
31 | 'compose': '\ue400',
32 | 'trash': '\ue401',
33 | 'upload': '\ue402',
34 | 'download': '\ue403',
35 | 'close': '\ue404',
36 | 'redo': '\ue405',
37 | 'undo': '\ue406',
38 | 'refresh': '\ue407',
39 | 'star': '\ue408',
40 | 'plus': '\ue409',
41 | 'minus': '\ue410',
42 | 'circle': '\ue411',
43 | 'checkbox': '\ue411',
44 | 'close-filled': '\ue434',
45 | 'clear': '\ue434',
46 | 'refresh-filled': '\ue437',
47 | 'star-filled': '\ue438',
48 | 'plus-filled': '\ue439',
49 | 'minus-filled': '\ue440',
50 | 'circle-filled': '\ue441',
51 | 'checkbox-filled': '\ue442',
52 | 'closeempty': '\ue460',
53 | 'refreshempty': '\ue461',
54 | 'reload': '\ue462',
55 | 'starhalf': '\ue463',
56 | 'spinner': '\ue464',
57 | 'spinner-cycle': '\ue465',
58 | 'search': '\ue466',
59 | 'plusempty': '\ue468',
60 | 'forward': '\ue470',
61 | 'back': '\ue471',
62 | 'left-nav': '\ue471',
63 | 'checkmarkempty': '\ue472',
64 | 'home': '\ue500',
65 | 'navigate': '\ue501',
66 | 'gear': '\ue502',
67 | 'paperplane': '\ue503',
68 | 'info': '\ue504',
69 | 'help': '\ue505',
70 | 'locked': '\ue506',
71 | 'more': '\ue507',
72 | 'flag': '\ue508',
73 | 'home-filled': '\ue530',
74 | 'gear-filled': '\ue532',
75 | 'info-filled': '\ue534',
76 | 'help-filled': '\ue535',
77 | 'more-filled': '\ue537',
78 | 'settings': '\ue560',
79 | 'list': '\ue562',
80 | 'bars': '\ue563',
81 | 'loop': '\ue565',
82 | 'paperclip': '\ue567',
83 | 'eye': '\ue568',
84 | 'arrowup': '\ue580',
85 | 'arrowdown': '\ue581',
86 | 'arrowleft': '\ue582',
87 | 'arrowright': '\ue583',
88 | 'arrowthinup': '\ue584',
89 | 'arrowthindown': '\ue585',
90 | 'arrowthinleft': '\ue586',
91 | 'arrowthinright': '\ue587',
92 | 'pulldown': '\ue588',
93 | 'closefill': '\ue589',
94 | 'sound': '\ue590',
95 | 'scan': '\ue612'
96 | }
97 |
--------------------------------------------------------------------------------
/cloud-seal/components/uni-icons/icons.js:
--------------------------------------------------------------------------------
1 | export default {
2 | 'contact': '\ue100',
3 | 'person': '\ue101',
4 | 'personadd': '\ue102',
5 | 'contact-filled': '\ue130',
6 | 'person-filled': '\ue131',
7 | 'personadd-filled': '\ue132',
8 | 'phone': '\ue200',
9 | 'email': '\ue201',
10 | 'chatbubble': '\ue202',
11 | 'chatboxes': '\ue203',
12 | 'phone-filled': '\ue230',
13 | 'email-filled': '\ue231',
14 | 'chatbubble-filled': '\ue232',
15 | 'chatboxes-filled': '\ue233',
16 | 'weibo': '\ue260',
17 | 'weixin': '\ue261',
18 | 'pengyouquan': '\ue262',
19 | 'chat': '\ue263',
20 | 'qq': '\ue264',
21 | 'videocam': '\ue300',
22 | 'camera': '\ue301',
23 | 'mic': '\ue302',
24 | 'location': '\ue303',
25 | 'mic-filled': '\ue332',
26 | 'speech': '\ue332',
27 | 'location-filled': '\ue333',
28 | 'micoff': '\ue360',
29 | 'image': '\ue363',
30 | 'map': '\ue364',
31 | 'compose': '\ue400',
32 | 'trash': '\ue401',
33 | 'upload': '\ue402',
34 | 'download': '\ue403',
35 | 'close': '\ue404',
36 | 'redo': '\ue405',
37 | 'undo': '\ue406',
38 | 'refresh': '\ue407',
39 | 'star': '\ue408',
40 | 'plus': '\ue409',
41 | 'minus': '\ue410',
42 | 'circle': '\ue411',
43 | 'checkbox': '\ue411',
44 | 'close-filled': '\ue434',
45 | 'clear': '\ue434',
46 | 'refresh-filled': '\ue437',
47 | 'star-filled': '\ue438',
48 | 'plus-filled': '\ue439',
49 | 'minus-filled': '\ue440',
50 | 'circle-filled': '\ue441',
51 | 'checkbox-filled': '\ue442',
52 | 'closeempty': '\ue460',
53 | 'refreshempty': '\ue461',
54 | 'reload': '\ue462',
55 | 'starhalf': '\ue463',
56 | 'spinner': '\ue464',
57 | 'spinner-cycle': '\ue465',
58 | 'search': '\ue466',
59 | 'plusempty': '\ue468',
60 | 'forward': '\ue470',
61 | 'back': '\ue471',
62 | 'left-nav': '\ue471',
63 | 'checkmarkempty': '\ue472',
64 | 'home': '\ue500',
65 | 'navigate': '\ue501',
66 | 'gear': '\ue502',
67 | 'paperplane': '\ue503',
68 | 'info': '\ue504',
69 | 'help': '\ue505',
70 | 'locked': '\ue506',
71 | 'more': '\ue507',
72 | 'flag': '\ue508',
73 | 'home-filled': '\ue530',
74 | 'gear-filled': '\ue532',
75 | 'info-filled': '\ue534',
76 | 'help-filled': '\ue535',
77 | 'more-filled': '\ue537',
78 | 'settings': '\ue560',
79 | 'list': '\ue562',
80 | 'bars': '\ue563',
81 | 'loop': '\ue565',
82 | 'paperclip': '\ue567',
83 | 'eye': '\ue568',
84 | 'arrowup': '\ue580',
85 | 'arrowdown': '\ue581',
86 | 'arrowleft': '\ue582',
87 | 'arrowright': '\ue583',
88 | 'arrowthinup': '\ue584',
89 | 'arrowthindown': '\ue585',
90 | 'arrowthinleft': '\ue586',
91 | 'arrowthinright': '\ue587',
92 | 'pulldown': '\ue588',
93 | 'closefill': '\ue589',
94 | 'sound': '\ue590',
95 | 'scan': '\ue612'
96 | }
97 |
--------------------------------------------------------------------------------
/cloud-seal/pages/sparepart/sparepartMyOrder/itemModel.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 申领单单号:
6 | {{pd.applyNum}}
7 |
8 |
9 | 所属工单:
10 | {{pd.orderNum}}
11 |
12 |
13 | 客户名称:
14 | {{pd.customerName}}
15 |
16 |
17 | 申领时间:
18 | {{pd.applyTime}}
19 |
20 |
21 | {{pd.stateName}}
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
91 |
92 |
94 |
--------------------------------------------------------------------------------
/cloud-seal/pages/mine/myEditPwd.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
28 |
29 |
30 |
31 |
32 |
79 |
80 |
82 |
--------------------------------------------------------------------------------
/stu-app/pages/mine/myEditPwd.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
28 |
29 |
30 |
31 |
32 |
79 |
80 |
82 |
--------------------------------------------------------------------------------
/cloud-seal/pages/workorder/workAllorderState/workAllorderState.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{tab}}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
73 |
74 |
106 |
--------------------------------------------------------------------------------
/cloud-seal/pages/workorder/workMyWriteorder/workMyWriteorderItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 工单号:
6 | {{bean.orderNum}}
7 |
8 |
9 | 客户名称:
10 | {{bean.customerName}}
11 |
12 |
13 | 产品名称:
14 | {{bean.productName}}
15 |
16 |
17 | 报单时间:
18 | {{bean.declarationTime}}
19 |
20 |
21 | 服务类型:
22 | {{bean.serviceTypeName}}
23 |
24 |
25 | {{bean.stateName}}
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
94 |
95 |
97 |
--------------------------------------------------------------------------------
/cloud-seal/pages/notice/myNotice/myNoticeListItem.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.title}}
5 |
6 | 简介:
7 | {{bean.desc}}
8 |
9 |
10 | 提醒时间:
11 | {{bean.createTime}}
12 |
13 |
14 | 状态:
15 | {{bean.state}}
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
92 |
93 |
102 |
--------------------------------------------------------------------------------
/cloud-seal/pages/workbench/workbench.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.title}}
5 |
6 |
7 |
8 | {{item.title}}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
61 |
62 |
115 |
--------------------------------------------------------------------------------
/cloud-seal/pages/mine/myMation.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
57 |
58 |
59 |
60 |
61 |
62 |
103 |
104 |
113 |
--------------------------------------------------------------------------------
/cloud-seal/components/pickerAddress/pickerAddress.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
117 |
118 |
120 |
--------------------------------------------------------------------------------
/stu-app/components/pickerAddress/pickerAddress.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
117 |
118 |
120 |
--------------------------------------------------------------------------------
/cloud-seal/components/uni-badge/uni-badge.vue:
--------------------------------------------------------------------------------
1 |
2 | {{ text }}
4 |
5 |
6 |
40 |
41 |
123 |
--------------------------------------------------------------------------------
/stu-app/components/uni-badge/uni-badge.vue:
--------------------------------------------------------------------------------
1 |
2 | {{ text }}
4 |
5 |
6 |
40 |
41 |
123 |
--------------------------------------------------------------------------------
/stu-app/pages/workbench/workbench.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{bean.title}}
5 |
6 |
7 |
8 | {{item.title}}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
72 |
73 |
126 |
--------------------------------------------------------------------------------
/stu-app/components/vmeitime-http/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 通用uni-app网络请求
3 | * 基于 Promise 对象实现更简单的 request 使用方式,支持请求和响应拦截
4 | */
5 | export default {
6 | config: {
7 | baseUrl: "http://192.168.1.104:8081/",
8 | data: {},
9 | header: {
10 | 'Content-Type':'application/x-www-form-urlencoded',
11 | "userToken": uni.getStorageSync("userStuToken") || '',
12 | "requestType": "2"
13 | },
14 | method: "GET",
15 | dataType: "json",
16 | /* 如设为json,会对返回的数据做一次 JSON.parse */
17 | responseType: "text",
18 | success() {},
19 | fail() {},
20 | complete() {}
21 | },
22 | request(options) {
23 | if (!options) {
24 | options = {}
25 | }
26 | options.baseUrl = options.baseUrl || this.config.baseUrl
27 | options.dataType = options.dataType || this.config.dataType
28 | options.url = options.baseUrl + options.url
29 | options.data = options.data || {}
30 | options.method = options.method || this.config.method
31 |
32 | return new Promise((resolve, reject) => {
33 | let _config = null
34 |
35 | options.complete = (response) => {
36 | let statusCode = response.statusCode
37 | if (statusCode === 200) { //成功
38 | //判断当前登录用户是否超时
39 | if(response.header.sessionstatus && 'TIMEOUT' === response.header.sessionstatus){
40 | uni.showToast({
41 | icon: 'none',
42 | position: 'bottom',
43 | title: '登录超时,请重新登录.',
44 | complete: function(){
45 | uni.reLaunch({
46 | url: '/pages/login/login',
47 | });
48 | }
49 | });
50 | return;
51 | }else if(response.header.sessionstatus && 'NOAUTHPOINT' === response.header.sessionstatus){
52 | uni.showToast({
53 | icon: 'none',
54 | position: 'bottom',
55 | title: '您不具备该权限.'
56 | });
57 | return;
58 | }
59 | //请求成功
60 | resolve(response.data);
61 | } else {
62 | //请求失败
63 | resolve({
64 | bean: "",
65 | error: "0",
66 | returnCode: -9999,
67 | returnMessage: "请求失败!",
68 | rows: "",
69 | total: 0
70 | });
71 | }
72 | }
73 |
74 | _config = Object.assign({}, this.config, options)
75 | _config.requestId = new Date().getTime()
76 | _config.header.userToken = uni.getStorageSync("userStuToken") || ''
77 |
78 | //发起请求
79 | uni.request(_config);
80 | });
81 | },
82 | get(url, data, options) {
83 | if (!options) {
84 | options = {}
85 | }
86 | options.url = url
87 | options.data = data
88 | options.method = 'GET'
89 | return this.request(options)
90 | },
91 | post(url, data, options) {
92 | if (!options) {
93 | options = {}
94 | }
95 | options.url = url
96 | options.data = data
97 | options.method = 'POST'
98 | return this.request(options)
99 | },
100 | put(url, data, options) {
101 | if (!options) {
102 | options = {}
103 | }
104 | options.url = url
105 | options.data = data
106 | options.method = 'PUT'
107 | return this.request(options)
108 | },
109 | delete(url, data, options) {
110 | if (!options) {
111 | options = {}
112 | }
113 | options.url = url
114 | options.data = data
115 | options.method = 'DELETE'
116 | return this.request(options)
117 | }
118 | }
119 |
--------------------------------------------------------------------------------
/stu-app/components/watch-login/watch-button.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
13 |
41 |
42 |
109 |
--------------------------------------------------------------------------------
/cloud-seal/components/watch-login/watch-button.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
13 |
41 |
42 |
109 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # cloud-after-sale
2 |
3 | #### 介绍
4 | 基于uniapp开发的适用于微信小程序,头条小程序,支付宝小程序,H5端的云售后。目前包括云售后各种功能的静态页面,集成多种自定义插件,[ 微信 + 支付宝 + 百度 + 头条 ] 小程序 + APP + 公众号 + PC + H5 项目代码简洁注释丰富上手容易,适合学习和企业中使用。
5 |
6 | > 该项目为售后工单系统的手机端,包括工单、申领单、客户、产品等多模块内容,目前正在做前后端联调。旨在真正意义上完成云售后的概念
7 |
8 | #### 已集成插件
9 | - [动态标签](https://ext.dcloud.net.cn/plugin?id=316) (v1.2)
10 | - [文件上传](https://ext.dcloud.net.cn/plugin?id=877) (2019-11-04)
11 | - [图片上传](https://ext.dcloud.net.cn/plugin?id=296) (2019-04-08)
12 | - [下拉刷新,上拉加载](https://ext.dcloud.net.cn/plugin?id=343) (v1.2.4 ⬆)
13 | - [表单验证](https://ext.dcloud.net.cn/plugin?id=746) (2019-09-06)
14 | - [popup 弹出层](https://ext.dcloud.net.cn/plugin?id=254) (2019-04-30)
15 | - [树插件](https://ext.dcloud.net.cn/plugin?id=1000) (v1.09 ⬇)
16 | - [位置判断](https://ext.dcloud.net.cn/plugin?id=594) (2019-07-20)
17 | - [选项卡导航栏](https://ext.dcloud.net.cn/plugin?id=626) (2019-08-02)
18 | - [文件管理器](https://ext.dcloud.net.cn/plugin?id=680) (v1.0.0)
19 | - [Badge 数字角标](https://ext.dcloud.net.cn/plugin?id=21) (v1.0.5)
20 | - [Fab 悬浮按钮](https://ext.dcloud.net.cn/plugin?id=144) (v1.0.5)
21 | - [js独立覆盖原生导航,几种常用类型,自定义modal](https://ext.dcloud.net.cn/plugin?id=820) (v1.2.0)
22 | - [消息界面](https://ext.dcloud.net.cn/plugin?id=208) (2019-04-04)
23 |
24 | #### 项目交流群
25 |
26 | - 开源不易,给个`star`吧
27 | - 项目交流群:(群一(满):[696070023](http://shang.qq.com/wpa/qunwpa?idkey=e9aace2bf3e05f37ed5f0377c3827c6683d970ac0bcc61b601f70dc861053229))(群二:[836039567](https://shang.qq.com/wpa/qunwpa?idkey=7bb6f29b27f772aadca9c7c4e384f7833c64e9c3c947b5e946c7b303d1fe174a))(群三:[887391486](https://shang.qq.com/wpa/qunwpa?idkey=a65f2e0292eb1048bb13abb7adca302bd83e3465974861ec1f04c2f7fffc4d99))
28 | - 请不要重复加群,一个群就可以了,把机会留给更多人
29 | - 进群先看公告!!!进群先看公告!!!进群先看公告!!! 重要的事情说三遍
30 | - 此软件为个人软件,没有试用地址,主项目地址:https://gitee.com/doc_wei01/skyeye
31 |
32 | #### 平台推荐
33 |
34 | - 地图(高德地图):https://lbs.amap.com/
35 | - 安卓平台签名证书:https://ask.dcloud.net.cn/article/35777
36 | - 消息推送平台(个推):https://dev.getui.com/dev/#/appManage
37 | - uni-push:https://dev.dcloud.net.cn/uni/push
38 |
39 | #### 开发工具
40 |
41 | > HBuilderX:[下载地址](https://www.dcloud.io/hbuilderx.html)
42 |
43 | #### 插件集成项
44 |
45 | > 插件安装方法:【工具】->【插件安装】
46 |
47 | - NPM:nodejs包管理,众多插件的安装基础
48 | - APP真机运行:App开发真机运行(需要的安装即可)
49 | - uni-app编辑:uni-app编译到各端的编译器
50 | - js-beautify:格式化vue,html,js,css,json代码
51 | - eslint-plugin-vue:vue语法校验
52 | - less编译:编译less为css,uni-app编译或对文件右键-外部命令编译时使用
53 | - scss/sass编译:编译scss为css,uni-app编译或对文件右键-外部命令编译时使用
54 |
55 | #### 功能点
56 |
57 | > 该功能点为目前已开发功能,`还在持续更新中`
58 |
59 | - 工单管理
60 | - 申领单管理
61 | - 配件管理
62 | - 产品管理
63 | - 客户管理
64 | - 云盘管理
65 | - 考勤签到
66 | - 工作日志
67 |
68 |
69 | #### 效果图
70 |
71 | 效果图|效果图|效果图|效果图
72 | -------|-------|-------|-------
73 | |||||
74 | |||||
75 |
76 |
77 |
--------------------------------------------------------------------------------
/cloud-seal/pages/common/imgPreview.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
11 |
12 |
13 |
14 |
15 |
16 | {{ current + 1 }} / {{ picList.length }}
17 |
18 |
19 |
20 |
69 |
70 |
147 |
--------------------------------------------------------------------------------
/stu-app/pages/common/imgPreview.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
11 |
12 |
13 |
14 |
15 |
16 | {{ current + 1 }} / {{ picList.length }}
17 |
18 |
19 |
20 |
69 |
70 |
147 |
--------------------------------------------------------------------------------